當前位置:
首頁 > 知識 > python機器學習庫sklearn——生成樣本數據

python機器學習庫sklearn——生成樣本數據


Linux編程

點擊右側關注,免費入門到精通!



作者丨數據架構師 


https://blog.csdn.net/luanpeng825485697/article/details/79808669 




sklearm自帶數據




sklearn自動了下面幾種數據用於演算法練習。




load_boston([return_X_y]) 載入波士頓房價數據;用於回歸問題




load_iris([return_X_y]) 載入iris 數據集;用於分類問題




load_diabetes([return_X_y]) 載入糖尿病數據集;用於回歸問題




load_digits([n_class, return_X_y]) 載入手寫字符集;用於分類問題




load_linnerud([return_X_y]) 載入linnerud 數據集;用於多元回歸問題




波士頓房價數據,回歸使用。樣本數據集的特徵默認是一個(506, 13)大小的矩陣,樣本值是一個包含506個數值的向量。



# 房價數據


from

 sklearn.datasets 

import

 load_boston

from

 sklearn 

import

 linear_model
boston = load_boston()
data=boston.data
target = boston.target

print

(data.shape)

print

(target.shape)

print

(

"係數矩陣:
"

,linear_model.LinearRegression().fit(data,target).coef_)




iris花卉數據,分類使用。樣本數據集的特徵默認是一個(150, 4)大小的矩陣,樣本值是一個包含150個類標號的向量,包含三種分類標號。




# 花卉數據

from

 sklearn.datasets 

import

 load_iris

from

 sklearn 

import

 svm
iris = load_iris()
data=iris.data
target = iris.target

print

(data.shape)

print

(target.shape)

print

(

"svm模型:
"

,svm.SVC().fit(data,target))




糖尿病數據集,回歸使用。樣本數據集的特徵默認是一個(442, 10)大小的矩陣,樣本值是一個包含442個數值的向量。




# 糖尿病數據集


from

 sklearn.datasets 

import

 load_diabetes

from

 sklearn 

import

 linear_model
diabetes = load_diabetes()
data=diabetes.data
target = diabetes.target

print

(data.shape)

print

(target.shape)

print

(

"係數矩陣:
"

,linear_model.LinearRegression().fit(data,target).coef_)




手寫體數據,分類使用。每個手寫體數據使用8*8的矩陣存放。樣本數據為(1797, 64)大小的數據集。




# # ===========手寫體數據===========


from

 sklearn.datasets 

import

 load_digits

import

 matplotlib.pyplot 

as

 plt 

# 畫圖工具


digits = load_digits()
data=digits.data

print

(data.shape)
plt.matshow(digits.images[

3

])  

# 矩陣像素點的樣式顯示3


# plt.imshow(digits.images[3])  # 圖片漸變的樣式顯示3


# plt.gray()   # 圖片顯示為灰度模式


plt.show()




linnerud數據集,多元回歸使用。樣本數據集的特徵默認是一個(20, 3)大小的矩陣,樣本值也是(20, 3)大小的矩陣。也就是3種特徵,有3個輸出結果,所以係數矩陣w為(3, 3)




#  # ===========多元回歸===========


from

 sklearn.datasets 

import

 load_linnerud

from

 sklearn 

import

 linear_model
linnerud = load_linnerud()
data=linnerud.data
target = linnerud.target

print

(data.shape)

print

(target.shape)

print

(

"係數矩陣:
"

,linear_model.LinearRegression().fit(data,target).coef_)




載入樣本圖案




# 圖像樣本數據集


from

 sklearn.datasets 

import

 load_sample_image

import

 matplotlib.pyplot 

as

 plt 

# 畫圖工具


img=load_sample_image(

"flower.jpg"

)   

# 載入sk自帶的花朵圖案


plt.imshow(img)
plt.show()







生成自定義分類數據




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





通常用於分類演算法。 





n_features :特徵個數= n_informative + n_redundant + n_repeated 


n_informative:多信息特徵的個數 


n_redundant:冗餘信息,informative特徵的隨機線性組合 


n_repeated :重複信息,隨機提取n_informative和n_redundant 特徵 


n_classes:分類類別 


n_clusters_per_class :某一個類別是由幾個cluster構成的




# # ===========生成分類樣本數據集===========


from

 sklearn 

import

 datasets

import

 matplotlib.pyplot 

as

 plt 

# 畫圖工具


data,target=datasets.make_classification(n_samples=

100

, n_features=

2

, n_informative=

2

, n_redundant=

0

,n_repeated=

0

, n_classes=

2

, n_clusters_per_class=

1

)

print

(data.shape)

print

(target.shape)
plt.scatter(data[:,

0

],data[:,

1

],c=target)
plt.show()




這裡生成的數據集圖如下,由於每次生成的數據都不一樣,所以讀者看到的圖片和這裡也不一樣的







其他生成分類樣本的函數




make_blobs函數會根據用戶指定的特徵數量、中心點數量、範圍等來生成幾類數據,這些數據可用於測試聚類演算法的效果。




其中: 


n_samples是待生成的樣本的總數。 


n_features是每個樣本的特徵數。 


centers表示類別數。 


cluster_std表示每個類別的方差,例如我們希望生成2類數據,其中一類比另一類具有更大的方差,可以將cluster_std設置為[1.0,3.0]。




sklearn.datasets.make_gaussian_quantiles(mean=

None

, cov=

1.0

, n_samples=

100

, n_features=

2

, n_classes=

3

,  
                    shuffle=

True

, random_state=

None





make_gaussian_quantiles函數利用高斯分位點區分不同數據




sklearn.datasets.make_hastie_10_2(n_samples=

12000

, random_state=

None

)




make_hastie_10_2函數利用Hastie演算法,生成2分類數據




下面我們通過代碼的比較一下這些樣本數據的生成。



import

 matplotlib.pyplot 

as

 plt

from

 sklearn.datasets 

import

 make_classification

from

 sklearn.datasets 

import

 make_blobs

from

 sklearn.datasets 

import

 make_gaussian_quantiles

from

 sklearn.datasets 

import

 make_hastie_10_2

plt.figure(figsize=(

10

10

))
plt.subplots_adjust(bottom=

.05

, top=

.9

, left=

.05

, right=

.95

)

plt.subplot(

421

)
plt.title(

"One informative feature, one cluster per class"

, fontsize=

"small"

)
X1, Y1 = make_classification(n_samples=

1000

, n_features=

2

, n_redundant=

0

, n_informative=

1

,n_clusters_per_class=

1

)
plt.scatter(X1[:, 

0

], X1[:, 

1

], marker=

"o"

, c=Y1)

plt.subplot(

422

)
plt.title(

"Two informative features, one cluster per class"

, fontsize=

"small"

)
X1, Y1 = make_classification(n_samples=

1000

, n_features=

2

, n_redundant=

0

, n_informative=

2

,n_clusters_per_class=

1

)
plt.scatter(X1[:, 

0

], X1[:, 

1

], marker=

"o"

, c=Y1)

plt.subplot(

423

)
plt.title(

"Two informative features, two clusters per class"

, fontsize=

"small"

)
X2, Y2 = make_classification(n_samples=

1000

, n_features=

2

, n_redundant=

0

, n_informative=

2

)
plt.scatter(X2[:, 

0

], X2[:, 

1

], marker=

"o"

, c=Y2)

plt.subplot(

424

)
plt.title(

"Multi-class, two informative features, one cluster"

,fontsize=

"small"

)
X1, Y1 = make_classification(n_samples=

1000

, n_features=

2

, n_redundant=

0

, n_informative=

2

,n_clusters_per_class=

1

, n_classes=

3

)
plt.scatter(X1[:, 

0

], X1[:, 

1

], marker=

"o"

, c=Y1)

plt.subplot(

425

)
plt.title(

"Three blobs"

, fontsize=

"small"

)

# 1000個樣本,2個屬性,3種類別,方差分別為1.0,3.0,2.0


X1, Y1 = make_blobs(n_samples=

1000

, n_features=

2

, centers=

3

,cluster_std=[

1.0

,

3.0

,

2.0

])
plt.scatter(X1[:, 

0

], X1[:, 

1

], marker=

"o"

, c=Y1)

plt.subplot(

426

)
plt.title(

"Gaussian divided into four quantiles"

, fontsize=

"small"

)
X1, Y1 = make_gaussian_quantiles(n_samples=

1000

, n_features=

2

, n_classes=

4

)
plt.scatter(X1[:, 

0

], X1[:, 

1

], marker=

"o"

, c=Y1)

plt.subplot(

427

)
plt.title(

"hastie data "

, fontsize=

"small"

)
X1, Y1 = make_hastie_10_2(n_samples=

1000

)
plt.scatter(X1[:, 

0

], X1[:, 

1

], marker=

"o"

, c=Y1)
plt.show()







自定義生成圓形和月牙形分類數據



sklearn.datasets.make_circles(n_samples=

100

, shuffle=

True

, noise=

None

, random_state=

None

, factor=

0.8





生成環形數據




factor :外圈與內圈的尺度因子<1



sklearn.datasets.make_moons(n_samples=

100

, shuffle=

True

, noise=

None

, random_state=

None





生成半環形圖



from

 sklearn.datasets 

import

 make_circles

from

 sklearn.datasets 

import

 make_moons

import

 matplotlib.pyplot 

as

 plt

fig = plt.figure(

1

)
x1, y1 = make_circles(n_samples=

1000

, factor=

0.5

, noise=

0.1

)
plt.subplot(

121

)
plt.title(

"make_circles function example"

)
plt.scatter(x1[:, 

0

], x1[:, 

1

], marker=

"o"

, c=y1)

plt.subplot(

122

)
x1, y1 = make_moons(n_samples=

1000

, noise=

0.1

)
plt.title(

"make_moons function example"

)
plt.scatter(x1[:, 

0

], x1[:, 

1

], marker=

"o"

, c=y1)
plt.show()







自定義生成回歸樣本



from

 sklearn.datasets 

import

 make_regression







 推薦↓↓↓ 






??

16個技術公眾號

】都在這裡!


涵蓋:程序員大咖、源碼共讀、程序員共讀、數據結構與演算法、黑客技術和網路安全、大數據科技、編程前端、Java、Python、Web編程開發、Android、iOS開發、Linux、資料庫研發、幽默程序員等。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python開發 的精彩文章:

炸吊天!年薪80+萬的大數據開發【教程】都在這兒!
別人的男朋友都挺帥的,而我的男朋友

TAG:Python開發 |