【scikit-learn基礎】--『數據載入』之樣本生成器

来源:https://www.cnblogs.com/wang_yb/archive/2023/12/08/17884401.html
-Advertisement-
Play Games

除了內置的數據集,scikit-learn還提供了隨機樣本的生成器。通過這些生成器函數,可以生成具有特定特性和分佈的隨機數據集,以幫助進行機器學習演算法的研究、測試和比較。 目前,scikit-learn庫(v1.3.0版)中有20個不同的生成樣本的函數。本篇重點介紹其中幾個具有代表性的函數。 1. ...


除了內置的數據集,scikit-learn還提供了隨機樣本的生成器。
通過這些生成器函數,可以生成具有特定特性和分佈的隨機數據集,以幫助進行機器學習演算法的研究、測試和比較。

目前,scikit-learn庫(v1.3.0版)中有20個不同的生成樣本的函數。
本篇重點介紹其中幾個具有代表性的函數。

1. 分類聚類數據樣本

分類和聚類是機器學習中使用頻率最高的演算法,創建各種相關的樣本數據,能夠幫助我們更好的試驗演算法。

1.1. make_blobs

這個函數通常用於可視化分類器的學習過程,它生成由聚類組成的非線性數據集。

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

X, Y = make_blobs(n_samples=1000, centers=5)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25)

plt.show()

image.png
上面的示例生成了1000個點的數據,分為5個類別。

make_blobs的主要參數包括:

  • n_samples:生成的樣本數。
  • n_features:每個樣本的特征數。通常為2,表示我們生成的是二維數據。
  • centers:聚類的數量。即生成的樣本會被分為多少類。
  • cluster_std:每個聚類的標準差。這決定了聚類的形狀和大小。
  • shuffle:是否在生成數據後打亂樣本。
  • random_state:隨機數生成器的種子。這確保了每次運行代碼時生成的數據集都是一樣的。

1.2. make_classification

這是一個用於生成複雜二維數據的函數,通常用於可視化分類器的學習過程或者測試機器學習演算法的性能。

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification

X, Y = make_classification(n_samples=100, n_classes=4, n_clusters_per_class=1)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25)

plt.show()

image.png
可以看出它生成的各類數據交織在一起,很難做線性的分類。

make_classification的主要參數包括:

  • n_samples:生成的樣本數。
  • n_features:每個樣本的特征數。這個參數決定了生成的數據集的維度。
  • n_informative:具有信息量的特征的數量。這個參數決定了特征集中的特征有多少是有助於分類的。
  • n_redundant:冗餘特征的數量。這個參數決定了特征集中的特征有多少是重覆或者沒有信息的。
  • random_state:隨機數生成器的種子。這確保了每次運行代碼時生成的數據集都是一樣的。

1.3. make_moons

和函數名稱所表達的一樣,它是一個用於生成形狀類似於月牙的數據集的函數,通常用於可視化分類器的學習過程或者測試機器學習演算法的性能。

from sklearn.datasets import make_moons

fig, ax = plt.subplots(1, 3)
fig.set_size_inches(9, 3)

X, Y = make_moons(noise=0.01, n_samples=1000)
ax[0].scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25)
ax[0].set_title("noise=0.01")

X, Y = make_moons(noise=0.05, n_samples=1000)
ax[1].scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25)
ax[1].set_title("noise=0.05")

X, Y = make_moons(noise=0.5, n_samples=1000)
ax[2].scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25)
ax[2].set_title("noise=0.5")

plt.show()

image.png
noise越小,數據的分類越明顯。

make_moons的主要參數包括:

  • n_samples:生成的樣本數。
  • noise:在數據集中添加的雜訊的標準差。這個參數決定了月牙的雜訊程度。
  • random_state:隨機數生成器的種子。這確保了每次運行代碼時生成的數據集都是一樣的。

2. 回歸數據樣本

除了分類聚類回歸是機器學習的另一個重要方向。
scikit-learn同樣也提供了創建回歸數據樣本的函數。

from sklearn.datasets import make_regression

fig, ax = plt.subplots(1, 3)
fig.set_size_inches(9, 3)

X, y = make_regression(n_samples=100, n_features=1, noise=20)
ax[0].scatter(X[:, 0], y, marker="o")
ax[0].set_title("noise=20")

X, y = make_regression(n_samples=100, n_features=1, noise=10)
ax[1].scatter(X[:, 0], y, marker="o")
ax[1].set_title("noise=10")

X, y = make_regression(n_samples=100, n_features=1, noise=1)
ax[2].scatter(X[:, 0], y, marker="o")
ax[2].set_title("noise=1")

plt.show()

image.png
通過調節noise參數,可以創建不同精確度的回歸數據。

make_regression的主要參數包括:

  • n_samples:生成的樣本數。
  • n_features:每個樣本的特征數。通常為一個較小的值,表示我們生成的是一維數據。
  • noise:噪音的大小。它為數據添加一些隨機雜訊,以使結果更接近現實情況。

3. 流形數據樣本

所謂流形數據,就是S形或者瑞士捲那樣旋轉的數據,可以用來測試更複雜的分類模型的效果。
比如下麵的make_s_curve函數,就可以創建S形的數據:

from sklearn.datasets import make_s_curve

X, Y = make_s_curve(n_samples=2000)

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
fig.set_size_inches((8, 8))
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=Y, s=60, alpha=0.8)
ax.view_init(azim=-60, elev=9)
plt.show()

image.png

4. 總結

本文介紹的生成樣本數據的函數只是scikit-learn庫中各種生成器的一部分,
還有很多種其他的生成器函數可以生成更加複雜的樣本數據。

所有的生成器函數請參考文檔:
https://scikit-learn.org/stable/modules/classes.html#samples-generator


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.傳值和傳址的區別 傳值就是傳入一個參數的值,傳址就是傳入一個參數的地址,也就是記憶體的地址(相當於指針)。他們的區別是如果函數裡面對傳入的參數重新賦值,函數外的全局變數是否相應改變,用傳值傳入的參數是不會改變的,用傳址傳入就會改變。 a=1 def f(b): b=2 f(a) print (a) ...
  • 重覆的操作令手工測試苦不堪言,於是自動化測試出現了!作為web應用里最出名的自動化測試工具,selenium讓web應用的測試輕鬆了很多。今天我們就來簡單的介紹一下一些簡單的selenium瀏覽器操作。接下來我們就來看看python怎麼操作瀏覽器的吧! 1、打開指定的網頁地址 我們使用seleniu ...
  • 使用freemarker,導出製作好的ftl模板,並寫入數據 一、背景 1.1 項目背景 最近在開發一個項目,需要導出一些數據,然後寫入到word文檔中,然後再導出到本地,這個需求是比較常見的,但是我在網上找了很多資料,都沒有找到一個比較好的解決方案,所以就自己寫了一個,這裡分享給大家,希望能幫助到 ...
  • 目標現狀及問題 目標: 已有的國內項目,需要部署國際化。需要考慮幣種、金額貨幣精度、多語言、匯率、稅等一系列問題。這裡主要說的就是其中金額精度的處理。 現狀: 日常國內項目里,界面輸入的金額是元,然後資料庫存儲以及與其他系統交互都是用的分,也是就固定的貨幣精度繫數100。 問題: 那麼國際化項目後, ...
  • 從0到1,手把手帶你開發截圖工具ScreenCap------003實現最小化程式到托盤運行,- 為了方便截圖乾凈,實現最小化程式到托盤運行,簡潔,勿擾,實現最小化程式到托盤運行, 實現托盤菜單功能,實現回顯主窗體, 實現托盤開始截屏, 實現氣泡信息提示,實現托盤程式提示,實現托盤退出程式, 封裝完... ...
  • 目錄 基本說明 安裝 Nginx 部署 VUE 前端 部署 Django 後端 Django admin 靜態文件(CSS,JS等)丟失的問題 總結 1. 基本說明 本文介紹了在 windows 伺服器下,通過 Nginx 部署 VUE + Django 前後端分離項目。本項目前端運行在 80 埠 ...
  • 每次談到容器的時候,除了Docker之外,都會說起 Kubernetes,那麼什麼是 Kubernetes呢?今天就來一起學快速入門一下 Kubernetes 吧!希望本文對您有所幫助。 Kubernetes,一種用於管理和自動化雲中容器化工作負載的工具。 想象一下你有一個管弦樂隊,將每個音樂家視為 ...
  • 從0到1,手把手帶你開發截圖工具ScreenCap------002實現通過文件對話框,選擇合適的文件夾,自定義預設的圖片保存位置,簡單易學 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...