(數據科學學習手札21)sklearn.datasets常用功能詳解


作為Python中經典的機器學習模塊,sklearn圍繞着機器學習提供了很多可直接調用的機器學習算法以及很多經典的數據集,本文就對sklearn中專門用來得到已有或自定義數據集的datasets模塊進行詳細介紹;

datasets中的數據集分為很多種,本文介紹幾類常用的數據集生成方法,本文總結的所有內容你都可以在sklearn的官網:

http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets

中找到對應的更加詳細的英文版解釋;

 

1 自帶的經典小數據集

1.1 波士頓房價數據(適用於回歸任務)

這個數據集包含了506處波士頓不同地理位置的房產的房價數據(因變量),和與之對應的包含房屋以及房屋周圍的詳細信息(自變量),其中包含城鎮犯罪率、一氧化氮濃度、住宅平均房間數、到中心區域的加權距離以及自住房平均房價等13個維度的數據,因此,波士頓房價數據集能夠應用到回歸問題上,這里使用load_boston(return_X_y=False)方法來導出數據,其中參數return_X_y控制輸出數據的結構,若選為True,則將因變量和自變量獨立導出;

from sklearn import datasets

'''清空sklearn環境下所有數據'''
datasets.clear_data_home()

'''載入波士頓房價數據'''

X,y = datasets.load_boston(return_X_y=True)

'''獲取自變量數據的形狀'''

print(X.shape)

'''獲取因變量數據的形狀'''

print(y.shape)

自變量X:

因變量y:

 

 1.2 威斯康辛州乳腺癌數據(適用於分類問題)

 這個數據集包含了威斯康辛州記錄的569個病人的乳腺癌惡性/良性(1/0)類別型數據(訓練目標),以及與之對應的30個維度的生理指標數據;因此這是個非常標准的二類判別數據集,在這里使用load_breast_cancer(return_X_y)來導出數據:

from sklearn import datasets

'''載入威斯康辛州乳腺癌數據'''

X,y = datasets.load_breast_cancer(return_X_y=True)

'''獲取自變量數據的形狀'''

print(X.shape)

'''獲取因變量數據的形狀'''

print(y.shape)

自變量X:

因變量y:

 

1.3 糖尿病數據(適用於回歸任務)

這是一個糖尿病的數據集,主要包括442行數據,10個屬性值,分別是:Age(年齡)、性別(Sex)、Body mass index(體質指數)、Average Blood Pressure(平均血壓)、S1~S6一年后疾病級數指標。Target為一年后患疾病的定量指標,因此適合與回歸任務;這里使用load_diabetes(return_X_y)來導出數據:

from sklearn import datasets

'''載入糖尿病數據'''

X,y = datasets.load_diabetes(return_X_y=True)

'''獲取自變量數據的形狀'''

print(X.shape)

'''獲取因變量數據的形狀'''

print(y.shape)

自變量X:

因變量y:

 

 1.4 手寫數字數據集(適用於分類任務)

這個數據集是結構化數據的經典數據,共有1797個樣本,每個樣本有64的元素,對應到一個8x8像素點組成的矩陣,每一個值是其灰度值,我們都知道圖片在計算機的底層實際是矩陣,每個位置對應一個像素點,有二值圖,灰度圖,1600萬色圖等類型,在這個樣本中對應的是灰度圖,控制每一個像素的黑白濃淡,所以每個樣本還原到矩陣后代表一個手寫體數字,這與我們之前接觸的數據有很大區別;在這里我們使用load_digits(return_X_y)來導出數據:

 

from sklearn import datasets

'''載入手寫數字數據'''

data,target = datasets.load_digits(return_X_y=True)

print(data.shape)

print(target.shape)

 

這里我們利用matshow()來繪制這種矩陣形式的數據示意圖:

import matplotlib.pyplot as plt
import numpy as np

'''繪制數字0'''
num = np.array(data[0]).reshape((8,8))
plt.matshow(num)
print(target[0])

'''繪制數字5'''
num = np.array(data[15]).reshape((8,8))
plt.matshow(num)
print(target[15])

'''繪制數字9'''
num = np.array(data[9]).reshape((8,8))
plt.matshow(num)
print(target[9])

 1.5 Fisher的鳶尾花數據(適用於分類問題)

著名的統計學家Fisher在研究判別分析問題時收集了關於鳶尾花的一些數據,這是個非常經典的數據集,datasets中自然也帶有這個數據集;這個數據集包含了150個鳶尾花樣本,對應3種鳶尾花,各50個樣本(target),以及它們各自對應的4種關於花外形的數據(自變量);這里我們使用load_iris(return_X_y)來導出數據:

from sklearn import datasets

'''載入Fisher的鳶尾花數據'''

data,target = datasets.load_iris(return_X_y=True)

'''顯示自變量的形狀'''
print(data.shape)

'''顯示訓練目標的形狀'''
print(target.shape)

自變量:

訓練目標:

 

1.6 紅酒數據(適用於分類問題)

這是一個共178個樣本,代表了紅酒的三個檔次(分別有59,71,48個樣本),以及與之對應的13維的屬性數據,非常適合用來練習各種分類算法;在這里我們使用load_wine(return_X_y)來導出數據:

from sklearn import datasets

'''載入wine數據'''

data,target = datasets.load_wine(return_X_y=True)

'''顯示自變量的形狀'''
print(data.shape)

'''顯示訓練目標的形狀'''
print(target.shape)

 

2 自定義數據集

 前面我們介紹了幾種datasets自帶的經典數據集,但有些時候我們需要自定義生成服從某些分布或者某些形狀的數據集,而datasets中就提供了這樣的一些方法:

2.1 產生服從正態分布的聚類用數據

datasets.make_blobs(n_samples=100, n_features=2, centers=3, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None),其中:

n_samples:控制隨機樣本點的個數

n_features:控制產生樣本點的維度(對應n維正態分布)

centers:控制產生的聚類簇的個數

 

from sklearn import datasets
import matplotlib.pyplot as plt

X,y = datasets.make_blobs(n_samples=1000, n_features=2, centers=4, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None)

plt.scatter(X[:,0],X[:,1],c=y,s=8)

 

2.2 產生同心圓樣本點

datasets.make_circles(n_samples=100, shuffle=True, noise=0.04, random_state=None, factor=0.8)

 n_samples:控制樣本點總數

noise:控制屬於同一個圈的樣本點附加的漂移程度

factor:控制內外圈的接近程度,越大越接近,上限為1

from sklearn import datasets
import matplotlib.pyplot as plt

X,y = datasets.make_circles(n_samples=10000, shuffle=True, noise=0.04, random_state=None, factor=0.8)

plt.scatter(X[:,0],X[:,1],c=y,s=8)

 

 2.3 生成模擬分類數據集

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_samples:控制生成的樣本點的個數

n_features:控制與類別有關的自變量的維數

n_classes:控制生成的分類數據類別的數量

 

from sklearn import datasets

X,y = 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)

print(X.shape)
print(y.shape)
set(y)

 

 

 2.4 生成太極型非凸集樣本點

datasets.make_moons(n_samples,shuffle,noise,random_state)

from sklearn import datasets
import matplotlib.pyplot as plt

X,y = datasets.make_moons(n_samples=1000, shuffle=True, noise=0.05, random_state=None)

plt.scatter(X[:,0],X[:,1],c=y,s=8)

 

 以上就是sklearn.datasets中基本的數據集方法,如有筆誤之處望指出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM