- 本文介紹sklearn.datasets子產品
- 本文是從jupyter文檔轉換來的,某個代碼塊不一定能直接複制運作,代碼輸出結果統一以注釋形式添加在代碼最後
文章目錄
- 1. 生成資料集
-
- 1.1 分類和聚類生成器
-
- 1.1.1 單标簽
-
- 1.1.1. make_blobs
- 1.1.1.2 make_classification
- 1.1.1.3 make_gaussian_quantiles
- 1.1.1.4 make_hastie_10_2
- 1.1.1.5 make_circles
- 1.1.1.6 make_moon
1. 生成資料集
- 前文:【sklearn】dataset子產品(1)—— 玩具資料集、遠端資料集 介紹了幾種datasets子產品自帶的資料集,但有些時候我們需要自定義生成服從某些分布某些形狀的資料集,這時就可以使用datasets中提供的各種随機樣本的生成器,建立可控制的大小和複雜性人工資料集。
- 全部加載方法
datasets.make_biclusters datasets.make_blobs datasets.make_checkerboard datasets.make_circles datasets.make_classification datasets.make_friedman1 datasets.make_friedman2 datasets.make_friedman3 datasets.make_gaussian_quantiles datasets.make_hastie_10_2 datasets.make_low_rank_matrix datasets.make_moons datasets.make_multilabel_classification datasets.make_regression datasets.make_s_curve datasets.make_sparse_coded_signal datasets.make_sparse_spd_matrix datasets.make_sparse_uncorrelated datasets.make_spd_matrix datasets.make_swiss_roll
- 常用方法
生成方法 介紹 make_blobs() 多類單标簽資料集,為每個類配置設定一個或多個正太分布的點集 make_classification() 多類單标簽資料集,為每個類配置設定一個或多個正太分布的點集,提供了為資料添加噪聲的方式,包括次元相關性,無效特征以及備援特征等 make_gaussian-quantiles() 将一個單高斯分布的點集劃分為兩個數量均等的點集,作為兩類 make_hastie-10-2() 産生一個相似的二進制分類資料集,有10個次元 make_circle 和 make_moom() 産生二維二進制分類資料集來測試某些算法的性能,可以為資料集添加噪聲,可以為二進制分類器産生一些球形判決界面的資料
1.1 分類和聚類生成器
- 以下生成器将産生一個相應特征的離散矩陣
1.1.1 單标簽
1.1.1. make_blobs
-
産生多類單标簽資料集,它為每個類配置設定服從一個或多個(每個次元)正态分布的點集,對于中心和各簇的标準偏差提供了更好的控制,可用于示範聚類。make_blobs
- 方法原型
sklearn.datasets.make_blobs(n_samples=100, n_features=2, *, centers=None, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None, return_centers=False,)
- 參數表
參數 類型 預設 說明 n_samples int類型 可選參數 (default=100) 總的點數,平均的分到每個clusters中。 n_features int類型 可選參數 (default=2) 每個樣本的特征次元。 centers int類型 or 聚類中心坐标元組構成的數組類型 可選參數(default=3) 産生的中心點的數量, or 固定中心點位置。 cluster_std float or floats序列 可選參數 (default=1.0) clusters的标準差。 center_box 一對floats (min, max) 可選參數 (default=(-10.0, 10.0)) 随機産生資料的時候,每個cluster中心的邊界。 shuffle boolean 可選參數 (default=True) 打亂樣本。 - 說明:
- 一共
個資料點,每個資料點有n_samples
個次元,服從第n_features
維方差為i
的cluster_std[i]
維正态分布,資料點(及其每個次元)分為n_features
類。每一類中心點的每一維都處于centers
給出的數軸邊界内。center_box
- 把每個簇想象成
維超立方體空間中的一個立方體,它的每個次元都服從指定的正态分布n_features
- 一共
- 示例
import numpy as np from sklearn import datasets from matplotlib import pyplot as plt my_datas = datasets.make_blobs(n_samples=1500, n_features=5, centers=3, center_box = (-10,10), cluster_std=[1.0,2.0,3.0]) x,y = my_datas plt.scatter(x[:, 0], x[:, 1], c=y, s=8) #print(x) #print(y)
1.1.1.2 make_classification
-
産生多類單标簽資料集,它為每個類配置設定服從一個或多個(每個次元)正态分布的點集,提供了為資料添加噪聲的方式,包括次元相關性,無效特征(随機噪聲)以及備援特征等。make_classification
- 方法原型
sklearn.datasets.make_classification(n_samples=100, n_features=20, *, n_informative=2, n_redundant=2, n_repeated=0, n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0, hypercube=True, shift=0.0, scale=1.0, shuffle=True, random_state=None,)
- 文檔:
- 原文:https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_classification.html#sklearn.datasets.make_classification
- 翻譯:https://blog.csdn.net/n889092/article/details/77126754
- 文檔介紹:
- 生成随機的n分類問題。
- 設有
維,邊長為n_informative
的超立方體,首先建立服從關于其頂點的正态分布(标準差std = 1)的點的簇,并為每個類配置設定相等數量的簇,它引入了這些特征之間的互相依賴性。然後可以為資料進一步添加各種類型的噪聲。2*class_sep
- 在不進行改組(Without shuffling)的情況下,“X”按以下順序水準排列特征:
-
特征n_informative
- informative特征的線性組合
n_redundant
-
重複項,這是從informative和redundant特征中進行替換随機繪制的。n_repeated
- 其餘特征用随機噪聲填充
-
- 是以,不進行改組(Without shuffling)時,所有有用的特征都包含在列
中。X [:,:n_informative + n_redundant + n_repeated]
- 參數表
參數 類型 預設 說明 n_samples int optional (default=100) 樣本數量. n_features int optional (default=20) 總的特征數量, 其中包括資訊特征
個,備援特征n_informative
個,重複特征n_redundant
個,其餘為随機繪制的無用特征。n_repeated
n_informative int optional (default=2) 資訊特征的數量。每個類由多個高斯簇組成,每個高斯簇都位于n_informative維子空間中超立方體的頂點周圍。 對于每個簇,資訊特征是獨立地繪制自正态分布N(0,1),然後随機線性組合各個簇中以增加協方差。簇位于在超立方體的頂點上。 n_redundant int optional (default=2) 備援特征的數量。這些特征是作為資訊特征的随機線性組合生成的 n_repeated int optional (default=0) 重複特征的數量。這些特征是從資訊特征和備援特征中随機抽取的 n_classes int optional (default=2) 分類問題的類(或标簽)數。 n_clusters_per_class int optional (default=2) 每個類的簇數量。 weights floats清單 or None (default=None) 每個類的權重,用于控制配置設定給每個類别的樣本比例。取值為None時均勻配置設定,否則根據floats清單給出的比例配置設定(這個清單長n_classes或n_classes-1,後者會自動推斷最後一個類别樣本比例)。如果比例之和大于1,傳回樣本數量可能超過n_samples flip_y float optional (default=0.01) 随機配置設定類别的樣本所占的比例。 較大的值會在标簽中引入噪音,并使分類任務更加困難。 請注意,在某些情況下,預設設定flip_y> 0可能導緻y中的類别數少于n_class。 class_sep float optional (default=1.0) 超立方體大小的乘數因子。較大的取值分散了簇/類别,使分類任務更加容易。 hypercube boolean optional (default=True) 如果為True,則将簇放置在超立方體的頂點上。 如果為False,則将簇放在随機多面體的頂點上。 shift float,array of shape [n_features] or None optional (default=0.0) 按指定值移動特征。 如果為None,則将特征移動 [-class_sep,class_sep] 中的随機值。 scale float array of shape [n_features] or None optional (default=1.0) 将特征乘以指定值進行縮放。 如果為None,則按[1,100]中随機選取的值縮放特征。 注意特征縮放是在特征移動後發生的。 shuffle boolean optional (default=True) 随機排列樣本和特征。 random_state int,RandomState instance or None optional (default=None) 如果int,random_state是随機數生成器使用的種子;如果是随機狀态執行個體,random_state是随機數生成器;如果為None,則随機數生成器是np.random使用的随機狀态執行個體 - 示例1
import numpy as np from sklearn import datasets from matplotlib import pyplot as plt # datasets.make_classification? # 要求:n_classes * n_clusters_per_class <= 2^n_informative data1,target1 = datasets.make_classification(n_samples=100, # 樣本總數 n_features=2, # 特征總數 = n_informative + n_redundant + n_repeated + 随機噪聲特征 n_informative=1, n_redundant=0, n_repeated=0, n_clusters_per_class=1) # 每個類的簇數量 data2,target2= datasets.make_classification(n_samples=100, n_features=2, n_informative=1, n_redundant=0, n_repeated=1, n_clusters_per_class=1) data3,target3= datasets.make_classification(n_samples=200, n_features=2, n_informative=2, n_redundant=0, n_repeated=0, n_clusters_per_class=1) data4,target4 = datasets.make_classification(n_samples=100, # 樣本總數 n_features=2, # 特征總數 = n_informative + n_redundant + n_repeated + 随機噪聲特征 n_informative=2, n_redundant=0, n_repeated=0, n_classes=2, n_clusters_per_class=2) # 每個類的簇數量 fig,axes = plt.subplots(1,4) axes[0].scatter(data1[:,0],data1[:,1],c=target1) axes[1].scatter(data2[:,0],data2[:,1],c=target2) axes[2].scatter(data3[:,0],data3[:,1],c=target3) axes[3].scatter(data4[:,0],data4[:,1],c=target4) plt.show()
- 示例2
import matplotlib.pyplot as plt from sklearn.datasets import make_classification plt.figure(figsize=(10,10)) # 建立一個10 * 10 英寸的圖像 plt.subplots_adjust(bottom=0.05,top=0.9,left=0.05,right=0.95) plt.subplot(221) plt.title("One informative feature, one cluster per class",fontsize='small') X1,Y1= make_classification(n_samples=1000, n_features=2, n_informative=1, n_redundant=0, n_clusters_per_class=1) plt.scatter(X1[:,0],X1[:,1],marker='o',c=Y1) plt.subplot(222) plt.title("Two informative features, two cluster per class", fontsize='small') X2,Y2 = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=2) plt.scatter(X2[:,0],X2[:,1],marker='o',c=Y2) plt.subplot(223) plt.title("Two informative features, two clusters per class", fontsize='small') X3,Y3 = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=2) plt.scatter(X3[:,0],X3[:,1],marker='o',c=Y3) plt.subplot(224) plt.title("Multi-class, two informative features, one cluster",fontsize='small') X4,Y4= make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_classes=3, n_clusters_per_class=1) plt.scatter(X4[:,0],X4[:,1],marker='o',c=Y4) plt.show()
1.1.1.3 make_gaussian_quantiles
-
産生多類單标簽資料集。它通過 χ 2 \chi^2 χ2 分布的分位數(quantile)将single Gaussian cluster(單高斯簇)進行近乎相等大小的同心超球面劃分,生成各向同性的高斯樣本及其标簽。簡單說,此分類資料集是從一個多元标準正态分布采樣得到的,若幹嵌套的同心多元球體将采樣資料劃分為各個類别,這種劃分使每個類中的樣本數量大緻相等make_gaussian_quantiles
- 方法原型
datasets.make_gaussian_quantiles(*, mean=None, cov=1.0, n_samples=100, n_features=2, n_classes=3, shuffle=True, random_state=None,)
- 參數表
參數 類型 預設 說明 mean array of shape [n_features] 可選參數 (default=None) 多元正态分布的均值。如果為None,則使用原點(0,0,…) cov float 可選參數 (default=1) 該值乘以機關矩陣得到協方差矩陣。該資料集僅産生對稱的正态分布 n_samples int 可選參數(default=100) 平均分散在各類别中的資料點總數 n_features int 可選參數 (default=2) 每個樣本的特征數量 n_classes int 可選參數 (default=3) 類别數量 shuffle boolean 可選參數 (default=True) 打亂樣本 random_state int,RandomState instance or None optional (default=None) 如果int,random_state是随機數生成器使用的種子;如果是随機狀态執行個體,random_state是随機數生成器;如果為None,則随機數生成器是np.random使用的随機狀态執行個體 - 示例
import numpy as np from sklearn import datasets from matplotlib import pyplot as plt # datasets.make_gaussian_quantiles? # 要求:len(mean) == n_features X,y = datasets.make_gaussian_quantiles(mean=[1,2,3], cov=2, n_samples=1000, n_features=3, n_classes=3,) fig = plt.figure(figsize = (12,6)) a0 = fig.add_subplot(1,2,1,label='a0') a0.scatter(X[:,0],X[:,1],c=y) a1 = fig.add_subplot(1,2,2,label='a1',projection='3d') #這種方法也可以畫多個子圖 a1.scatter(X[:,0],X[:,1],X[:,2],alpha=0.5,c=y) # alpha透明度,c顔色序列 #plt.scatter(X[:,0],X[:,1],marker='o',c=y,s=3) plt.tight_layout() plt.show()
1.1.1.4 make_hastie_10_2
-
産生一個相似的二進制分類資料集,每個樣本有10個次元,分别服從獨立的高斯分布,樣本 X[i] 的标簽根據以下公式生成make_hastie_10_2
- 若np.sum(X[i]**2) > 9.34,y[i] = 1
- 否則 y[i] = -1
- 方法原型
datasets.make_hastie_10_2(n_samples=12000, *, random_state=None)
- 示例
import numpy as np from sklearn import datasets from matplotlib import pyplot as plt my_datas = datasets.make_hastie_10_2(n_samples = 10000) X,y = my_datas plt.scatter(X[:, 0], X[:, 1], c=y, s=8)
1.1.1.5 make_circles
-
産生一個環狀二分類單标簽資料集。這是一個簡單的玩具資料集,生成帶有球面決策邊界的資料,可以選擇性加入高斯噪聲,用于可視化聚類和分類算法。make_circles
- 方法原型
datasets.make_circles(n_samples=100, *, shuffle=True, noise=None, random_state=None, factor=0.8,)
- 參數表
參數 類型 預設 說明 n_samples int or two-element tuple 可選參數 (default=100) 如果為int,則為生成的總點數(對于奇數,内圓将比外圓多一個點);如果是二進制組,則為外圓和内圓中的點數。 noise double or None 可選參數 (default=None) 加入的高斯噪聲的标準差 n_samples int 可選參數(default=100) 平均分散在各類别中的資料點總數 factor 0 < double < 1 可選參數 (default=0.8) 内外圓之間的比例因子 shuffle boolean 可選參數 (default=True) 打亂樣本 random_state int,RandomState instance or None optional (default=None) 如果int,random_state是随機數生成器使用的種子;如果是随機狀态執行個體,random_state是随機數生成器;如果為None,則随機數生成器是np.random使用的随機狀态執行個體 - 示例
import numpy as np from sklearn import datasets from matplotlib import pyplot as plt # datasets.make_circles? my_datas = datasets.make_circles(n_samples=1000, noise=0.1, factor=0.8,) X,y = my_datas plt.scatter(X[:, 0], X[:, 1], c=y, s=8)
1.1.1.6 make_moon
-
産生一個月牙形單标簽資料集。這是一個簡單的玩具資料集,生成帶有月牙形決策邊界的資料,可以選擇性加入高斯噪聲,用于可視化聚類和分類算法。make_moon
- 方法原型
datasets.make_moons(n_samples=100, *, shuffle=True, noise=None, random_state=None)
- 參數表:和
相比就少一個make_circles
,其他一樣factor
- 示例
import numpy as np from sklearn import datasets from matplotlib import pyplot as plt # datasets.make_moons? my_datas = datasets.make_moons(n_samples=1000, noise=0.1,) X,y = my_datas plt.scatter(X[:, 0], X[:, 1], c=y, s=8)
- 未完待續