【机器学习】太强了!这个建模神器可以玩一辈子
公眾號:Python數(shù)據(jù)科學(xué)
作者:東哥起飛
一、前言
大家好,本次給大家推薦一個(gè)模型的神器工具,在特征工程和模型驗(yàn)證等方面使用真的太好用了,極大的簡化了操作,并且提供可視化分析。
玩過建模的朋友都知道,在建立模型之前有很長的一段特征工程工作要做,而在特征工程的過程中,探索性數(shù)據(jù)分析又是必不可少的一部分,因?yàn)槿绻覀円獙Ω鱾€(gè)特征進(jìn)行細(xì)致的分析,那么必然會進(jìn)行一些可視化以輔助我們來做選擇和判斷。
可視化的工具有很多,但是能夠針對特征探索性分析而進(jìn)行專門可視化的不多,今天給大家介紹一款功能十分強(qiáng)大的工具:yellowbrick,希望通過這個(gè)工具的輔助可以節(jié)省更多探索的時(shí)間,快速掌握特征信息。
二、功能
1、雷達(dá) RadViz
RadViz雷達(dá)圖是一種多變量數(shù)據(jù)可視化算法,它圍繞圓周均勻地分布每個(gè)特征,并且標(biāo)準(zhǔn)化了每個(gè)特征值。一般數(shù)據(jù)科學(xué)家使用此方法來檢測類之間的關(guān)聯(lián)。例如,是否有機(jī)會從特征集中學(xué)習(xí)一些東西或是否有太多的噪音?
#?加載數(shù)據(jù) data?=?load_data("occupancy")#?特征和目標(biāo)變量 features?=?["temperature",?"relative?humidity",?"light",?"C02",?"humidity"] classes?=?["unoccupied",?"occupied"]#?賦值x和y X?=?data[features] y?=?data.occupancy#?導(dǎo)入 visualizer from?yellowbrick.features?import?RadViz#?調(diào)用visualizer visualizer?=?RadViz(classes=classes,?features=features)visualizer.fit(X,?y)?????? visualizer.transform(X)??? visualizer.poof()?????????從上面雷達(dá)圖可以看出5個(gè)維度中,溫度對于目標(biāo)類的影響是比較大的。
2、一維排序 Rank 1D
特征的一維排序利用排名算法,僅考慮單個(gè)特征,默認(rèn)情況下使用Shapiro-Wilk算法來評估各特征樣本分布的正態(tài)性,通過繪制一個(gè)條形圖,展示每個(gè)特征的檢驗(yàn)值。
from?yellowbrick.features?import?Rank1D#?使用 Sharpiro?ranking算法調(diào)用Rank1D visualizer?=?Rank1D(features=features,?algorithm='shapiro')visualizer.fit(X,?y)???????????????? visualizer.transform(X)????????????? visualizer.poof()???????????????????3、PCA Projection
PCA分解可視化利用主成分分析將高維數(shù)據(jù)分解為二維或三維,以便可以在散點(diǎn)圖中繪制每個(gè)實(shí)例。PCA的使用意味著可以沿主要變化軸分析投影數(shù)據(jù)集,并且可以解釋該數(shù)據(jù)集以確定是否可以利用球面距離度量。
4、雙重圖 Biplot
PCA投影可以增強(qiáng)到雙點(diǎn),其點(diǎn)是投影實(shí)例,其矢量表示高維空間中數(shù)據(jù)的結(jié)構(gòu)。通過使用proj_features = True標(biāo)志,數(shù)據(jù)集中每個(gè)要素的向量將在散點(diǎn)圖上以該要素的最大方差方向繪制。這些結(jié)構(gòu)可用于分析特征對分解的重要性或查找相關(guān)方差的特征以供進(jìn)一步分析。
#?導(dǎo)入數(shù)據(jù) data?=?load_data('concrete')#?選擇特征和目標(biāo)變量 target?=?"strength" features?=?['cement',?'slag',?'ash',?'water',?'splast',?'coarse',?'fine',?'age' ]#?設(shè)置x和y X?=?data[features] y?=?data[target]visualizer?=?PCADecomposition(scale=True,?proj_features=True) visualizer.fit_transform(X,?y) visualizer.poof()5、特征重要性 Feature Importance
特征工程過程涉及選擇生成有效模型所需的最小特征,因?yàn)槟P桶奶卣髟蕉?#xff0c;它就越復(fù)雜(數(shù)據(jù)越稀疏),因此模型對方差的誤差越敏感。消除特征的常用方法是描述它們對模型的相對重要性,然后消除弱特征或特征組合并重新評估以確定模型在交叉驗(yàn)證期間是否更好。
在scikit-learn中,Decision Tree模型和樹的集合(如Random Forest,Gradient Boosting和AdaBoost)在擬合時(shí)提供feature_importances_屬性。Yellowbrick FeatureImportances可視化工具利用此屬性對相對重要性進(jìn)行排名和繪制。
import?matplotlib.pyplot?as?pltfrom?sklearn.ensemble?import?GradientBoostingClassifierfrom?yellowbrick.features.importances?import?FeatureImportances#?繪圖 fig?=?plt.figure() ax?=?fig.add_subplot()viz?=?FeatureImportances(GradientBoostingClassifier(),?ax=ax) viz.fit(X,?y) viz.poof()6、遞歸特征消除 Recursive Feature Elimination
遞歸特征消除(RFE)是一種特征選擇方法,它訓(xùn)練模型并刪除最弱的特征(或多個(gè)特征),直到達(dá)到指定數(shù)量的特征。特征按模型的coef_或feature_importances_屬性排序,并通過遞歸消除每個(gè)循環(huán)的少量特征,RFE嘗試消除模型中可能存在的依賴性和共線性。??
RFE需要保留指定數(shù)量的特征,但事先通常不知道有多少特征有效。為了找到最佳數(shù)量的特征,交叉驗(yàn)證與RFE一起用于對不同的特征子集進(jìn)行評分,并選擇最佳評分特征集合。RFECV可視化繪制模型中的特征數(shù)量以及它們的交叉驗(yàn)證測試分?jǐn)?shù)和可變性,并可視化所選數(shù)量的特征。
from?sklearn.svm?import?SVC from?sklearn.datasets?import?make_classificationfrom?yellowbrick.features?import?RFECV#?造數(shù)據(jù)集 X,?y?=?make_classification(n_samples=1000,?n_features=25,?n_informative=3,?n_redundant=2,n_repeated=0,?n_classes=8,?n_clusters_per_class=1,?random_state=0 )#?linear?SVM?分類器創(chuàng)建遞歸特征消除 viz?=?RFECV(SVC(kernel='linear',?C=1)) viz.fit(X,?y) viz.poof()該圖顯示了理想的RFECV曲線,當(dāng)捕獲三個(gè)信息特征時(shí),曲線跳躍到極好的準(zhǔn)確度,然后隨著非信息特征被添加到模型中,精度逐漸降低。陰影區(qū)域表示交叉驗(yàn)證的可變性,一個(gè)標(biāo)準(zhǔn)偏差高于和低于曲線繪制的平均精度得分。??
下面是一個(gè)真實(shí)數(shù)據(jù)集,我們可以看到RFECV對信用違約二元分類器的影響。
from?sklearn.ensemble?import?RandomForestClassifier from?sklearn.model_selection?import?StratifiedKFolddf?=?load_data('credit')target?=?'default' features?=?[col?for?col?in?data.columns?if?col?!=?target]X?=?data[features] y?=?data[target]cv?=?StratifiedKFold(5) oz?=?RFECV(RandomForestClassifier(),?cv=cv,?scoring='f1_weighted')oz.fit(X,?y) oz.poof()在這個(gè)例子中,我們可以看到選擇了19個(gè)特征,盡管在大約5個(gè)特征之后模型的f1分?jǐn)?shù)似乎沒有太大改善。選擇要消除的特征在確定每個(gè)遞歸的結(jié)果中起著重要作用;修改步驟參數(shù)以在每個(gè)步驟中消除多個(gè)特征可能有助于盡早消除最差特征,增強(qiáng)其余特征(并且還可用于加速具有大量特征的數(shù)據(jù)集的特征消除)。
7、殘差圖 Residuals Plot
在回歸模型的上下文中,殘差是目標(biāo)變量(y)的觀測值與預(yù)測值(?)之間的差異,例如,預(yù)測的錯(cuò)誤。殘差圖顯示垂直軸上的殘差與水平軸上的因變量之間的差異,允許檢測目標(biāo)中可能容易出錯(cuò)或多或少的誤差的區(qū)域。
from?sklearn.linear_model?import?Ridge from?yellowbrick.regressor?import?ResidualsPlot#?創(chuàng)建嶺回歸和殘差圖 ridge?=?Ridge() visualizer?=?ResidualsPlot(ridge)visualizer.fit(X_train,?y_train)?? visualizer.score(X_test,?y_test)?? visualizer.poof()?????????????????8、正則化 Alpha Selection
正則化旨在懲罰模型復(fù)雜性,因此α越高,模型越復(fù)雜,由于方差(過度擬合)而減少誤差。另一方面,太高的Alpha會因偏差(欠調(diào))而增加誤差。因此,重要的是選擇最佳α,以便在兩個(gè)方向上最小化誤差。??
AlphaSelection Visualizer演示了不同的α值如何影響線性模型正則化過程中的模型選擇。一般而言,α增加了正則化的影響,例如,如果alpha為零,則沒有正則化,α越高,正則化參數(shù)對最終模型的影響越大。
import?numpy?as?npfrom?sklearn.linear_model?import?LassoCV from?yellowbrick.regressor?import?AlphaSelection#?創(chuàng)建alpha進(jìn)行交叉驗(yàn)證 alphas?=?np.logspace(-10,?1,?400)#?創(chuàng)建線性模型和可視化 model?=?LassoCV(alphas=alphas) visualizer?=?AlphaSelection(model)visualizer.fit(X,?y) g?=?visualizer.poof()9、分類預(yù)測誤差?Class Prediction Error
分類預(yù)測誤差圖提供了一種快速了解分類器在預(yù)測正確類別方面有多好的方法。
from?sklearn.ensemble?import?RandomForestClassifierfrom?yellowbrick.classifier?import?ClassPredictionError#?創(chuàng)建分類器和可視化 visualizer?=?ClassPredictionError(RandomForestClassifier(),?classes=classes )#?訓(xùn)練visualizer visualizer.fit(X_train,?y_train)#?用測試數(shù)據(jù)驗(yàn)證模型 visualizer.score(X_test,?y_test)#?繪圖 g?=?visualizer.poof()當(dāng)然也同時(shí)有分類評估指標(biāo)的可視化,包括混淆矩陣、AUC/ROC、召回率/精準(zhǔn)率等等。
10、二分類辨別閾值 Discrimination Threshold
關(guān)于二元分類器的辨別閾值的精度,召回,f1分?jǐn)?shù)和queue rate的可視化。辨別閾值是在陰性類別上選擇正類別的概率或分?jǐn)?shù)。通常,將其設(shè)置為50%,但可以調(diào)整閾值以增加或降低對誤報(bào)或其他應(yīng)用因素的敏感度。
from?sklearn.linear_model?import?LogisticRegression from?yellowbrick.classifier?import?DiscriminationThreshold#?創(chuàng)建分類器和可視化 logistic?=?LogisticRegression() visualizer?=?DiscriminationThreshold(logistic)visualizer.fit(X,?y)?? visualizer.poof()?11、聚類肘部法則?Elbow Method
KElbowVisualizer實(shí)現(xiàn)了“肘部”法則,通過使模型具有K的一系列值來幫助數(shù)據(jù)科學(xué)家選擇最佳簇?cái)?shù)。如果折線圖類似于手臂,那么“肘”(拐點(diǎn))就是曲線)是一個(gè)很好的跡象,表明基礎(chǔ)模型最適合那一點(diǎn)。??
在下面的示例中,KElbowVisualizer在具有8個(gè)隨機(jī)點(diǎn)集的樣本二維數(shù)據(jù)集上適合KMeans模型,以獲得4到11的K值范圍。當(dāng)模型適合8個(gè)聚類時(shí),我們可以在圖中看到“肘部”,在這種情況下,我們知道它是最佳數(shù)字。
from?sklearn.datasets?import?make_blobs#?創(chuàng)建8個(gè)隨機(jī)的簇 X,?y?=?make_blobs(centers=8,?n_features=12,?shuffle=True,?random_state=42)from?sklearn.cluster?import?KMeans from?yellowbrick.cluster?import?KElbowVisualizer#?創(chuàng)建Kmeans聚類模型和可視化 model?=?KMeans() visualizer?=?KElbowVisualizer(model,?k=(4,12))visualizer.fit(X)???? visualizer.poof()????12、集群間距離圖?Intercluster?Distance Maps
集群間距離地圖以2維方式顯示集群中心的嵌入,并保留與其他中心的距離。例如。中心越靠近可視化,它們就越接近原始特征空間。根據(jù)評分指標(biāo)調(diào)整集群的大小。默認(rèn)情況下,它們按內(nèi)部數(shù)據(jù)的多少,例如屬于每個(gè)中心的實(shí)例數(shù)。這給出了集群的相對重要性。但請注意,由于兩個(gè)聚類在2D空間中重疊,因此并不意味著它們在原始特征空間中重疊。
from?sklearn.datasets?import?make_blobs#?創(chuàng)建簇?cái)?shù)12的數(shù)據(jù)集 X,?y?=?make_blobs(centers=12,?n_samples=1000,?n_features=16,?shuffle=True)from?sklearn.cluster?import?KMeans from?yellowbrick.cluster?import?InterclusterDistance#?創(chuàng)建Kmeans聚類模型和可視化 visualizer?=?InterclusterDistance(KMeans(9))visualizer.fit(X)? visualizer.poof()?13、模型選擇-學(xué)習(xí)曲線 Learning Curve?
學(xué)習(xí)曲線基于不同數(shù)量的訓(xùn)練樣本,檢驗(yàn)?zāi)P陀?xùn)練分?jǐn)?shù)與交叉驗(yàn)證測試分?jǐn)?shù)的關(guān)系。這種可視化通常用來表達(dá)兩件事:?
1. 模型會不會隨著數(shù)據(jù)量增多而效果變好
2. 模型對偏差和方差哪個(gè)更加敏感
下面是利用yellowbrick生成的學(xué)習(xí)曲線可視化圖。該學(xué)習(xí)曲線對于分類、回歸和聚類都可以適用。
14、模型選擇-驗(yàn)證曲線 Validation?Curve
模型驗(yàn)證用于確定模型對其已經(jīng)過訓(xùn)練的數(shù)據(jù)的有效性以及它對新輸入的泛化程度。為了測量模型的性能,我們首先將數(shù)據(jù)集拆分為訓(xùn)練和測試,將模型擬合到訓(xùn)練數(shù)據(jù)上并在保留的測試數(shù)據(jù)上進(jìn)行評分。?
為了最大化分?jǐn)?shù),必須選擇模型的超參數(shù),以便最好地允許模型在指定的特征空間中操作。大多數(shù)模型都有多個(gè)超參數(shù),選擇這些參數(shù)組合的最佳方法是使用網(wǎng)格搜索。然而,繪制單個(gè)超參數(shù)對訓(xùn)練和測試數(shù)據(jù)的影響有時(shí)是有用的,以確定模型是否對某些超參數(shù)值不適合或過度擬合。
import?numpy?as?npfrom?sklearn.tree?import?DecisionTreeRegressor from?yellowbrick.model_selection?import?ValidationCurve# 導(dǎo)入數(shù)據(jù)集 data?=?load_data('energy')#?選擇特征和目標(biāo)變量 targets?=?["heating?load",?"cooling?load"] features?=?[col?for?col?in?data.columns?if?col?not?in?targets]#?設(shè)置x和y X?=?data[features] y?=?data[targets[0]]viz?=?ValidationCurve(DecisionTreeRegressor(),?param_name="max_depth",param_range=np.arange(1,?11),?cv=10,?scoring="r2" )#?訓(xùn)練和可視化 viz.fit(X,?y) viz.poof()三、總結(jié)
yellowbrick這個(gè)工具太棒了,有木有?東哥認(rèn)為原因有兩點(diǎn):
1、解決了特征工程和建模過程中的可視化問題,極大地簡化了操作;
2、通過各種可視化也可以補(bǔ)充自己對建模的一些盲區(qū)。
本篇僅展示了建模中部分可視化功能,詳細(xì)的完整功能可以下面這個(gè)鏈接:
https://www.scikit-yb.org/en/latest/index.html
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯溫州大學(xué)《機(jī)器學(xué)習(xí)課程》視頻 本站qq群851320808,加入微信群請掃碼:總結(jié)
以上是生活随笔為你收集整理的【机器学习】太强了!这个建模神器可以玩一辈子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术员联盟win11旗舰版64位系统v2
- 下一篇: 【励志】公子龙:我的工作状态和存款进度