初學者學習機器學習的時候,經常會找不到練習的數據,實際上scikit-learn內置了很多可以用於機器學習的數據,用兩行代碼就可以使用這些數據。
一、自帶數據集
自帶的小的數據集為:sklearn.datasets.load_<name>
/<name>
load_boston Boston房屋價格 迴歸 506*13
fetch_california_housing 加州住房 迴歸 20640*9
load_diabetes 糖尿病 迴歸 442*10
load_digits 手寫字 分類 1797*64
load_breast_cancer 乳腺癌 分類、聚類 (357+212)*30
load_iris 鳶尾花 分類、聚類 (50*3)*4
load_wine 葡萄酒 分類 (59+71+48)*13
load_linnerud 體能訓練 多分類 20
怎麼用:
數據集的信息關鍵字:
DESCR:
數據集的描述信息
data:
內部數據(即:X)
-
feature_names:
數據字段名
target:
數據標籤(即:y)
target_names:
標籤字段名(迴歸數據集無此項)
使用方法(以load_iris為例)
數據介紹:
一般用於做分類測試
有150個數據集,共分為3類,每類50個樣本。每個樣本有4個特徵。
每條記錄都有 4 項特徵:包含4個特徵(Sepal.Length(花萼長度)、Sepal.Width(花萼寬度)、Petal.Length(花瓣長度)、Petal.Width(花瓣寬度)),特徵值都為正浮點數,單位為釐米。
-
可以通過這4個特徵預測鳶尾花卉屬於(iris-setosa(山鳶尾), iris-versicolour(雜色鳶尾), iris-virginica(維吉尼亞鳶尾))中的哪一品種。
第一步:
導入數據
from sklearn.datasets import load_iris
iris = load_iris()
第二步:
定義X和y
X, y = iris.data, iris.target
此外,可以看下數據的維度:
X.shape,y.shape
輸出為:
((150, 4), (150,))
查看特徵名:
iris.feature_names
輸出為:
['sepal length (cm)',
'sepal width (cm)',
'petal length (cm)',
'petal width (cm)']
查看標籤名:
iris.target_names
輸出為:
array(['setosa', 'versicolor', 'virginica'], dtype='
劃分訓練集和測試集:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
這樣就把訓練集和測試集按照3比1劃分了,接下來就可以用機器學習算法進行訓練和測試了。
小技巧:將數據轉換為Dataframe格式(兩種方法都可以):
import pandas as pd
df_X = pd.DataFrame(iris.data, columns=iris.feature_names)
#這個是X
df_y = pd.DataFrame(iris.target, columns=["target"])
#這個是y
df=pd.concat([df_X,df2],axis=1)#橫向合併
df.head()
或者:
import numpy as np
import pandas as pd
col_names = iris['feature_names'] + ['target']
df = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns=col_names)
df.head()
輸出結果一致:
二、可在線下載的數據集(需要下載)
下載的數據集為:sklearn.datasets.fetch_<name>
這類數據需要在線下載,有點慢
fetch_20newsgroups
用於文本分類、文本挖據和信息檢索研究的國際標準數據集之一。數據集收集了大約20,000左右的新聞組文檔,均勻分為20個不同主題的新聞組集合。返回一個可以被文本特徵提取器
fetch_20newsgroups_vectorized
這是上面這個文本數據的向量化後的數據,返回一個已提取特徵的文本序列,即不需要使用特徵提取器
fetch_california_housing
加利福尼亞的房價數據,總計20640個樣本,每個樣本8個屬性表示,以及房價作為target,所有屬性值均為number,詳情可調用fetch_california_housing()['DESCR']瞭解每個屬性的具體含義;
fetch_covtype
森林植被類型,總計581012個樣本,每個樣本由54個維度表示(12個屬性,其中2個分別是onehot4維和onehot40維),以及target表示植被類型1-7,所有屬性值均為number,詳情可調用fetch_covtype()['DESCR']瞭解每個屬性的具體含義
fetch_kddcup99
KDD競賽在1999年舉行時採用的數據集,KDD99數據集仍然是網絡入侵檢測領域的事實Benckmark,為基於計算智能的網絡入侵檢測研究奠定基礎,包含41項特徵
fetch_lfw_pairs
該任務稱為人臉驗證:給定一對兩張圖片,二分類器必須預測這兩個圖片是否來自同一個人。
fetch_lfw_people
打好標籤的人臉數據集
fetch_mldata
從 mldata.org 中下載數據集
fetch_olivetti_faces
Olivetti 臉部圖片數據集
fetch_rcv1
路透社新聞語聊數據集
fetch_species_distributions
物種分佈數據集
使用方法與自帶數據集一致,只是多了下載過程(示例:fetch_20newsgroups)
from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all') #本次使用的數據需要到互聯網上下載
from sklearn.model_selection import train_test_split
#對數據訓練集和測試件進行劃分
X_train, X_test, y_train, y_test = train_test_split(
news.data, news.target, test_size=0.25, random_state=33)
三、生成數據集
可以用來分類任務,可以用來回歸任務,可以用來聚類任務,用於流形學習的,用於因子分解任務的,用於分類任務和聚類任務的:這些函數產生樣本特徵向量矩陣以及對應的類別標籤集合
make_blobs:多類單標籤數據集,為每個類分配一個或多個正態分佈的點集
make_classification:多類單標籤數據集,為每個類分配一個或多個正態分佈的點集,提供了為數據添加噪聲的方式,包括維度相關性,無效特徵以及冗餘特徵等
make_gaussian-quantiles:將一個單高斯分佈的點集劃分為兩個數量均等的點集,作為兩類
make_hastie-10-2:產生一個相似的二元分類數據集,有10個維度
make_circle和make_moons:產生二維二元分類數據集來測試某些算法的性能,可以為數據集添加噪聲,可以為二元分類器產生一些球形判決界面的數據
舉例:
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
X, y = make_moons(n_samples=100, noise=0.15, random_state=42)
plt.title('make_moons function example')
plt.scatter(X[:,0],X[:,1],marker='o',c=y)
plt.show()
四、其它數據集
kaggle:
https://www.kaggle.com
天池:
https://tianchi.aliyun.com/dataset
搜狗實驗室:
http://www.sogou.com/labs/resource/list_pingce.php
DC競賽:
https://www.pkbigdata.com/common/cmptIndex.html
DF競賽:
https://www.datafountain.cn/datasets
總結
本文為機器學習初學者提供了使用scikit-learn內置數據的方法,用兩行代碼就可以使用這些數據,可以進行大部分的機器學習實驗了。
參考
https://scikit-learn.org/stable/datasets/index.html
想要更多更專業有趣的AI知識請關注【七月在線實驗室】
閱讀更多 七月在線 的文章