除了內置的數(shù)據(jù)集,scikit-learn
還提供了隨機樣本的生成器。
通過這些生成器函數(shù),可以生成具有特定特性和分布的隨機數(shù)據(jù)集,以幫助進行機器學習算法的研究、測試和比較。
目前,scikit-learn
庫(v1.3.0
版)中有20個不同的生成樣本的函數(shù)。
本篇重點介紹其中幾個具有代表性的函數(shù)。
1. 分類聚類數(shù)據(jù)樣本
分類和聚類是機器學習中使用頻率最高的算法,創(chuàng)建各種相關的樣本數(shù)據(jù),能夠幫助我們更好的試驗算法。
1.1. make_blobs
這個函數(shù)通常用于可視化分類器的學習過程,它生成由聚類組成的非線性數(shù)據(jù)集。
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()
上面的示例生成了1000個點的數(shù)據(jù),分為5個類別。
make_blobs
的主要參數(shù)包括:
- n_samples:生成的樣本數(shù)。
- n_features:每個樣本的特征數(shù)。通常為2,表示我們生成的是二維數(shù)據(jù)。
- centers:聚類的數(shù)量。即生成的樣本會被分為多少類。
- cluster_std:每個聚類的標準差。這決定了聚類的形狀和大小。
- shuffle:是否在生成數(shù)據(jù)后打亂樣本。
- random_state:隨機數(shù)生成器的種子。這確保了每次運行代碼時生成的數(shù)據(jù)集都是一樣的。
1.2. make_classification
這是一個用于生成復雜二維數(shù)據(jù)的函數(shù),通常用于可視化分類器的學習過程或者測試機器學習算法的性能。
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()
可以看出它生成的各類數(shù)據(jù)交織在一起,很難做線性的分類。
make_classification
的主要參數(shù)包括:
- n_samples:生成的樣本數(shù)。
- n_features:每個樣本的特征數(shù)。這個參數(shù)決定了生成的數(shù)據(jù)集的維度。
- n_informative:具有信息量的特征的數(shù)量。這個參數(shù)決定了特征集中的特征有多少是有助于分類的。
- n_redundant:冗余特征的數(shù)量。這個參數(shù)決定了特征集中的特征有多少是重復或者沒有信息的。
- random_state:隨機數(shù)生成器的種子。這確保了每次運行代碼時生成的數(shù)據(jù)集都是一樣的。
1.3. make_moons
和函數(shù)名稱所表達的一樣,它是一個用于生成形狀類似于月牙的數(shù)據(jù)集的函數(shù),通常用于可視化分類器的學習過程或者測試機器學習算法的性能。
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()
noise
越小,數(shù)據(jù)的分類越明顯。
make_moons
的主要參數(shù)包括:
- n_samples:生成的樣本數(shù)。
- noise:在數(shù)據(jù)集中添加的噪聲的標準差。這個參數(shù)決定了月牙的噪聲程度。
- random_state:隨機數(shù)生成器的種子。這確保了每次運行代碼時生成的數(shù)據(jù)集都是一樣的。
2. 回歸數(shù)據(jù)樣本
除了分類和聚類,回歸是機器學習的另一個重要方向。scikit-learn
同樣也提供了創(chuàng)建回歸數(shù)據(jù)樣本的函數(shù)。
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()
通過調節(jié)noise
參數(shù),可以創(chuàng)建不同精確度的回歸數(shù)據(jù)。
make_regression
的主要參數(shù)包括:
- n_samples:生成的樣本數(shù)。
- n_features:每個樣本的特征數(shù)。通常為一個較小的值,表示我們生成的是一維數(shù)據(jù)。
- noise:噪音的大小。它為數(shù)據(jù)添加一些隨機噪聲,以使結果更接近現(xiàn)實情況。
3. 流形數(shù)據(jù)樣本
所謂流形數(shù)據(jù),就是S形或者瑞士卷那樣旋轉的數(shù)據(jù),可以用來測試更復雜的分類模型的效果。
比如下面的make_s_curve
函數(shù),就可以創(chuàng)建S形的數(shù)據(jù):
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()
4. 總結
本文介紹的生成樣本數(shù)據(jù)的函數(shù)只是scikit-learn
庫中各種生成器的一部分,
還有很多種其他的生成器函數(shù)可以生成更加復雜的樣本數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-749508.html
所有的生成器函數(shù)請參考文檔:
https://scikit-learn.org/stable/modules/classes.html#samples-generator文章來源地址http://www.zghlxwxcb.cn/news/detail-749508.html
到了這里,關于【scikit-learn基礎】--『數(shù)據(jù)加載』之樣本生成器的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!