、
?????????Sklearn全稱:Scipy-toolkit? Learn是?一個基于scipy實現的的開源機器學習庫。它提供了大量的算法和工具,用于數據挖掘和數據分析,包括分類、回歸、聚類等多種任務。本文我將帶你了解并入門Sklearn下的datasets在機器學習中的基本用法。
獲取方式
pip install scikit-learn
模塊結構
????????在Python中,要想熟練地使用一個庫來完成各種任務,那么我們必須得對這個庫內各個模塊的結構比較熟悉才可以,觀察Scikit-learn源代碼中的第一級模塊,我們不難畫出這樣的一個樹狀圖用來描述其結構:
? ? ? ? 在這其中,datasets為內置數據集,剩下的2-13基本包含了整個機器學習中所有比較經典的算法,后邊七個模塊是我們在進行機器學習任務時常用的工具。
????????后續,我將分別為大家介紹這20個模塊的基本用法,本文我們著重來了解datasets這個模塊的基本用法。
datasets
????????datasets是sklearn中用來加載預置數據集的模塊,其內部主要有以下數據集:
所有數據集
數據集名稱?? | ??導入方式?? | ??樣本數×特征數?? | ??描述?? |
---|---|---|---|
??load_iris?? | from sklearn.datasets import load_iris | 150×4 | 鳶尾花數據集,包含3類鳶尾花的4個特征(花萼/花瓣長寬) |
??load_digits?? | from sklearn.datasets import load_digits | 1797×64 | 手寫數字(0-9)的8x8像素圖像,共10類 |
??load_wine?? | from sklearn.datasets import load_wine | 178×13 | 葡萄酒化學分析數據,3類意大利不同品種葡萄酒 |
??load_breast_cancer?? | from sklearn.datasets import load_breast_cancer | 569×30 | 乳腺癌診斷數據,2類(惡性/良性),特征為細胞核的30項測量值 |
??load_diabetes?? | from sklearn.datasets import load_diabetes | 442×10 | 糖尿病進展指標,10個生理特征(年齡、BMI等),目標為定量病情進展 |
??fetch_california_housing?? | from sklearn.datasets import fetch_california_housing | 20640×8 | 加州房價數據,包含收入、房齡等特征,目標為房屋中位數價格(回歸問題) |
??fetch_olivetti_faces?? | from sklearn.datasets import fetch_olivetti_faces | 400×4096 | 40人的人臉圖像(每人10張),64x64像素,用于人臉識別 |
??fetch_20newsgroups?? | from sklearn.datasets import fetch_20newsgroups | 文本數據(約18k篇) | 20個新聞組的文本分類數據,需文本向量化處理 |
??make_classification?? | from sklearn.datasets import make_classification | 可自定義(默認100×20) | 生成合成分類數據,可控制樣本數、特征數、類別數等 |
??make_regression?? | from sklearn.datasets import make_regression | 可自定義(默認100×100) | 生成合成回歸數據,可控制噪聲、特征重要性等 |
??make_blobs?? | from sklearn.datasets import make_blobs | 可自定義(默認100×2) | 生成各向同性高斯分布的聚類數據,適用于聚類算法測試 |
??make_moons?? | from sklearn.datasets import make_moons | 可自定義(默認100×2) | 生成半月形非線性可分數據,用于測試分類算法 |
??make_circles?? | from sklearn.datasets import make_circles | 可自定義(默認100×2) | 生成同心圓非線性可分數據,用于測試分類算法 |
示例?
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#加載iris數據集
iris=load_iris()
X=iris.data#特征 (150, 4)
y=iris.target#三種花的類別(0,1,2)
feature_names=iris.feature_names
target_names=iris.target_names
#繪制花萼長度與寬度,其為data下的第0與第1特征
#y==0,y==1,y==2分別表示三中不同類別的花
plt.figure(figsize=(8, 6))
plt.scatter(X[y==0,0], X[y==0,1], color='red', label=target_names[0])
plt.scatter(X[y==1,0], X[y==1,1], color='blue',label=target_names[1])
plt.scatter(X[y==2,0], X[y==2,1], color='green',label=target_names[2])
plt.xlabel(feature_names[0]) #花萼長度
plt.ylabel(feature_names[1]) # 花萼寬度
plt.title("鳶尾花數據集:花萼長度VS花萼寬度")
plt.legend()
plt.show()
結果
數據集加載方法?
????????sklearn所有的load_數據集名稱函數的返回值為一個字典(不指定return_Xy=True時),這個字典內部包含的所有屬性為:
['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module']
??????????以load_iris()函數的返回值為例,?其中data是大小為指定形狀的ndarray類型數據,feature_names是data中的所有特征名稱構成的列表,feature_names的長度即為data.shape[1]的值也就是data對應的列數,target為數據集的目標變量(監督學習中的標簽或輸出值,在iris數據集中為三種類型的花的名稱)?也是ndarray的類型?
??鍵(Key)?? | ??數據類型?? | ??含義?? |
---|---|---|
data | numpy.ndarray ?(150×4) | 特征數據矩陣,每行代表一個樣本,每列代表一個特征(花萼/花瓣的長度和寬度)。 |
target | numpy.ndarray ?(150,) | 目標標簽(類別),整數編碼:0 =setosa,?1 =versicolor,?2 =virginica。 |
frame | pandas.DataFrame | 包含?data ?和?target ?的DataFrame(需?as_frame=True ?時返回)。 |
target_names | numpy.ndarray ?(3,) | 目標類別名稱,對應?target ?的標簽:['setosa', 'versicolor', 'virginica'] 。 |
feature_names | list ?(4,) | 特征名稱列表:['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] 。 |
DESCR | str | 數據集的完整描述(字符串),包含來源、特征解釋等信息。 |
filename | str | 數據文件的路徑(通常用于本地存儲的數據集)。 |
我們在使用時可以通過以下幾種方式來獲取
通過索引獲取?
from sklearn.datasets import load_iris
'''iris為包含['data', 'target','target_names', 'feature_names]等健的一個字典'''
iris=load_iris()
data=iris['data']
print(data)
通過屬性獲取?
from sklearn.datasets import load_iris
'''iris為包含['data', 'target','target_names', 'feature_names]等健的一個字典'''
iris=load_iris()
print(iris.data)
????????二者得到的結果是一致的。當然,為了方便我們還可以只返回data與target,需要指定return_Xy=True,此時返回值為tuple類型包含data與target
只獲取data與target
????????當我們將return_X_y指定為True時,函數返回值為data與target構成的tuple
from sklearn.datasets import load_iris
X,y=load_iris(return_X_y=True)#X為data,y為target
print(X)
????????
獲取Dataframe格式數據
????????當我們將as_frame指定為True時,函數的返回值仍然為字典,要想獲取dataframe格式的數據需要通過索引的方式來獲取,即'frame'。
from sklearn.datasets import load_iris
import pandas as pd
iris=load_iris(as_frame=True)
df=iris['frame']
總結
????????以上便是?Sklearn入門之datasets的基本用法的所有內容,如果本文對你有用,免費的三連來一波,感謝各位大佬支持。后續,我還將繼續介紹sklearn中其他模塊的使用方法。