機器學習模型有強大而復雜的數學結構。了解其錯綜復雜的工作原理是模型開發的一個重要方面。模型可視化對于獲得見解、做出明智的決策和有效傳達結果至關重要。
在本文中,我們將深入探討機器學習可視化的藝術,探索幫助我們理解復雜數據驅動系統的各種技術。文末,還提供了一個可視化示例的實踐代碼。
什么是機器學習中的可視化?
機器學習可視化(簡稱ML可視化)一般是指通過圖形或交互方式表示機器學習模型、數據及其關系的過程。目標是使理解模型的復雜算法和數據模式更容易,使技術和非技術利益相關者更容易理解它。
可視化彌合了機器學習模型神秘的內部運作與我們通過視覺理解模式之間的差距。
通過可視化 ML 模型主要有如下作用:
模型結構可視化:常見的模型類型,如決策樹、支持向量機或深度神經網絡,通常由許多計算和交互層組成,人類很難掌握這些計算和交互。通過可視化,我們可以更輕松地查看數據如何流經模型以及轉換發生的位置。
可視化性能指標:一旦我們訓練了一個模型,我們就需要評估它的性能。可視化準確性、精確度、召回率和 F1 分數等指標有助于我們了解模型的表現以及需要改進的地方。
比較模型分析:在處理多個模型或算法時,結構或性能差異的可視化使我們能夠為特定任務選擇最佳模型或算法。
特征重要性:了解哪些特征對模型的預測影響最大至關重要。特征重要性圖等可視化技術可以輕松識別驅動模型結果的關鍵因素。
可解釋性:由于其復雜性,ML模型對人類創建者來說通常是“黑匣子”,因此很難解釋他們的決定。可視化可以闡明特定特征如何影響輸出或模型預測的魯棒性。
利于溝通:可視化是一種通用語言,用于簡單直觀地傳達復雜的想法。它們對于與管理層和其他非技術利益相關者有效共享信息至關重要。
模型結構可視化
了解數據如何流經模型對于了解機器學習模型如何將輸入特征轉換為其輸出至關重要。
決策樹可視化
決策樹具有大多數人都熟悉的類似流程圖的結構。每個內部節點都表示基于特定功能值的決策。節點中的每個分支都表示該決策的結果。葉節點表示模型的輸出。
這種結構的可視化提供了決策過程的直接表示,使數據科學家和業務利益相關者能夠理解模型所學習的決策規則。
在訓練過程中,決策樹根據特定標準(通常是基尼雜質或信息增益)識別最能分離分支中樣本的特征。換句話說,它決定了最具辨別性的特征。
可視化決策樹(或它們的集合,如隨機森林或梯度增強樹)涉及其整體結構的圖形渲染,清晰直觀地顯示每個節點的拆分和決策。樹的深度和寬度以及葉子節點一目了然。此外,決策樹可視化有助于識別關鍵特征,這些特征是導致準確預測的最具辨別性的屬性。
準確預測的路徑可以歸納為四個步驟:
功能清晰:決策樹可視化就像剝開復雜性層,以揭示關鍵功能。這類似于查看決策流程圖,其中每個分支表示一個特征,每個決策節點都包含我們數據的關鍵方面。
判別屬性:決策樹可視化的美妙之處在于它能夠突出顯示最具判別性的特征。這些因素會嚴重影響結果,指導模型進行預測。通過可視化樹,我們可以精確定位這些特征,從而了解驅動模型決策的核心因素。
通往精確度的路徑:決策樹上的每條路徑都是通往精確度的旅程??梢暬故玖藢е绿囟A測的決策序列。這是理解我們的模型用來得出特定結論的邏輯和標準的黃金。
復雜中的簡單:盡管機器學習算法很復雜,但決策樹可視化具有簡單性。它將復雜的數學計算轉換為直觀的表示形式,使技術和非技術利益相關者都可以訪問。
機器學習中的決策樹可視化示例:在 Iris 數據集上訓練的決策樹分類器 |來源:作者
上圖顯示了在著名的 Iris 數據集上訓練的決策樹分類器的結構。該數據集由150 個鳶尾花樣本組成,每個樣本屬于以下三個物種之一:setosa、versicolor 或 virginica。每個樣品有四個特征:萼片長度、萼片寬度、花瓣長度和花瓣寬度。
從決策樹可視化中,我們可以了解模型如何對花朵進行分類:
根節點:在根節點處,模型確定花瓣長度是否為 2.45 厘米或更小。如果是這樣,它將花歸類為 setosa。否則,它將移動到下一個內部節點。
基于花瓣長度的第二次分割:如果花瓣長度大于 2.45 厘米,則樹再次使用此功能做出決定。決定標準是花瓣長度是否小于或等于 4.75 厘米。
根據花瓣寬度進行分割:如果花瓣長度小于或等于 4.75 厘米,則模型接下來會考慮花瓣寬度并確定它是否高于 1.65 厘米。如果是這樣,它將花歸類為弗吉尼亞。否則,模型的輸出是多色的。
根據萼片長度進行分割:如果花瓣長度大于 4.75 厘米,則模型在訓練期間確定萼片長度最適合區分花色和維吉尼亞。如果萼片長度大于 6.05 厘米,則將花歸類為弗吉尼亞花。否則,模型的輸出是多色的。
可視化捕獲了這種分層決策過程,并以一種比簡單的決策規則列表更易于理解的方式表示它。
集成模型可視化
隨機森林、AdaBoost、梯度提升和裝袋等集成方法將多個更簡單的模型(稱為基礎模型)合并到一個更大、更準確的模型中。例如,隨機森林分類器包含許多決策樹。在調試和評估集成時,了解組成模型的貢獻和復雜的相互作用至關重要。
可視化集成模型的一種方法是創建一個圖表,顯示基本模型如何為集成模型的輸出做出貢獻。一種常見的方法是繪制基礎模型的決策邊界(也稱為曲面),突出顯示它們對特征空間不同部分的影響。通過研究這些決策邊界如何重疊,我們可以了解基礎模型如何產生集合的集體預測能力。
集成模型可視化示例:各個分類器如何通過調整其決策邊界來適應不同的數據分布。較暗的區域表示更高的置信度,即模型對其預測的置信度更高。較輕的區域表示置信度較低的區域 |源
集成模型可視化還可以幫助用戶更好地理解分配給集成中每個基本模型的權重。通常,基礎模型對特征空間的某些區域有很強的影響,而對其他區域的影響很小。但是,也可能存在從未對集成輸出做出重大貢獻的基本模型。識別權重特別低或特別高的基本模型有助于使集成模型更加穩健并提高其泛化性。
直觀地構建模型
Visual ML 是一種使用低代碼或無代碼平臺設計機器學習模型的方法。它使用戶能夠通過用戶友好的可視化界面創建和修改復雜的機器學習過程、模型和結果。Visual ML 不是追溯生成模型結構可視化,而是將它們置于 ML 工作流的核心。
簡而言之,Visual ML 平臺提供拖放式模型構建工作流程,允許各種背景的用戶輕松創建 ML 模型。它們彌合了算法的抽象世界與我們通過視覺掌握模式和關系的天生能力之間的差距。
這些平臺可以節省我們的時間,并幫助我們快速構建模型原型。由于可以在幾分鐘內創建模型,因此訓練和比較不同的模型配置很容易。然后,可以進一步優化性能最佳的模型,也許可以使用更以代碼為中心的方法。
數據科學家和機器學習工程師可以利用 Visual ML 工具創建:
1實驗原型
2?MLOps 管道
3為生產生成最佳的 ML 代碼
4擴展現有 ML 模型代碼庫以獲得更大的示例
如何在沒有代碼的情況下創建 ML/DL 模型的示例。這種類型的界面是敏捷的,可以詳細了解模型的工作原理 |源
Visual ML 工具的示例包括 TensorFlow 的 Neural Network Playground 和 KNIME,后者是一個完全圍繞 Visual ML 和無代碼概念構建的開源數據科學平臺。
可視化機器學習模型性能
在許多情況下,我們不太關心模型在內部是如何工作的,而是有興趣了解它的性能。對于哪種樣品是可靠的?它經常在哪里得出錯誤的結論?我們應該選擇模型 A 還是模型 B?
在本節中,我們將介紹機器學習可視化效果,這些可視化效果有助于我們更好地了解模型的性能。
?混淆矩陣
混淆矩陣是評估分類模型性能的基本工具?;煜仃噷⒛P偷念A測與基本事實進行比較,清楚地顯示模型錯誤分類了哪種樣本,或者它難以區分類別。
對于二元分類器,混淆矩陣只有四個字段:真陽性、假陽性、假陰性和真陰性:
?
? | ?模型預測:0 | ?模型預測:1 |
?真值:0 | ?真陰性 | ?誤報 |
?真值:1 | ?假陰性 | ?真陽性 |
?
有了這些信息,就可以直接計算精度、召回率、F1 分數和準確性等基本指標。
多類模型的混淆矩陣遵循相同的一般思路。對角線元素表示正確分類的實例(即,模型的輸出與真實值匹配),而非對角線元素表示錯誤分類。
下面是一個小片段,用于為 sci-kit-learn 分類器生成混淆矩陣:
?
?
import matplotlib.pyplot as plt from sklearn.datasets import make_classification from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay from sklearn.model_selection import train_test_split from sklearn.svm import SVC # generate some sample data X, y = make_classification(n_samples=1000, n_features=10, n_informative=6, n_redundant = 2, n_repeated = 2, n_classes = 6, n_clusters_per_class=1, random_state = 42 ) # split the data into train and test set X_train, X_test, y_train, y_test = train_test_split(X, y,random_state=0) # initialize and train a classifier clf = SVC(random_state=0) clf.fit(X_train, y_train) # get the model’s prediction for the test set predictions = clf.predict(X_test) # using the model’s prediction and the true value, # create a confusion matrix cm = confusion_matrix(y_test, predictions, labels=clf.classes_) # use the built-in visualization function to generate a plot disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=clf.classes_) disp.plot() plt.show()
模型性能可視化示例:6×6 混淆矩陣 |來源:作者
?
?
讓我們看一下輸出。如前所述,對角線中的元素表示真實的類,對角線外的元素表示模型混淆類的情況,因此得名“混淆矩陣”。
以下是該圖的三個關鍵要點:
對角線:理想情況下,矩陣的主對角線應填充最高數字。這些數字表示模型正確預測類的實例,與真實類一致。看起來我們的模型在這里做得很好!
非對角線條目:主對角線外的數字同樣重要。它們揭示了模型出錯的情況。例如,如果查看第 5 行與第 3 列相交的單元格,您會看到有 5 種情況,其中真正的類是“5”,但模型預測的類是“3”。也許我們應該看看受影響的樣本,以更好地了解這里發生了什么!
一目了然地分析性能:通過檢查非對角線條目,您可以立即看到它們非常低??偟膩碚f,分類器似乎做得很好。您還會注意到,我們每個類別的樣本數量大致相同。在許多現實世界的場景中,情況并非如此。然后,生成第二個混淆矩陣,顯示正確分類的可能性(而不是樣本的絕對數量)可能會有所幫助。
顏色漸變和百分比注釋等視覺增強功能使混淆矩陣更加直觀且易于解釋。樣式類似于熱圖的混淆矩陣會引起對錯誤率高的類的注意,從而指導進一步的模型開發。
混淆矩陣還可以幫助非技術利益相關者掌握模型的優勢和劣勢,促進討論在使用模型預測進行關鍵決策時是否需要額外的數據或預防措施。
可視化聚類分析
聚類分析根據特定特征對相似的數據點進行分組??梢暬@些聚類可以揭示數據中的模式、趨勢和關系。
散點圖中每個點根據其聚類分配進行著色,是可視化聚類分析結果的標準方法。聚類邊界及其在要素空間中的分布清晰可見。成對圖或平行坐標有助于了解多個要素之間的關系。
可視化聚類分析示例:由 k 均值聚類生成的兩個不同數據聚類。您可以看到,在這兩種情況下,模型找到的聚類(顏色編碼)都與數據中的實際聚類不匹配 |源
一種流行的聚類算法 k-means 從選擇稱為質心的起點開始。一種簡單的方法是從數據集中隨機選取 k 個樣本。
一旦建立了這些初始質心,k-means 將在兩個步驟之間交替:
1它將每個樣本與最近的質心相關聯,從而創建由與同一質心關聯的樣本組成的聚類。
2它通過對聚類中所有樣本的值求平均值來重新校準質心。
隨著此過程的繼續,質心會移動,并且點與聚類的關聯會迭代細化。一旦新舊質心之間的差值低于設定的閾值,則表示穩定,k-means 結束。
結果是一組質心和聚類,您可以在如上圖所示的圖中可視化它們。
對于較大的數據集,可以使用 t-SNE(t 分布的隨機鄰域嵌入)或 UMAP(均勻流形近似和投影)來減少維度,同時保留聚類結構。這些技術有助于有效地可視化高維數據。
t-SNE 獲取復雜的高維數據,并將其轉換為低維表示。該算法首先為每個數據點分配一個低維空間中的位置。然后,它查看原始數據,并考慮其相鄰點,決定每個點在這個新空間中的實際位置。在高維空間中相似的點在新空間中被拉得更近,而那些不同的點被推開。
重復此過程,直到點找到其完美位置。最終結果是一個聚類表示,其中相似的數據點形成組,使我們能夠看到隱藏在高維混沌中的模式和關系。這就像一首交響樂,每個音符都能找到它和諧的位置,創造出一個美麗的數據組合。
t-SNE 算法從低維空間中的高維數據創建聚類 |源
UMAP也試圖在高維空間中尋找星團,但采用了不同的方法。以下是UMAP的工作原理:
鄰居查找:UMAP 首先識別每個數據點的鄰居。它確定在原始高維空間中哪些點彼此靠近。
模糊簡單集構造:想象一下在這些相鄰點之間創建一個連接網絡。UMAP 根據點的相關或相似程度對這些連接的強度進行建模。
低維布局:在確定它們的接近度后,UMAP在低維空間中仔細排列數據點。在這個新空間中,在高維空間中緊密相連的點被緊密地放置在一起。
優化:UMAP旨在找到較低維度的最佳表示形式。它最小化了原始高維空間和新的低維空間中的距離差異。
聚類:UMAP使用聚類算法對相似的數據點進行分組。想象一下,將相似顏色的彈珠聚集在一起——這使我們能夠更清楚地看到圖案和結構。
比較模型分析
比較不同的模型性能指標對于確定哪種機器學習模型最適合任務至關重要。無論是在機器學習項目的實驗階段,還是在重新訓練生產模型時,通常都需要可視化來將復雜的數值結果轉化為可操作的見解。
因此,模型性能指標的可視化,如ROC曲線和校準圖,是每個數據科學家和機器學習工程師都應該在其工具箱中擁有的工具。它們是理解和傳達機器學習模型有效性的基礎。
模型分析示例:使用 ROC 曲線和 ROC-AUC 指標比較三個不同的模型?
?ROC 曲線
在分析機器學習分類器和比較 ML 模型性能時,受試者工作特征曲線(簡稱 ROC 曲線)至關重要。
ROC 曲線將模型的真陽性率與其假陽性率作為截止閾值的函數進行對比。它描述了我們總是必須做出的真陽性和假陽性之間的權衡,并提供了對模型判別力的洞察。
靠近左上角的曲線表示卓越的性能:該模型實現了較高的真陽性率,同時保持了較低的誤報率。比較 ROC 曲線有助于我們選擇最佳模型。
以下是 ROC 曲線工作原理的分步說明:
在二元分類中,我們感興趣的是預測兩種可能的結果之一,通常標記為陽性(例如,存在疾?。┖完幮裕ɡ?,沒有疾?。?/p>
請記住,我們可以通過選擇一個類作為正結果并將所有其他類指定為負結果,將任何分類問題轉換為二元問題。因此,ROC曲線對于多類或多標簽分類問題仍然有幫助。
ROC 曲線的軸代表兩個指標:
真陽性率(靈敏度):模型正確識別的實際陽性病例的比例。
假陽性率:實際陰性病例被錯誤識別為陽性的比例。
機器學習分類器通常輸出樣本屬于正類的可能性。例如,邏輯回歸模型輸出的值介于 0 和 1 之間,這些值可以解釋為似然。
作為數據科學家,我們有責任選擇閾值,高于該閾值,我們分配正面標簽。ROC 曲線向我們展示了該選擇對分類器性能的影響。
如果我們將閾值設置為 0,則所有樣本都將分配給陽性類,誤報率為 1。因此,在任何 ROC 曲線圖的右上角,您將看到曲線在 (1, 1) 處結束。
如果我們將閾值設置為 1,則不會將任何樣本分配給正類。但是,由于在這種情況下,我們永遠不會錯誤地將負樣本分配給正類,因此誤報率將為 0。您可能已經猜到了,這就是我們在 ROC 曲線圖的左下角看到的:曲線總是從 (0, 0) 開始。
通過更改將樣本分類為陽性的閾值來繪制這些點之間的曲線。由此產生的曲線(ROC 曲線)反映了真陽性率和假陽性率如何隨著該閾值的變化而相互變化。
但是我們從中學到了什么?
ROC 曲線顯示了我們必須在靈敏度(真陽性率)和特異性(1 – 假陽性率)之間做出的權衡。用更通俗的術語來說,我們可以找到所有陽性樣本(高靈敏度),或者確保我們的分類器識別為陽性的所有樣本實際上都屬于陽性類別(高特異性)。
考慮一個可以完美區分正樣本和負樣本的分類器:它的真陽性率始終為 1,其假陽性率始終為 0,與我們選擇的閾值無關。它的 ROC 曲線將從 (0,0) 直線向上射到 (0,1),然后類似于 (0,1) 和 (1,1) 之間的直線。
因此,ROC曲線越接近圖的左側邊界,然后是頂部邊界,模型的判別性就越強,就越能滿足敏感性和特異性目標。
為了比較不同的模型,我們通常不直接使用曲線,而是計算曲線下的面積。這量化了模型區分正類和負類的整體能力。
這個所謂的 ROC-AUC(ROC 曲線下的面積)可以取 0 到 1 之間的值,值越高表示性能越好。事實上,我們的完美分類器將達到正好 1 的 ROC-AUC。
使用 ROC-AUC 指標時,必須記住基線不是 0,而是 0.5——完全隨機分類器的 ROC-AUC。如果我們使用 np.random.rand() 作為分類器,則生成的 ROC 曲線將是一條從 (0,0) 到 (1,1) 的對角線。
比較模型分析示例:隨機分類器的 ROC 曲線是對角線的,因此 ROC-AUC 為 0.5。以黃色顯示的實際 ML 分類器的 ROC 曲線始終位于該線上方,ROC-AUC 為 0.78 |源
使用 scikit-learn 生成 ROC 曲線和計算 ROC-AUC 非常簡單。只需在模型訓練腳本中編寫幾行代碼,即可為每個訓練運行創建此評估數據。使用 ML 實驗跟蹤工具記錄 ROC-AUC 和 ROC 曲線圖時,您可以稍后比較不同的模型版本。
實驗記錄
在可視化、比較和調試模型時,有條不紊地記錄所有實驗非常有用。
?
?
計算和記錄 ROC-AUC from sklearn.metrics import roc_auc_score clf.fit(x_train, y_train) y_test_pred = clf.predict_proba(x_test) auc = roc_auc_score(y_test, y_test_pred[:, 1]) # optional: log to an experiment-tracker like neptune.ai neptune_logger.run["roc_auc_score"].append(auc) 創建和記錄 ROC 圖 from scikitplot.metrics import plot_roc import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(16, 12)) plot_roc(y_test, y_test_pred, ax=ax) # optional: log to an experiment tracker like neptune.ai from neptune.types import File neptune_logger.run["roc_curve"].upload(File.as_html(fig))
?
?
?校準曲線
雖然機器學習分類器通常為每個類輸出介于 0 和 1 之間的值,但這些值并不代表統計意義上的可能性或置信度。在許多情況下,這完全沒問題,因為我們只對獲得正確的標簽感興趣。
但是,如果我們想報告置信水平以及分類結果,我們必須確保我們的分類器經過校準。校準曲線是了解分類器校準情況的有用視覺輔助工具。我們還可以使用它們來比較不同的模型或檢查我們重新校準模型的嘗試是否成功。
讓我們再次考慮輸出介于 0 和 1 之間的值的模型的情況。如果我們選擇一個閾值,比如 0.5,我們可以將其轉換為二元分類器,其中模型輸出較高值的所有樣本都分配給正類(反之亦然)。
校準曲線根據模型的輸出繪制“正分數”?!罢謹怠笔墙o定模型輸出的樣本實際屬于正類的條件概率(P(樣本屬于正類|模型的輸出介于 0 和 1 之間))。
這聽起來是不是太抽象了?讓我們看一個例子:
校準曲線示例:比較不同型號 | 來源:作者
首先,看一下對角線。它代表了一個完美校準的分類器:模型的輸出介于 0 和 1 之間,恰好是樣本屬于正類的概率。例如,如果模型輸出 0.5,則樣本屬于正類或負類的幾率為 50:50。如果模型對樣本輸出 0.2,則該樣本屬于正類的可能性只有 20%。
接下來,考慮樸素貝葉斯分類器的校準曲線:您會看到,即使此模型輸出 0,樣本也有大約 10% 的幾率為正。如果模型輸出 0.8,則樣本仍有 50% 的可能性屬于負類。因此,分類器的輸出不能反映其置信度。
計算“正數的分數”遠非易事。我們需要根據模型的輸出創建條柱,由于模型值范圍內的樣本分布通常不是均勻的,因此這很復雜。例如,邏輯回歸分類器通常將接近 0 或 1 的值分配給許多樣本,但很少輸出接近 0.5 的值。您可以在 scikit-learn 文檔中找到有關此主題的更深入討論。在那里,您還可以深入了解重新校準模型的可能方法,這超出了本文的范圍。
就我們的目的而言,我們已經了解了校準曲線如何以易于掌握的方式可視化復雜的模型行為。通過快速瀏覽圖,我們可以看到模型是否經過良好校準以及哪個模型最接近理想。
可視化超參數優化
超參數優化是開發機器學習模型的關鍵步驟。目的是選擇超參數的最佳配置——超參數的通用名稱,不是模型從數據中學習的,而是由其人類創建者預定義的??梢暬梢詭椭鷶祿茖W家了解不同超參數對模型性能和屬性的影響。
找到超參數的最佳配置本身就是一項技能,遠遠超出了我們將在這里重點關注的機器學習可視化方面。要了解有關超參數優化的更多信息,我推薦這篇由前 Amazon AI 研究人員撰寫的關于提高 ML 模型性能的文章。
系統超參數優化的常用方法是創建可能的參數組合列表,并為每個參數組合訓練一個模型。這通常稱為“網格搜索”。
例如,如果您正在訓練支持向量機 (SVM),您可能希望嘗試參數 C(正則化參數)和 gamma(核系數)的不同值:
?
?
import numpy as np C_range = np.logspace(-2, 10, 13) gamma_range = np.logspace(-9, 3, 13) param_grid = {“gamma”: gamma_range, “C”: C_range}
?
?
使用 scikit-learn 的 GridSearchCV,您可以為每個可能的組合(使用交叉驗證策略)訓練模型,并找到與評估指標相關的最佳組合:
?
?
from sklearn.model_selection import GridSearchCV, grid = GridSearchCV(SVC(), param_grid=param_grid, scoring=’accuracy’) grid.fit(X, y)
?
?
網格搜索結束后,可以檢查結果:
?
?
print( "The best parameters are %s with a score of %0.2f" % (grid.best_params_, grid.best_score_) )
?
?
但我們通常不僅對找到最佳模型感興趣,還想了解其參數的影響。例如,如果一個參數不影響模型的性能,我們就不需要浪費時間和金錢來嘗試更多不同的值。另一方面,如果我們看到隨著參數值的增加,模型的性能變得更好,我們可能希望為這個參數嘗試更高的值。
下面是我們剛剛執行的網格搜索的可視化效果:
網格搜索可視化示例:使用不同值的 gamma 和 C 進行 SVM 分類器訓練如何在測試集上執行 |源
從圖中可以看出,伽馬的值對支持向量機的性能影響很大。如果伽瑪設置得太高,則支持向量的影響半徑很小,即使通過 C 進行大量正則化,也可能導致過度擬合。在這種情況下,任何支持向量的影響區域都跨越整個訓練集,使模型類似于線性模型,使用超平面來分隔不同類別的密集區域。
最佳模型位于 C 和 gamma 的對角線上,如第二個繪圖面板所示。通過調整 gamma(較低的值表示更平滑的模型)和增加 C(較高的值表示更強調正確的分類),我們可以遍歷這條對角線以獲得性能良好的模型。
即使從這個簡單的示例中,您也可以看到可視化對于深入了解模型性能差異的根本原因有多么有用。這就是為什么許多機器學習實驗跟蹤工具使數據科學家能夠創建不同類型的可視化來比較模型版本的原因。
特征重要性可視化
特征重要性可視化提供了一種清晰直觀的方式來掌握模型決策過程中每個特征的貢獻。在許多應用中,了解哪些特征會顯著影響預測至關重要。
從機器學習模型中提取有關特征重要性的見解有很多不同的方法。從廣義上講,我們可以將它們分為兩類:
某些類型的模型(如決策樹和隨機森林)本身包含特征重要性信息作為其模型結構的一部分。我們需要做的就是提取和可視化它。
目前使用的大多數機器學習模型都無法提供開箱即用的特征重要性信息。我們必須使用統計技術和算法方法來揭示它們的每個輸入特征對模型最終輸出的重要性。
在下文中,我們將查看每個類別的一個示例:隨機森林模型的雜質平均減少方法和與模型無關的 LIME 可解釋性方法。您可能想要研究的其他方法包括排列重要性、SHAP 和積分梯度。
就本文而言,我們不太關心如何獲取特征重要性數據,而是關心其可視化。為此,條形圖是結構化數據的首選,每個條形的長度表示要素的重要性。熱圖顯然是圖像的最愛,而對于文本數據,突出顯示最重要的單詞或短語是典型的。
在業務環境中,特征重要性可視化是利益相關者溝通的寶貴工具。它提供了一個直截了當的敘述,展示了主要影響預測的因素。這種透明度增強了決策能力,并可以培養對模型結果的信任。
使用雜質平均減少法進行特征重要性可視化示例 |來源:作者
雜質平均減少法進行特征重要性評估
雜質(不純度)的平均減少量是衡量每個特征對決策樹性能的貢獻的指標。要理解這一點,我們首先需要了解“雜質”在這種情況下的含義。
我們先打個比方:
假設我們有一個水果籃,里面有蘋果、梨和橙子。當水果片放在籃子里時,它們被徹底混合,我們可以說這套水果的雜質很高。
現在,我們的任務是按種類對它們進行分類。如果我們把所有的蘋果都放進一個碗里,把橘子放在托盤上,把梨放在籃子里,我們就會剩下三套純度完美的蘋果。
但轉折點來了:我們在做決定時看不到果實。對于每塊水果,我們都會被告知它的顏色、直徑和重量。然后,我們需要決定它應該去哪里。因此,這三個屬性是我們的特點。
水果塊的重量和直徑將非常相似。它們對我們進行分類沒有多大幫助——或者換一種說法,它們對減少雜質沒有幫助。
但是顏色會有所幫助。我們可能仍然難以區分綠色或黃色的蘋果和綠色或黃色的梨,但如果我們得知顏色是紅色或橙色,我們就可以自信地做出決定。因此,“顏色”將給我們帶來最大的雜質平均減少。
現在,讓我們在決策樹和隨機森林的上下文中使用這個類比:
在構建決策樹時,我們希望每個節點在目標變量方面盡可能純粹。用更通俗的術語來說,在為我們的樹創建新節點時,我們的目標是找到最能將到達節點的樣本分成兩個不同集的特征,以便具有相同標簽的樣本位于同一集合中。(有關完整的數學詳細信息,請參閱 scikit-learn 文檔)。
決策樹中的每個節點都減少了雜質——粗略地說,它有助于按目標標簽對訓練樣本進行排序。假設一個特征是樹中許多節點的決策標準,并且它可以有效地干凈地劃分樣本。在這種情況下,它將負責決策樹總體上實現的雜質減少的很大一部分。這就是為什么查看一個特征所負責的“雜質平均減少”是衡量特征重要性的一個很好的指標。
嗚,這真是太復雜了!
幸運的是,可視化并不難閱讀。我們可以清楚地識別模型的主要驅動因素,并在特征選擇中使用這些信息。將模型的輸入空間減少到最關鍵的特征可以降低其復雜性,并可以防止過度擬合。
此外,了解特征重要性有助于數據準備。重要性較低的要素可能是移除或合并的候選要素,從而簡化了輸入數據預處理。
不過,在我們繼續之前,我想提一下一個重要的警告。由于節點的雜質減少是在訓練期間確定的,因此使用訓練數據集,“雜質的平均減少”不一定轉化為以前看不見的測試數據:
假設我們的訓練樣本已編號,此編號是模型的輸入特征。然后,如果我們的決策樹足夠復雜,它可以只知道哪個樣本具有哪個標簽(例如,“水果 1 是橙子”、“水果 2 是蘋果”......數字特征的雜質平均減少將是巨大的,它將在我們的可視化中作為一個非常重要的特征出現,盡管在將我們的模型應用于以前從未見過的數據時,它完全沒有用。
局部可解釋模型無關解釋 (LIME)
局部可解釋性方法旨在闡明模型在特定實例中的行為。(與此相反的是全局可解釋性,即檢查模型在其整個特征空間中的行為。
局部可解釋模型不可知解釋 (LIME) 和產生重要特征的示例 |來源:作者
最古老且仍然廣泛使用的技術之一是 LIME(本地可解釋模型不可知解釋)。為了揭示每個輸入特征對模型預測的貢獻,需要擬合一個線性模型,該模型近似于模型在特征空間特定區域的行為。粗略地說,線性模型的系數反映了輸入要素的重要性。結果可以可視化為特征重要性圖,突出顯示對特定預測最有影響力的特征。
局部可解釋性技術可以從復雜的算法中提取直觀的見解。這些結果的可視化可以支持與業務利益相關者的討論,或者成為與領域專家交叉檢查模型學習行為的基礎。它們提供實用的、可操作的見解,增強對模型復雜內部運作的信任,并且可以成為促進機器學習采用的重要工具。
如何在機器學習中采用模型可視化?
在本節中,我將分享有關將模型可視化無縫集成到日常數據科學和機器學習例程中的技巧。
1. 從明確的目標開始
在深入研究模型可視化之前,請確定一個明確的目的。問問自己,“我打算通過可視化實現哪些具體目標?
您是否正在尋求...
...提高模型性能?
...增強可解釋性?
...更好地將結果傳達給利益相關者?
定義目標將提供有效可視化所需的方向。
2. 選擇合適的可視化效果
始終采用自上而下的方法。這意味著您從非常抽象的級別開始,然后更深入地探索以獲得更多見解。
例如,如果您正在尋求提高模型的性能,請確保首先從簡單的方法開始,例如使用簡單的折線圖繪制模型的精度和損失。
假設您的模型過擬合。然后,您可以使用特征重要性技術根據特征對模型性能的貢獻對特征進行排名。您可以繪制這些特征重要性分數,以可視化模型中最具影響力的特征。重要性較高的特征可能指向過擬合和信息泄露。
同樣,您可以為相關要素創建部分依賴關系圖。PDP 顯示目標變量的預測如何隨著特定特征的變化而變化,同時保持其他特征不變。您必須查找曲線中的不穩定行為或劇烈波動,這可能表明由于該特征而導致的過度擬合。
3. 選擇合適的工具
選擇正確的工具取決于手頭的任務和工具提供的功能。Python 提供了大量庫,如 Matplotlib、Seaborn 和 Plotly,用于創建靜態和交互式可視化。特定于框架的工具(例如用于 TensorFlow 的 TensorBoard 和用于 scikit-learn 的 scikit-plot)對于特定于模型的可視化非常有價值。
4. 迭代和改進
請記住,模型可視化是一個迭代過程。根據團隊和利益相關者的反饋不斷優化可視化效果。最終目標是使您的模型透明、可解釋且可供所有利益相關者訪問。他們的意見和不斷變化的項目要求可能意味著您需要重新考慮和調整您的方法。
將模型可視化整合到您的日常數據科學或機器學習實踐中,使您能夠清晰、自信地做出數據驅動的決策。無論您是數據科學家、領域專家還是決策者,將模型可視化作為常規實踐都是充分利用機器學習項目潛力的關鍵一步。
總結
有效的機器學習模型可視化是任何數據科學家不可或缺的工具。它使從業者能夠獲得洞察力,做出明智的決策,并透明地傳達結果。
在本文中,我們介紹了大量有關如何可視化機器學習模型的信息。總而言之,以下是一些關鍵要點:
機器學習中可視化的目的:
可視化簡化了復雜的 ML 模型結構和數據模式,以便更好地理解。
交互式可視化和 Visual ML 工具使用戶能夠與數據和模型進行動態交互。他們可以調整參數,放大細節,并更好地了解ML系統。
可視化有助于做出明智的決策和有效的結果溝通。
機器學習可視化的類型:
模型結構可視化可幫助數據科學家、AI 研究人員和業務利益相關者了解復雜的算法和數據流。
通過模型性能可視化,可以深入了解單個模型和模型集成的性能特征。
用于比較模型分析的可視化可幫助從業者選擇性能最佳的模型或驗證新模型版本是否是一種改進。
特征重要性可視化揭示了每個輸入特征對模型輸出的影響。
模型可視化的實踐:
從明確的目標和簡單的可視化開始。
選擇適合您需求且目標受眾可以使用的適當可視化方法。
選擇合適的工具和庫,幫助您高效地制作準確的可視化效果。
持續聽取反饋,并根據利益相關者的需求調整可視化效果。
審核編輯:黃飛
?
評論
查看更多