詳解Python視覺化神器Yellowbrick使用
機器學習中非常重要的一環就是資料的視覺化分析,從源資料的視覺化到結果資料的視覺化都離不開視覺化工具的使用,sklearn+matplotlib的組合在日常的工作中已經滿足了絕對大多數的需求,今天主要介紹的是一個基於sklearn和matplotlib模組進行擴充套件的視覺化工具Yellowbrick。
Yellowbrick的官方文件在這裡。Yellowbrick是由一套被稱為"Visualizers"組成的視覺化診斷工具組成的套餐,其由Scikit-Learn API延伸而來,對模型選擇過程其指導作用。總之,Yellowbrick結合了Scikit-Learn和Matplotlib並且最好得傳承了Scikit-Learn文件,對 你的 模型進行視覺化!
Yellowbrick主要包含的元件如下:
Visualizers Visualizers也是estimators(從資料中習得的物件),其主要任務是產生可對模型選擇過程有更深入瞭解的檢視。從Scikit-Learn來看,當可視化資料空間或者封裝一個模型estimator時,其和轉換器(transformers)相似,就像"ModelCV" (比如 RidgeCV,LassoCV )的工作原理一樣。Yellowbrick的主要目標是建立一個和Scikit-Learn類似的有意義的API。其中最受歡迎的visualizers包括: 特徵視覺化 Rank Features: 對單個或者兩兩對應的特徵進行排序以檢測其相關性 Parallel Coordinates: 對例項進行水平檢視 Radial Visualization: 在一個圓形檢視中將例項分隔開 PCA Projection: 通過主成分將例項投射 Feature Importances: 基於它們在模型中的表現對特徵進行排序 Scatter and Joint Plots: 用選擇的特徵對其進行視覺化 分類視覺化 Class Balance: 看類的分佈怎樣影響模型 Classification Report: 用檢視的方式呈現精確率,召回率和F1值 ROC/AUC Curves: 特徵曲線和ROC曲線子下的面積 Confusion Matrices: 對分類決定進行檢視描述 迴歸視覺化 Prediction Error Plot: 沿著目標區域對模型進行細分 Residuals Plot: 顯示訓練資料和測試資料中殘差的差異 Alpha Selection: 顯示不同alpha值選擇對正則化的影響 聚類視覺化 K-Elbow Plot: 用肘部法則或者其他指標選擇k值 Silhouette Plot: 通過對輪廓係數值進行檢視來選擇k值 文字視覺化 Term Frequency: 對詞項在語料庫中的分佈頻率進行視覺化 t-SNE Corpus Visualization: 用隨機鄰域嵌入來投射文件
這裡以癌症資料集為例繪製ROC曲線,如下:
def testFunc1(savepath='Results/breast_cancer_ROCAUC.png'): ''' 基於癌症資料集的測試 ''' data=load_breast_cancer() X,y=data['data'],data['target'] X_train,X_test,y_train,y_test = train_test_split(X,y) viz=ROCAUC(LogisticRegression()) viz.fit(X_train,y_train) viz.score(X_test,y_test) viz.poof(outpath=savepath)
結果如下:
結果看起來也是挺美觀的。
之後用平行座標的方法對高維資料進行作圖,資料集同上:
def testFunc2(savepath='Results/breast_cancer_ParallelCoordinates.png'): ''' 用平行座標的方法對高維資料進行作圖 ''' data=load_breast_cancer() X,data['target'] print 'X_shape: ',X.shape #X_shape: (569L,30L) visualizer=ParallelCoordinates() visualizer.fit_transform(X,y) visualizer.poof(outpath=savepath)
結果如下:
這個最初沒有看明白什麼意思,其實就是高維特徵資料的視覺化分析,這個功能還可以對原始資料進行取樣,之後再繪圖。
基於癌症資料集,使用邏輯迴歸模型來分類,繪製分類報告
def testFunc3(savepath='Results/breast_cancer_LR_report.png'): ''' 基於癌症資料集,使用邏輯迴歸模型來分類,繪製分類報告 ''' data=load_breast_cancer() X,data['target'] model=LogisticRegression() visualizer=ClassificationReport(model) X_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42) visualizer.fit(X_train,y_train) visualizer.score(X_test,y_test) visualizer.poof(outpath=savepath)
結果如下:
這樣的結果展現方式還是比較美觀的,在使用的時候發現了這個模組的一個不足的地方,就是:如果連續繪製兩幅圖片的話,第一幅圖片就會累加到第二幅圖片中去,多幅圖片繪製亦是如此,在matplotlib中可以使用plt.clf()方法來清除上一幅圖片,這裡沒有找到對應的API,希望有找到的朋友告知一下。
接下來基於共享單車資料集進行租借預測,具體如下:
首先基於特徵對相似度分析方法來分析共享單車資料集中兩兩特徵之間的相似度
def testFunc5(savepath='Results/bikeshare_Rank2D.png'): ''' 共享單車資料集預測 ''' data=pd.read_csv('bikeshare/bikeshare.csv') X=data[["season","month","hour","holiday","weekday","workingday","weather","temp","feelslike","humidity","windspeed" ]] y=data["riders"] visualizer=Rank2D(algorithm="pearson") visualizer.fit_transform(X) visualizer.poof(outpath=savepath)
基於線性迴歸模型實現預測分析
def testFunc7(savepath='Results/bikeshare_LinearRegression_ResidualsPlot.png'): ''' 基於共享單車資料使用線性迴歸模型預測 ''' data = pd.read_csv('bikeshare/bikeshare.csv') X=data[["season","windspeed"]] y=data["riders"] X_train,test_size=0.3) visualizer=ResidualsPlot(LinearRegression()) visualizer.fit(X_train,y_test) visualizer.poof(outpath=savepath)
結果如下:
基於共享單車資料使用AlphaSelection
def testFunc8(savepath='Results/bikeshare_RidgeCV_AlphaSelection.png'): ''' 基於共享單車資料使用AlphaSelection ''' data=pd.read_csv('bikeshare/bikeshare.csv') X=data[["season","windspeed"]] y=data["riders"] alphas=np.logspace(-10,1,200) visualizer=AlphaSelection(RidgeCV(alphas=alphas)) visualizer.fit(X,y) visualizer.poof(outpath=savepath)
結果如下:
基於共享單車資料繪製預測錯誤圖
def testFunc9(savepath='Results/bikeshare_Ridge_PredictionError.png'): ''' 基於共享單車資料繪製預測錯誤圖 ''' data=pd.read_csv('bikeshare/bikeshare.csv') X=data[["season",test_size=0.3) visualizer=PredictionError(Ridge(alpha=3.181)) visualizer.fit(X_train,y_test) visualizer.poof(outpath=savepath) blog.csdn.net/Together_CZ/article/details/86640784
結果如下:
今天先記錄到這裡,之後有時間繼續更新學習!
總結
以上所述是小編給大家介紹的Python視覺化神器Yellowbrick使用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!