天天看點

sklearn中datasets的使用與實踐

介紹

  sklearn.datasets子產品主要提供了一些導入、線上下載下傳及本地生成資料集的方法,可以通過dir或help指令檢視,目前主要有三種形式:

  • load_<dataset_name> 本地加載資料,儲存在了本地磁盤上
    sklearn中datasets的使用與實踐
  • fetch_<dataset_name> 遠端加載資料
  • make_<dataset_name> 構造資料集

方法

  1. 本地加載資料集

資料集檔案在sklearn安裝目錄下datasets\data檔案下,如果有興趣可進入子產品目錄檢視

  

sklearn中datasets的使用與實踐
datasets.load_boston #波士頓房價資料集  
datasets.load_breast_cancer #乳腺癌資料集  
datasets.load_diabetes #糖尿病資料集  
datasets.load_digits #手寫體數字資料集  
datasets.load_files  
datasets.load_iris #鸢尾花資料集  
datasets.load_lfw_pairs  
datasets.load_lfw_people  
datasets.load_linnerud #體能訓練資料集  
datasets.load_mlcomp  
datasets.load_sample_image  
datasets.load_sample_images  
datasets.load_svmlight_file  
datasets.load_svmlight_files  
           

2、遠端加載資料集

  比較大的資料集,主要用于測試解決實際問題,支援線上下載下傳,下載下傳下來的資料,預設儲存在~/scikit_learn_data檔案夾下,可以通過設定環境變量SCIKIT_LEARN_DATA修改路徑,datasets.get_data_home()擷取下載下傳路徑。

  

sklearn中datasets的使用與實踐
datasets.fetch_20newsgroups  
datasets.fetch_20newsgroups_vectorized  
datasets.fetch_california_housing  
datasets.fetch_covtype  
datasets.fetch_kddcup99  
datasets.fetch_lfw_pairs  
datasets.fetch_lfw_people  
datasets.fetch_mldata  
datasets.fetch_olivetti_faces  
datasets.fetch_rcv1  
datasets.fetch_species_distributions  
           

3、構造資料集

下面以make_regression()函數為例,首先看看函數文法:

make_regression(n_samples=100, n_features=100, n_informative=10, n_targets=1, bias=0.0, effective_rank=None, tail_strength=0.5, noise=0.0, shuffle=True, coef=False, random_state=None)

參數說明:

n_samples:樣本數

n_features:特征數(自變量個數)

n_informative:相關特征(相關自變量個數)即參與了模組化型的特征數

n_targets:因變量個數

bias:偏差(截距)

coef:是否輸出coef辨別

sklearn中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  
           

實踐

1、本地磁盤自帶的小資料集

1.1 波士頓房價資料(适用于回歸任務)

這個資料集包含了506處波士頓不同地理位置的房産的房價資料(因變量),和與之對應的包含房屋以及房屋周圍的詳細資訊(自變量),其中包含城鎮犯罪率、一氧化氮濃度、住宅平均房間數、到中心區域的權重距離以及自住房平均房價等13個次元的資料,是以,波士頓房價資料集能夠應用到回歸問題上。

加載資料進來是字典類型

from sklearn import datasets

print(datasets.load_iris())

x = datasets.load_iris()['data']
label = datasets.load_iris()['target']
target_names = datasets.load_iris()['target_names']
feature_names = datasets.load_iris()['feature_names']

print(x)
print(label)
print(target_names)
print(feature_names)
           

1.2 威斯康辛州乳腺癌資料(适用于分類問題)

這個資料集包含了威斯康辛州記錄的569個病人的乳腺癌惡性/良性(1/0)類别型資料(訓練目标),以及與之對應的30個次元的生理名額資料;是以這是個非常标準的二類判别資料集。

from sklearn import datasets

my_datas = datasets.load_breast_cancer()
print(my_datas)

x = my_datas['data']
label = my_datas['target']
target_names = my_datas['target_names']
feature_names = my_datas['feature_names']

print(x)
print(label)
print(target_names)
print(feature_names)
           
sklearn中datasets的使用與實踐

1.3 糖尿病資料(适用于回歸任務)

這是一個糖尿病的資料集,主要包括442行資料,10個屬性值,分别是:Age(年齡)、性别(Sex)、Body mass index(體質指數)、Average Blood Pressure(平均血壓)、S1~S6一年後疾病級數名額。Target為一年後患疾病的定量名額,是以适合與回歸任務;

from sklearn import datasets

my_datas = datasets.load_diabetes()
# print(my_datas)
print(my_datas.keys())

x = my_datas['data']
label = my_datas['target']
# target_names = my_datas['target_names']
feature_names = my_datas['feature_names']

print(x)
print(label)
# print(target_names)
print(feature_names)
           
sklearn中datasets的使用與實踐

1.4 手寫數字資料集(适用于分類任務)

這個資料集是結構化資料的經典資料,共有1797個樣本,每個樣本有64的元素,對應到一個8x8像素點組成的矩陣,每一個值是其灰階值,我們都知道圖檔在計算機的底層實際是矩陣,每個位置對應一個像素點,有二值圖,灰階圖,1600萬色圖等類型,在這個樣本中對應的是灰階圖,控制每一個像素的黑白濃淡,是以每個樣本還原到矩陣後代表一個手寫體數字,這與我們之前接觸的資料有很大差別;

sklearn中datasets的使用與實踐

1.5 Fisher的鸢尾花資料(适用于分類問題)

著名的統計學家Fisher在研究判别分析問題時收集了關于鸢尾花的一些資料,這是個非常經典的資料集,datasets中自然也帶有這個資料集;這個資料集包含了150個鸢尾花樣本,對應3種鸢尾花,各50個樣本(target),以及它們各自對應的4種關于花外形的資料(自變量);

from sklearn import datasets
import numpy as np
from matplotlib import pyplot as plt

my_datas = datasets.load_iris()
print(my_datas.keys())

x = my_datas['data']
label = my_datas['target']
target_names = my_datas['target_names']
feature_names = my_datas['feature_names']

print(x)
print(label)
print(target_names)
print(feature_names)


           
sklearn中datasets的使用與實踐

1.6 紅酒資料(适用于分類問題)

這是一個共178個樣本,代表了紅酒的三個檔次(分别有59,71,48個樣本),以及與之對應的13維的屬性資料,非常适合用來練習各種分類算法;

from sklearn import datasets
import numpy as np
from matplotlib import pyplot as plt

my_datas = datasets.load_wine()
print(my_datas.keys())

x = my_datas['data']
label = my_datas['target']
target_names = my_datas['target_names']
feature_names = my_datas['feature_names']

print(x)
print(label)
print(target_names)
print(feature_names)


           
sklearn中datasets的使用與實踐

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:控制産生的聚類簇的個數

cluster_std:屬于同一個類簇的資料之間的方差

from sklearn import datasets
import numpy as np
from matplotlib import pyplot as plt

my_datas = datasets.make_blobs(n_samples=1500, n_features=25, centers=3, cluster_std=[1.0, 2.0, 3.0])
x, y = my_datas
plt.scatter(x[:, 0], x[:, 1], c=y, s=8)

# x = my_datas['data']
# label = my_datas['target']
# target_names = my_datas['target_names']
# feature_names = my_datas['feature_names']
#
# print(x)
# print(label)
# print(target_names)
# print(feature_names)


           
sklearn中datasets的使用與實踐

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 numpy as np
from matplotlib import pyplot as plt

x, y = datasets.make_circles(n_samples=1000, shuffle=True, noise=0.05, random_state=2, factor=0.35)
plt.scatter(x[:, 0], x[:, 1], c=y, s=8)

# x = my_datas['data']
# label = my_datas['target']
# target_names = my_datas['target_names']
# feature_names = my_datas['feature_names']
#
# print(x)
# print(label)
# print(target_names)
# print(feature_names)


           
sklearn中datasets的使用與實踐

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)