[機器學習] Yellowbrick使用筆記1-快速入門
Yellowbrick是一個機器學習可視化庫,主要依賴于sklearn機器學習庫,能夠提供多種機器學習算法的可視化,主要包括特征可視化,分類可視化,回歸可視化,回歸可視化,聚類可視化,模型選擇可視化,目標可視化,文字可視化。本節主要介紹Yellowbrick如何快速使用。
代碼下載
1 使用說明
1.1 背景介紹
Yellowbrick有兩個主要依賴項:scikit-learn和matplotlib。如果您沒有這些Python軟件包,它們將與Yellowbrick一起安裝。請注意,Yellowbrick在scikit-learn 0.20或更高版本和matplotlib 3.0.1或更高版本中效果最佳。這兩個軟件包都需要編譯一些C代碼,這在某些系統(例如Windows)上可能很難。如果遇到問題,請嘗試使用包含這些程序包的Python發行版(如Anaconda)。
Yellowbrick也通常在Jupyter Notebook與Pandas一起使用。筆Notebook使協調代碼和可視化變得特別容易。但是,您也可以在常規Python腳本中使用Yellowbrick,將圖形保存到磁盤或在GUI窗口中顯示圖形。如果您對此有疑問,請查閱matplotlib的后端文檔。
Yellowbrick是Pytho 3軟件包,可與3.4或更高版本一起使用。最簡單的安裝Yellowbrick的方法是從PyPI使用Python首選的軟件包安裝程序pip。如下所示:
# pip install -U yellowbrick
1.2 Yellowbrick簡單說明
本部分介紹Yellowbrick基本說明,可以跳過。
Yellowbrick API是專門為與scikit-learn配合使用而專門設計的。因此,主要界面是Visualizer–一個從數據中學習以產生可視化效果的對象。可視化工具是scikit-learn的Estimator對象,具有類似的界面以及繪圖方法。為了使用可視化工具,您只需使用與scikit-learn模型相同的工作流程,導入可視化工具,實例化它,調用可視化工具的fit()方法,然后為了渲染可視化效果,調用可視化工具的show()方法。
例如,有幾個可視化工具充當轉換器,用于在擬合模型之前執行特征分析。以下示例顯示具有平行坐標的高維數據集:
from yellowbrick.features import ParallelCoordinates
visualizer = ParallelCoordinates()
visualizer.fit_transform(X, y)
visualizer.show()
如您所見,工作流程與使用scikit-learn轉換器非常相似,并且可視化工具旨在與scikit-learn實用程序集成在一起。可以在實例化時將更改繪制可視化方式的參數傳遞給可視化器,這與scikit-learn模型如何包含超參數類似。
該show()方法最終確定圖形(添加標題,軸標簽等),然后代表您渲染圖像。如果您在Jupyter筆記本中,則圖像應僅出現在筆記本輸出中。如果您使用的是Python腳本,則應打開GUI窗口,并以交互形式顯示可視化內容。但是,您還可以通過傳遞文件路徑來將映像保存到磁盤,如下所示:
visualizer.show(outpath="pcoords.png")
文件名的擴展名將決定圖像的呈現方式。除.png擴展名外,.pdf還通常用于準備高質量出版物的圖像。
另外輸入到Yellowbrick的數據與scikit-learn的數據相同。通常使用變量X(有時簡稱為數據)和可選變量y(通常稱為目標)來描述數據集。所需數據X是一個表,其中包含由功能部件描述的實例(或樣本)。X因此是一個二維矩陣,其形狀為,其中是實例數(行)和要素數(列)的數量。可以是Pandas DataFrame,NumPy數組,甚至是Python列表。
可選目標數據,y用于指定監督機器學習中的標簽。y是一個向量(一維數組),向量的長度n與X中的行數相同。y可以是Pandas series,Numpy數組或Python列表。
可視化工具還可以包裝scikit學習模型以進行評估,超參數調整和算法選擇。例如,要生成分類報告的可視化熱圖,以顯示分類器中的每個分類的精度,召回率,F1得分和支持,請將估計器包裝在可視化器中,如下所示:
from yellowbrick.classifier import ClassificationReport
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
visualizer = ClassificationReport(model)
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.show()
添加分類器模型的視覺評估,添加ClassificationReport包裝分類估計器的可視化器實例化以及對其show()方法的調用,只需兩行代碼即可。這樣,可視化工具可以在不中斷機器學習的情況下增強其工作效率。
基于類的API旨在直接與scikit-learn集成,但是有時有時您只需要快速可視化即可。Yellowbrick支持快速功能以直接利用此功能。例如,兩個視覺診斷原本可以按以下方式實現:
from sklearn.linear_model import LogisticRegression
from yellowbrick.features import parallel_coordinates
from yellowbrick.classifier import classification_report
# Displays parallel coordinates
g = parallel_coordinates(X, y)
# Displays classification report
g = classification_report(LogisticRegression(), X,
1.3 演練
讓我們考慮將回歸分析作為在機器學習工作流程中使用可視化工具的簡單示例。使用基于共享到UCI機器學習存儲庫的自行車共享數據集,我們希望根據季節,天氣或假期等功能,預測給定小時內租用的自行車數量。
pandas模塊已經包含這個數據,我們可以使用yellowbrick.datasets模塊更快加載數據,并且打印前幾行數據。
import pandas as pd
from yellowbrick.datasets import load_bikeshare
X, y = load_bikeshare()
print(X.head())
season year month hour holiday weekday workingday weather temp \
0 1 0 1 0 0 6 0 1 0.24
1 1 0 1 1 0 6 0 1 0.22
2 1 0 1 2 0 6 0 1 0.22
3 1 0 1 3 0 6 0 1 0.24
4 1 0 1 4 0 6 0 1 0.24
feelslike humidity windspeed
0 0.2879 0.81 0.0
1 0.2727 0.80 0.0
2 0.2727 0.80 0.0
3 0.2879 0.75 0.0
4 0.2879 0.75 0.0
機器學習工作流程是創建模型選擇三元素的藝術,模型選擇三元素是特征、算法和超參數的組合,這些特征、算法和超參數唯一地標識了適合于特定數據集的模型。作為特征選擇的一部分,我們希望識別彼此具有線性關系的特征,可能會在我們的模型中引入協方差并破壞OLS(指導我們移除特征或使用正則化)。我們可以使用Rank Features visualizer計算所有特征對之間的Pearson相關性,如下所示:
from yellowbrick.features import Rank2D
# 創建特征相關性排名的2D圖像
visualizer = Rank2D(algorithm="pearson")
# 轉換數據
visualizer.fit_transform(X)
visualizer.show()
<matplotlib.axes._subplots.AxesSubplot at 0x7f5ecf09b090>
以上結果向我們顯示了特征對之間的皮爾遜相關性,這樣網格中的每個像元都代表了兩個特征,這些特征在x和y軸上按順序標識,并且顏色顯示了相關性的大小。皮爾遜相關系數為1.0表示變量對之間存在強的正線性關系,值-1.0表示強的負線性關系(零值表示無關系)。因此,我們正在尋找深紅色和深藍色框以進一步識別。
在此圖表中,我們看到這些特征temp與feelslike具有很強的相關性,并且season與month具有很強的相關性。這似乎是有道理的。我們在外面感覺到的表觀溫度取決于實際溫度和其他空氣質量因素,而一年中的季節用月份來表示!要深入研究,我們可以使用 直接數據可視化(JointPlotVisualizer)檢查這些關系。
from yellowbrick.features import JointPlotVisualizer
visualizer = JointPlotVisualizer(columns=['temp', 'feelslike'])
visualizer.fit_transform(X, y)
visualizer.show()
<matplotlib.axes._subplots.AxesSubplot at 0x7f5ecf008210>
該可視化工具繪制了y軸上的表觀溫度feellike和x軸上的實際測量溫度的散點圖,并使用簡單的線性回歸繪制了一條最佳擬合線。此外,單變量分布在x軸上方顯示為直方圖,y軸上顯示為feellike。
JointPlotVisualizer可以讓您一目了然地看到特性之間非常強的正相關關系,以及每個特性的范圍和分布。請注意,軸標注化為0和1之間的空間,這是機器學習中的一種常用技術,用于減少一個特征對另一個特征的影響。
該圖非常有趣,因為數據集中似乎存在一些離群值。這些實例可能需要手動刪除,以提高最終模型的質量,因為它們可能表示數據輸入錯誤,并有可能在偏斜的數據集上訓練模型,這將返回不可靠的模型預測。離群值的第一個實例出現在臨時數據中,其feelslike 值大約等于0.25-顯示了一條水平的數據線,可能是由輸入錯誤造成的。
我們還可以看到,越極端的溫度對感知溫度產生了夸張的影響;溫度越低,人們就越可能相信它是冷的,溫度越高,人們就會感覺到溫度越高,一般來說,溫和的溫度對個人對舒適感的感知影響不大。這給我們提供了一個線索,feellike可能是一個比temp更好的特性,它保證了一個更穩定的數據集,并且運行到異常值或錯誤的風險更小。
我們可以通過對任一值進行模型訓練并對結果進行評分,最終確定假設。如果該temp 值確實不太可靠,則應刪除該temp 變量,改為使用feelslike。同時,feelslike 由于沒有異常值和輸入錯誤,我們將使用該值。至此,我們可以訓練模型了。讓我們對模型擬合線性回歸并繪制殘差。
from yellowbrick.regressor import ResidualsPlot
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# Create training and test sets
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.1
)
visualizer = ResidualsPlot(LinearRegression())
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.show()
<matplotlib.axes._subplots.AxesSubplot at 0x7f5ecdf19b90>
殘差圖顯示了預測值(乘客數量)的誤差,并允許我們在模型中尋找異方差;例如,目標區域中誤差最大的區域。殘差的形狀可以強烈地告訴我們OLS(普通最小二乘法)受模型組成部分(特征)影響最大的地方。在這種情況下,我們可以看到較低的預測乘客數導致較低的模型誤差,反之,較高的預測乘客數導致更高的模型誤差。這表明我們的模型在目標的某些區域有更多的噪聲,或者兩個變量是共線的,這意味著它們隨著關系中噪聲的變化而注入誤差。
殘差圖還顯示了模型是如何注入誤差的,殘差=0處的粗體水平線是沒有誤差的,該線上方或下方的任何一點都表示誤差的大小。例如,大部分殘差都是負數,而且由于分數是按實際期望值計算的,這意味著大多數時候期望值都大于實際值;例如,我們的模型主要是猜測的乘客人數多于實際人數。此外,在殘差圖的右上角有一個非常有趣的邊界,這表明模型空間中有一個有趣的效果;可能某些特征在該模型的區域中被強加權。
最后利用訓練集和測試集對殘差進行著色。這有助于我們識別創建訓練集和測試拆分時的錯誤。如果測試誤差與訓練誤差不符,那么我們的模型要么過擬合要么欠擬合。否則,在創建拆分之前對數據集進行無序處理可能是一個錯誤。
在生成殘差圖的同時,我們還通過對測試數據(例如代碼片段)對模型進行“評分”來衡量性能的可視化工具visualizer.score(X_test, y_test)。因為我們使用的是線性回歸模型,評分包括找到數據的R平方值,這是一種統計指標,用來衡量數據與擬合回歸線的接近程度。任何模型的R平方值在預測/測試運行之間可能略有不同,但通常應具有可比性。在我們的例子中,這個模型的R平方值只有0.328,這意味著線性相關性可能不是最適合用來擬合這些數據的。讓我們看看是否可以使用正則化來擬合一個更好的模型,同時探索另一個可視化工具。
在探索模型族時,首先要考慮的是模型如何變得更加復雜。隨著模型復雜度的增加,由于模型變得越來越過擬合并且無法泛化為看不見的數據,因此由于方差引起的誤差也隨之增加。但是,模型越簡單,偏差可能導致的誤差就越大。該模型是欠擬合的,因此更容易錯過目標。因此,大多數機器學習的目標是創建一個足夠復雜的模型,找到偏差和方差之間的中間點。
對于線性模型,復雜性來自特征本身以及根據模型分配的權重。因此,線性模型期望獲得解釋性結果的特征最少。實現此目的的一種技術是正則化,即引入稱為alpha的參數,該參數可相互標準化系數的權重并降低復雜度。Alpha與復雜度成反比關系,Alpha越高,模型的復雜度越低,反之亦然。
因此,問題就變成了如何選擇Alpha。一種技術是使用交叉驗證并選擇具有最低誤差的alpha來擬合許多模型。該AlphaSelection可視化工具可以讓你做到這一點,有一個可視化表示,顯示了正規化的行為。如上圖所示,隨著alpha值的增加,誤差減小,直到我們選擇的值(在本例中為3.181)開始增加。這使我們能夠針對偏差/方差折衷,并探索正則化方法之間的關系(例如Ridge與Lasso)
import numpy as np
from sklearn.linear_model import RidgeCV
from yellowbrick.regressor import AlphaSelection
alphas = np.logspace(-10, 1, 200)
visualizer = AlphaSelection(RidgeCV(alphas=alphas))
visualizer.fit(X, y)
visualizer.show()
<matplotlib.axes._subplots.AxesSubplot at 0x7f5ecdb951d0>
現在,我們可以訓練最終模型并使用可視化工具對其進行PredictionError可視化:
from sklearn.linear_model import Ridge
from yellowbrick.regressor import PredictionError
visualizer = PredictionError(Ridge(alpha=3.181))
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.show()
<matplotlib.axes._subplots.AxesSubplot at 0x7f5ecda3c210>
預測誤差可視化工具將實際值(測量值)與預期值(預測值)相互比較。黑色淺色虛線是表示訓練集和測試集零誤差的45度線。和殘差圖一樣,這讓我們可以看到誤差發生的地方和程度。黑色深色虛線,表示實際的誤差曲線。可以看到該模型效果不好。因此還需要進一步選擇模型。但是簡單的Yellowbrick使用就是這些。
2 yellowbrick數據集
Yellowbrick托管了一些UCI機器學習存儲庫中的數據集,以展示本文檔中使用的示例。這些數據集托管在我們的CDN中,必須下載后才能使用。通常,當用戶調用數據加載器功能之一時,例如load_bikeshare(),如果尚未在用戶計算機上下載數據,則會自動下載該數據。但是,對于開發和測試,或者如果您知道您將在沒有Internet訪問的情況下工作,那么一次下載所有數據可能會更容易。
下載示例數據集后,可以按以下方式加載和使用它們:
from yellowbrick.datasets import load_bikeshare
X, y = load_bikeshare() # returns features and targets for the bikeshare dataset
每個數據集都有一個README.md有關數據源,屬性和目標以及其他元數據的詳細信息。要訪問元數據或更精確地控制您的數據訪問,可以直接從加載器返回數據集,如下所示:
dataset = load_bikeshare(return_dataset=True)
print(dataset.README)
df = dataset.to_dataframe()
df.head()
這是Yellowbrick中所有數據集的完整列表,以及與它們最相關的分析任務:
- Bikeshare:適合回歸
- Concrete:適合回歸
- Credit:適用于分類/聚類
- Energy:適合回歸
- Game:適合多類別分類
- Hobbies:適合文本分析/分類
- Mushroom:適合分類/聚類
- Occupancy:適合分類
- Spam:適用于二進制分類
- Walking:適合時間序列分析/聚類
- NFL:適合聚類
3 參考
智能推薦
機器學習入門學習筆記
注:這篇學習筆記不具原創版權。 文章目錄 一、前置技能 1. 前置硬核技能 2. 前置硬傷技能 二、Recollection 主成分分析(PCA) 1. 作用 2. 協方差矩陣 3. PCA 的基本思想 4. PCA 算法大致流程 奇異值分解(SVD) 1. 特征向量與特征值 2. SVD 的定義 3. 求法 4. 性質 三、機器學習概念 四、開始入門 1. 一個庫 2. 第二個庫 訓練數據的一般...
機器學習-學習筆記1
一、機器學習導論 1.機器學習: 通過經驗提高系統自身的性能的過程(系統自我改進) 2.達特茅斯會議標志著人工智能這一學科的誕生 3.機器學習的三要素: 模型、 策略、 算法 4.機器學習的開發流程: 數據收集 數據預處理 特征提取 模型構建 模型測試評估 投入使用(模型部署與整合) 迭代優化 5.機器學習的種類: 監督學習 無監督學習 強化學習 6.監督學習算法: KNN、邏輯回歸、樸素貝葉斯、...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
猜你喜歡
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...