【機(jī)器學(xué)習(xí)】機(jī)器學(xué)習(xí)初學(xué)者繞不開的 15 個(gè) Scikit-Learn 重要技能!
Scikit-Learn 是一個(gè)非常棒的 python 庫(kù),用于實(shí)現(xiàn)機(jī)器學(xué)習(xí)模型和統(tǒng)計(jì)建模。通過(guò)它,我們不僅可以實(shí)現(xiàn)各種回歸、分類、聚類的機(jī)器學(xué)習(xí)模型,它還提供了降維、特征選擇、特征提取、集成技術(shù)和內(nèi)置數(shù)據(jù)集的功能。
今天我將詳細(xì)地介紹一下 Scikit-Learn,相信通過(guò)本文你會(huì)對(duì)它有更深刻的理解與運(yùn)用,喜歡點(diǎn)贊、收藏、分享。
1、數(shù)據(jù)集
學(xué)習(xí)算法時(shí),我們都希望有一些數(shù)據(jù)集可以練手。Scikit learn 附帶一些非常棒的數(shù)據(jù)集,如iris數(shù)據(jù)集、房?jī)r(jià)數(shù)據(jù)集、糖尿病數(shù)據(jù)集等。
這些數(shù)據(jù)集非常容易獲取、同時(shí)也易于理解,你可以直接在其上實(shí)現(xiàn)ML模型,非常適合初學(xué)者。
你可以按如下方式即可獲?。?/p>
import?sklearn
from?sklearn?import?datasets
import?pandas?as?pd
dataset?=?datasets.load_iris()
df?=?pd.DataFrame(dataset.data,?columns=dataset.feature_names)
同樣,你可以用同樣的方式導(dǎo)入其他數(shù)據(jù)集。
2、數(shù)據(jù)拆分
Sklearn 提供了拆分?jǐn)?shù)據(jù)集以進(jìn)行訓(xùn)練和測(cè)試的功能。拆分?jǐn)?shù)據(jù)集對(duì)于預(yù)測(cè)性能的無(wú)偏見評(píng)估至關(guān)重要,可以定義訓(xùn)練和測(cè)試數(shù)據(jù)集中的數(shù)據(jù)比例。
我們可以按如下方式拆分?jǐn)?shù)據(jù)集:
from?sklearn.model_selection?import?train_test_split
x_train,?x_test,?y_train,?y_test?=?train_test_split(x,?y,?test_size=2,?random_state=4)
在 train_test_split 的幫助下,我們對(duì)數(shù)據(jù)集進(jìn)行了拆分,使得訓(xùn)練集有 80% 的數(shù)據(jù)和測(cè)試集有 20% 的數(shù)據(jù)。
3、線性回歸
當(dāng)輸出變量為連續(xù)變量且與因變量呈線性關(guān)系時(shí),使用監(jiān)督機(jī)器學(xué)習(xí)模型,它可以通過(guò)分析前幾個(gè)月的銷售數(shù)據(jù)來(lái)預(yù)測(cè)未來(lái)幾個(gè)月的銷售。
借助sklearn,我們可以輕松實(shí)現(xiàn)線性回歸模型,如下所示:
from?sklearn.linear_model?import?LinearRegression
from?sklearn.metrics?import?mean_squared_error,?r2_score
regression_model?=?LinearRegression()
regression_model.fit(x_train,?y_train)
y_predicted?=?regression_model.predict(x_test)
rmse?=?mean_squared_error(y_test,?y_predicted)
r2?=?r2_score(y_test,?y_predicted)
首先 LinerRegression()創(chuàng)建一個(gè)線性回歸的對(duì)象,然后我們?cè)谟?xùn)練集上擬合模型。最后,我們?cè)跍y(cè)試數(shù)據(jù)集上預(yù)測(cè)了模型。"rmse"和"r_score"可用于檢查模型的準(zhǔn)確性。
4、邏輯回歸
邏輯回歸也是一種監(jiān)督回歸算法,就像線性回歸一樣。唯一的區(qū)別是輸出變量是分類的。它可用于預(yù)測(cè)患者是否患有心臟病。
借助 sklearn,我們可以輕松實(shí)現(xiàn) Logistic 回歸模型,如下所示:
from?sklearn.linear_model?import?LogisticRegression
from?sklearn.metrics?import?confusion_matrix
from?sklearn.metrics?import?classification_report
logreg?=?LogisticRegression()
logreg.fit(x_train,?y_train)
y_predicted?=?logreg.predict(x_test)
confusion_matrix?=?confusion_matrix(y_test,?y_pred)
print(confusion_matrix)
print(classification_report(y_test,?y_pred))
混淆矩陣和分類報(bào)告用于檢查分類模型的準(zhǔn)確性。
5、決策樹
決策樹是一個(gè)強(qiáng)大的工具,可用于分類和回歸問(wèn)題。它由根和節(jié)點(diǎn)組成,根代表分裂的決定,節(jié)點(diǎn)代表輸出變量值。當(dāng)因變量與自變量不遵循線性關(guān)系時(shí),決策樹很有用。
用于分類的決策樹實(shí)現(xiàn)
from?sklearn.tree?import?DecisionTreeClassifier
from?sklearn.metrics?import?confusion_matrix
from?sklearn.tree?import?export_graphviz
from?sklearn.externals.six?import?StringIO?
from?IPython.display?import?Image?
from?pydot?import?graph_from_dot_data
dt?=?DecisionTreeClassifier()
dt.fit(x_train,?y_train)
dot_data?=?StringIO()
export_graphviz(dt,?out_file=dot_data,?feature_names=iris.feature_names)
(graph,?)?=?graph_from_dot_data(dot_data.getvalue())
y_pred?=?dt.predict(x_test)
我們使用 DecisionTreeClassifier() 對(duì)象擬合模型,并使用進(jìn)一步的代碼來(lái)可視化 Python 中的決策樹實(shí)現(xiàn)。
6、Bagging
Bagging是一種使用訓(xùn)練集中的隨機(jī)樣本訓(xùn)練相同類型的多個(gè)模型的技術(shù)。不同模型的輸入是相互獨(dú)立的。
對(duì)于前一種情況,可以使用多個(gè)決策樹進(jìn)行預(yù)測(cè),而不僅僅是一個(gè)被稱為隨機(jī)森林的決策樹。
7、Boosting
Boosting 多個(gè)模型的訓(xùn)練方式是,一個(gè)模型的輸入取決于前一個(gè)模型的輸出。在 Boosting 中,對(duì)預(yù)測(cè)錯(cuò)誤的數(shù)據(jù)給予更多的優(yōu)先權(quán)。
8、隨機(jī)森林
隨機(jī)森林是一種 bagging 技術(shù),它使用成百上千的決策樹來(lái)構(gòu)建模型,用于分類和回歸問(wèn)題。比如:貸款申請(qǐng)人分類、識(shí)別欺詐活動(dòng)和預(yù)測(cè)疾病。
在 python 中實(shí)現(xiàn)如下:
from?sklearn.ensemble?import?RandomForestClassifier
num_trees?=?100
max_features?=?3
clf?=?RandomForestClassifier(n_estimators=num_trees,?max_features=max_features)
clf.fit(x_train,y_train)
y_pred=clf.predict(x_test)
print("Accuracy:",metrics.accuracy_score(y_test,?y_pred))
9、XGBoost
XGBoost 是一種提升技術(shù),可提供梯度提升決策樹的高性能實(shí)現(xiàn)。它可以自行處理丟失的數(shù)據(jù),支持正則化并且通常比其他模型給出更準(zhǔn)確的結(jié)果。
在 python 中實(shí)現(xiàn)如下:
from?xgboost?import?XGBClassifier
from?sklearn.metrics?import?mean_squared_error
xgb?=?XGBClassifier(colsample_bytree?=?0.3,?learning_rate?=?0.1,max_depth?=?5,?alpha?=?10,?n_estimators?=?10)
xgb.fit(x_train,y_train)
y_pred=xgb.predict(x_test)
rmse?=?np.sqrt(mean_squared_error(y_test,?preds))
print("RMSE:?%f"?%?(rmse))
10、支持向量機(jī)(SVM)
SVM是一種監(jiān)督機(jī)器學(xué)習(xí)算法,通過(guò)找到最好的超平面來(lái)進(jìn)行分類,它通常被用于許多應(yīng)用程序,例如人臉檢測(cè)、郵件分類等。
在 python 中實(shí)現(xiàn)為
from?sklearn?import?svm
from?sklearn?import?metrics
clf?=?svm.SVC(kernel='linear')
clf.fit(X_train,?y_train)
y_pred?=?clf.predict(X_test)
print("Accuracy:",metrics.accuracy_score(y_test,?y_pred))
11、混淆矩陣
混淆矩陣是用于描述分類模型性能的表格。混淆矩陣以如下4項(xiàng)的幫助下進(jìn)行分析:
真陽(yáng)性(TF)
這意味著模型預(yù)測(cè)為正,實(shí)際上為正。
真陰性(TN)
這意味著模型預(yù)測(cè)為負(fù),實(shí)際上為負(fù)。
誤報(bào)(FP)
這意味著模型預(yù)測(cè)為正,但實(shí)際上為負(fù)。
假陰性(FN)
這意味著模型預(yù)測(cè)為負(fù),但實(shí)際上為正。
Python 可以實(shí)現(xiàn)
from?sklearn.metrics?import?confusion_matrix
confusion_matrix?=?confusion_matrix(y_test,?y_pred)
print(confusion_matrix)
12、K-均值聚類
K-Means 聚類是一種用于解決分類問(wèn)題的無(wú)監(jiān)督機(jī)器學(xué)習(xí)算法。無(wú)監(jiān)督算法是數(shù)據(jù)集中沒有標(biāo)簽或輸出變量的算法。
在聚類中,數(shù)據(jù)集根據(jù)特征分成不同的組,稱為集群。k-means 聚類有很多應(yīng)用,例如市場(chǎng)分割、文檔聚類、圖像分割。
它可以在python中實(shí)現(xiàn)為:
from?sklearn.cluster?import?KMeans
import?statsmodels.api?as?sm
kmeans?=?KMeans(3)
means.fit(x)
identified_clusters?=?kmeans.fit_predict(x)
13、DBSCAN 聚類
DBSCAN 也是一種無(wú)監(jiān)督聚類算法,它根據(jù)數(shù)據(jù)點(diǎn)之間的相似性進(jìn)行聚類。在 DBSCAN 中,只有當(dāng)指定半徑的簇中的點(diǎn)數(shù)最少時(shí),才會(huì)形成簇。
DBSCAN 的優(yōu)勢(shì)在于它對(duì)異常值具有魯棒性,即它可以自行處理異常值,這與 k 均值聚類不同。DBSCAN 算法用于創(chuàng)建熱圖、地理空間分析、溫度數(shù)據(jù)中的異常檢測(cè)。
它可以實(shí)現(xiàn)為
from?sklearn.cluster?import?DBSCAN
from?sklearn?import?metrics
from?sklearn.preprocessing?import?StandardScaler
db?=?DBSCAN(eps=0.3,?min_samples=10).fit(X)
core_samples_mask?=?np.zeros_like(db.labels_,?dtype=bool)
core_samples_mask[db.core_sample_indices_]?=?True
labels?=?db.labels_
n_clusters_?=?len(set(labels))?-?(1?if?-1?in?labels?else?0)
print(labels)
14、標(biāo)準(zhǔn)化和規(guī)范化
標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化是一種縮放技術(shù),我們將屬性的均值設(shè)為 0,將標(biāo)準(zhǔn)差設(shè)為 1,從而使值以具有單位標(biāo)準(zhǔn)差的均值為中心。它可以做為 X'= (X-μ)/σ
歸一化
歸一化是一種使值的范圍從 0 到 1 的技術(shù),它也稱為最小-最大縮放。歸一化可以通過(guò)給定的公式 X= (X -Xmin)/(Xmax-Xmin) 來(lái)完成。
from?sklearn.preprocessing?import?StandardScaler
from?sklearn.preprocessing?import?MinMaxScaler
Python 提供了 StandardScaler 函數(shù)用于實(shí)現(xiàn)標(biāo)準(zhǔn)化,MinMaxScaler 函數(shù)用于規(guī)范化。
15、特征提取
特征提取是從數(shù)據(jù)中提取特征的方法。如果將數(shù)據(jù)轉(zhuǎn)換為數(shù)字格式,我們只能將數(shù)據(jù)傳遞給機(jī)器學(xué)習(xí)模型。Scikit-Learn 提供了將文本和圖像轉(zhuǎn)換為數(shù)字的功能。
Bag of Words 和 TF-IDF 是 scikit-learn 提供的自然語(yǔ)言處理中最常用的將單詞轉(zhuǎn)換為數(shù)字的方法。
概括
這篇文章詳細(xì)地介紹了 scikit-learn 的15個(gè)最重要的特性以及 python 代碼實(shí)現(xiàn)。
參考
https://ml2quantum.com/scikit-learn/
(完)
往期精彩回顧 本站qq群955171419,加入微信群請(qǐng)掃碼:
