機器學(xué)習(xí)實戰(zhàn) | SKLearn入門與簡單應(yīng)用案例

引言

在前面的機器學(xué)習(xí)案例中,我們使用了Python機器學(xué)習(xí)工具庫Scikit-Learn,它建立在NumPy、SciPy、Pandas和Matplotlib之上,也是最常用的Python機器學(xué)習(xí)工具庫之一,里面的API的設(shè)計非常好,所有對象的接口簡單,很適合新手上路。ShowMeAI在本篇內(nèi)容中對Scikit-Learn做一個介紹。

1.SKLearn是什么

Scikit-Learn也簡稱SKLearn,是一個基于Python語言的機器學(xué)習(xí)工具,它對常用的機器學(xué)習(xí)方法進行了封裝,例如,分類、回歸、聚類、降維、模型評估、數(shù)據(jù)預(yù)處理等,我們只需調(diào)用對應(yīng)的接口即可。


在SKLearn的官網(wǎng)上,寫著以下四點介紹:

  • 一個簡單高效的數(shù)據(jù)挖掘和數(shù)據(jù)分析工具。
  • 構(gòu)建在NumPy,SciPy和matplotlib上。
  • 可供大家在各種環(huán)境中重復(fù)使用。
  • 開源,可商業(yè)使用–BSD許可證。

SKLearn官網(wǎng):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常用接口

對于機器學(xué)習(xí)整個流程中涉及到的常用操作,SKLearn中幾乎都有現(xiàn)成的接口可以直接調(diào)用,而且不管使用什么處理器或者模型,它的接口一致度都非常高。

3.1 數(shù)據(jù)集導(dǎo)入

更多數(shù)據(jù)集請參考SKLearn官網(wǎng):https://scikit-learn.org/stable/modules/classes.html?highlight=dataset#module-sklearn.datasets

#鳶尾花數(shù)據(jù)集
from sklearn.datasets import load_iris
#乳腺癌數(shù)據(jù)集
from sklearn.datasets import load_breast_cancer
#波士頓房價數(shù)據(jù)集
from sklearn.datasets import load_boston

3.2 數(shù)據(jù)預(yù)處理

官網(wǎng)鏈接:https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing

#拆分數(shù)據(jù)集
from sklearn.model_selection import train_test_split
#數(shù)據(jù)縮放
from sklearn.preprocessing import MinMaxScaler

3.3 特征抽取

官網(wǎng)鏈接: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 特征選擇

官網(wǎng)鏈接: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 常用模型

官網(wǎng)鏈接: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 建模擬合與預(yù)測

#擬合訓(xùn)練集
knn.fit(X_train,y_train)
#預(yù)測
y_pred=knn.predict(X_test)

3.7 模型評估

官網(wǎng)鏈接: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 典型的建模流程示例

典型的一個機器學(xué)習(xí)建模應(yīng)用流程遵循【數(shù)據(jù)準備】【數(shù)據(jù)預(yù)處理】【特征工程】【建模與評估】【模型優(yōu)化】這樣的一些流程環(huán)節(jié)。

# 加載數(shù)據(jù)
import numpy as np
import urllib
# 下載數(shù)據(jù)集
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=",")
# 區(qū)分特征和標簽
X = dataset[:,0:7]
y = dataset[:,8]


# 數(shù)據(jù)歸一化
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)
# 預(yù)測
expected = y
predicted = model.predict(X)
# 輸出評估結(jié)果
print('RESULT')
print(metrics.classification_report(expected, predicted))
print('CONFUSION MATRIX')
print(metrics.confusion_matrix(expected, predicted))

# 超參數(shù)調(diào)優(yōu)
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
聲明:版權(quán)所有,轉(zhuǎn)載請聯(lián)系平臺與作者并注明出處
收藏ShowMeAI查看更多精彩內(nèi)容


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容