引言
在前面的機器學習案例中,我們使用了Python機器學習工具庫Scikit-Learn,它建立在NumPy、SciPy、Pandas和Matplotlib之上,也是最常用的Python機器學習工具庫之一,里面的API的設計非常好,所有對象的接口簡單,很適合新手上路。ShowMeAI在本篇內容中對Scikit-Learn做一個介紹。
1.SKLearn是什么
Scikit-Learn也簡稱SKLearn,是一個基于Python語言的機器學習工具,它對常用的機器學習方法進行了封裝,例如,分類、回歸、聚類、降維、模型評估、數據預處理等,我們只需調用對應的接口即可。
在SKLearn的官網上,寫著以下四點介紹:
- 一個簡單高效的數據挖掘和數據分析工具。
- 構建在NumPy,SciPy和matplotlib上。
- 可供大家在各種環境中重復使用。
- 開源,可商業使用–BSD許可證。
SKLearn官網:https://scikit-learn.org/stable/
SKLearn的快速使用方法也推薦大家查看ShowMeAI的文章和速查手冊 AI建模工具速查|Scikit-learn使用指南
2.安裝SKLearn
安裝SKLearn非常簡單,命令行窗口中輸入命令:
pip install scikit-learn
我們也可以使用清華鏡像源安裝,通常速度會更快一些:
pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
3.SKLearn常用接口
對于機器學習整個流程中涉及到的常用操作,SKLearn中幾乎都有現成的接口可以直接調用,而且不管使用什么處理器或者模型,它的接口一致度都非常高。
3.1 數據集導入
更多數據集請參考SKLearn官網:https://scikit-learn.org/stable/modules/classes.html?highlight=dataset#module-sklearn.datasets
#鳶尾花數據集
from sklearn.datasets import load_iris
#乳腺癌數據集
from sklearn.datasets import load_breast_cancer
#波士頓房價數據集
from sklearn.datasets import load_boston
3.2 數據預處理
官網鏈接:https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing
#拆分數據集
from sklearn.model_selection import train_test_split
#數據縮放
from sklearn.preprocessing import MinMaxScaler
3.3 特征抽取
官網鏈接:https://scikit-learn.org/stable/modules/classes.html#module-sklearn.feature_extraction
from sklearn.feature_extraction import DictVectorizer
v = DictVectorizer(sparse=False)
D = [{'foo': 1, 'bar': 2}, {'foo': 3, 'baz': 1}]
X = v.fit_transform(D)
3.4 特征選擇
官網鏈接:https://scikit-learn.org/stable/modules/classes.html#module-sklearn.feature_selection
from sklearn.datasets import load_digits
from sklearn.feature_selection import SelectKBest, chi2
X, y = load_digits(return_X_y=True)
# 特征選擇
X_new = SelectKBest(chi2, k=20).fit_transform(X, y)
3.5 常用模型
官網鏈接:https://scikit-learn.org/stable/modules/classes.html
#KNN模型
from sklearn.neighbors import KNeighborsClassifier
#決策樹
from sklearn.tree import DecisionTreeClassifier
#支持向量機
from sklearn.svm import SVC
#隨機森林
from sklearn.ensemble import RandomForestClassifier
3.6 建模擬合與預測
#擬合訓練集
knn.fit(X_train,y_train)
#預測
y_pred=knn.predict(X_test)
3.7 模型評估
官網鏈接:https://scikit-learn.org/stable/modules/classes.html#sklearn-metrics-metrics
#求精度
knn.score(X_test,y_test)
#繪制混淆矩陣
from sklearn.metrics import confusion_matrix
#繪制ROC曲線
from sklearn.metrics import roc_curve,roc_auc_score
3.8 典型的建模流程示例
典型的一個機器學習建模應用流程遵循【數據準備】【數據預處理】【特征工程】【建模與評估】【模型優化】這樣的一些流程環節。
# 加載數據
import numpy as np
import urllib
# 下載數據集
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
raw_data = urllib.urlopen(url)
# 加載CSV文件
dataset = np.loadtxt(raw_data, delimiter=",")
# 區分特征和標簽
X = dataset[:,0:7]
y = dataset[:,8]
# 數據歸一化
from sklearn import preprocessing
# 幅度縮放
scaled_X = preprocessing.scale(X)
# 歸一化
normalized_X = preprocessing.normalize(X)
# 標準化
standardized_X = preprocessing.scale(X)
# 特征選擇
from sklearn import metrics
from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X, y)
# 特征重要度
print(model.feature_importances_)
# 建模與評估
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)
print('MODEL')
print(model)
# 預測
expected = y
predicted = model.predict(X)
# 輸出評估結果
print('RESULT')
print(metrics.classification_report(expected, predicted))
print('CONFUSION MATRIX')
print(metrics.confusion_matrix(expected, predicted))
# 超參數調優
from sklearn.model_selection import GridSearchCV
param_grid = {'penalty' : ['l1', 'l2', 'elasticnet'],
'C': [0.1, 1, 10]}
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
參考資料
作者:韓信子@ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/41
本文地址:http://www.showmeai.tech/article-detail/202
聲明:版權所有,轉載請聯系平臺與作者并注明出處
收藏ShowMeAI查看更多精彩內容