機器學習神器 Scikit-Learn 入門教程
Scikit-learn 是一個非常知名的 Python 機器學習庫,它廣泛地用於統計分析和機器學習建模等數據科學領域。
-
建模無敵:用戶通過 scikit-learn 能夠實現各種監督和非監督學習的模型
-
功能多樣:同時使用 sklearn 還能夠進行數據的預處理、特徵工程、數據集切分、模型評估等工作
-
數據豐富:內置豐富的數據集,比如:泰坦尼克、鳶尾花等,數據不再愁啦
本篇文章通過簡明快要的方式來介紹 scikit-learn 的使用,更多詳細內容請參考官網:
-
內置數據集使用
-
數據集切分
-
數據歸一化和標準化
-
類型編碼
-
建模 6 步曲
Scikit-learn 使用神圖
下面這張圖是官網提供的,從樣本量的大小開始,分爲迴歸、分類、聚類、數據降維共 4 個方面總結了 scikit-learn 的使用:
https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
安裝
關於安裝 scikit-learn,建議通過使用 anaconda 來進行安裝,不用擔心各種配置和環境問題。當然也可以直接 pip 來安裝:
pip install scikit-learn
數據集生成
sklearn 內置了一些優秀的數據集,比如:Iris 數據、房價數據、泰坦尼克數據等。
import pandas as pd
import numpy as np
import sklearn
from sklearn import datasets # 導入數據集
分類數據 - iris 數據
# iris數據
iris = datasets.load_iris()
type(iris)
sklearn.utils.Bunch
iris 數據到底是什麼樣子?每個內置的數據都存在很多的信息
可以將上面的數據生成我們想看到的 DataFrame,還可以添加因變量:
迴歸數據 - 波士頓房價
我們重點關注的屬性:
-
data
-
target、target_names
-
feature_names
-
filename
同樣可以生成 DataFrame:
三種方式生成數據
方式 1
#調用模塊
from sklearn.datasets import load_iris
data = load_iris()
#導入數據和標籤
data_X = data.data
data_y = data.target
方式 2
from sklearn import datasets
loaded_data = datasets.load_iris() # 導入數據集的屬性
#導入樣本數據
data_X = loaded_data.data
# 導入標籤
data_y = loaded_data.target
方式 3
# 直接返回
data_X, data_y = load_iris(return_X_y=True)
數據集使用匯總
from sklearn import datasets # 導入庫
boston = datasets.load_boston() # 導入波士頓房價數據
print(boston.keys()) # 查看鍵(屬性) ['data','target','feature_names','DESCR', 'filename']
print(boston.data.shape,boston.target.shape) # 查看數據的形狀
print(boston.feature_names) # 查看有哪些特徵
print(boston.DESCR) # described 數據集描述信息
print(boston.filename) # 文件路徑
數據切分
# 導入模塊
from sklearn.model_selection import train_test_split
# 劃分爲訓練集和測試集數據
X_train, X_test, y_train, y_test = train_test_split(
data_X,
data_y,
test_size=0.2,
random_state=111
)
# 150*0.8=120
len(X_train)
數據標準化和歸一化
from sklearn.preprocessing import StandardScaler # 標準化
from sklearn.preprocessing import MinMaxScaler # 歸一化
# 標準化
ss = StandardScaler()
X_scaled = ss.fit_transform(X_train) # 傳入待標準化的數據
# 歸一化
mm = MinMaxScaler()
X_scaled = mm.fit_transform(X_train)
類型編碼
來自官網案例:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
對數字編碼
對字符串編碼
建模案例
導入模塊
from sklearn.neighbors import KNeighborsClassifier, NeighborhoodComponentsAnalysis # 模型
from sklearn.datasets import load_iris # 導入數據
from sklearn.model_selection import train_test_split # 切分數據
from sklearn.model_selection import GridSearchCV # 網格搜索
from sklearn.pipeline import Pipeline # 流水線管道操作
from sklearn.metrics import accuracy_score # 得分驗證
模型實例化
# 模型實例化
knn = KNeighborsClassifier(n_neighbors=5)
訓練模型
knn.fit(X_train, y_train)
KNeighborsClassifier()
測試集預測
y_pred = knn.predict(X_test)
y_pred # 基於模型的預測值
array([0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 1, 2, 2, 0, 2, 1, 0, 2, 1, 2,
1, 1, 2, 0, 0, 2, 0, 2])
得分驗證
模型得分驗證的兩種方式:
knn.score(X_test,y_test)
0.9333333333333333
accuracy_score(y_pred,y_test)
0.9333333333333333
網格搜索
如何搜索參數
from sklearn.model_selection import GridSearchCV
# 搜索的參數
knn_paras = {"n_neighbors":[1,3,5,7]}
# 默認的模型
knn_grid = KNeighborsClassifier()
# 網格搜索的實例化對象
grid_search = GridSearchCV(
knn_grid,
knn_paras,
cv=10 # 10折交叉驗證
)
grid_search.fit(X_train, y_train)
GridSearchCV(cv=10, estimator=KNeighborsClassifier(),
param_grid={'n_neighbors': [1, 3, 5, 7]})
# 通過搜索找到的最好參數值
grid_search.best_estimator_
KNeighborsClassifier(n_neighbors=7)
grid_search.best_params_
Out[42]:
{'n_neighbors': 7}
grid_search.best_score_
0.975
基於搜索結果建模
knn1 = KNeighborsClassifier(n_neighbors=7)
knn1.fit(X_train, y_train)
KNeighborsClassifier(n_neighbors=7)
通過下面的結果可以看到:網格搜索之後的建模效果是優於未使用網格搜索的模型:
y_pred_1 = knn1.predict(X_test)
knn1.score(X_test,y_test)
1.0
accuracy_score(y_pred_1,y_test)
1.0
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/l5Qgb_NvCnvalJFVT1MHGw