10.Partial Dependence Plots
本教程是ML系列的一部分。 在此步驟中,您將學(xué)習(xí)如何創(chuàng)建和解釋部分依賴圖,這是從模型中提取洞察力的最有價值的方法之一。
What Are Partial Dependence Plots
?有人抱怨機器學(xué)習(xí)模型是黑盒子。這些人會爭辯說我們無法看到這些模型如何處理任何給定的數(shù)據(jù)集,因此我們既不能提取洞察力也不能確定模型的問題。
總的來說,提出這種說法的人不熟悉部分依賴圖。部分依賴圖顯示每個變量或預(yù)測變量如何影響模型的預(yù)測。這對于以下問題很有用:
如果您熟悉線性或邏輯回歸模型,則可以與這些模型中的系數(shù)類似地對部分依賴圖進行解釋。但是,部分依賴圖可以從數(shù)據(jù)中捕獲更復(fù)雜的模式,并且可以與任何模型一起使用。如果您不熟悉線性或邏輯回歸,請不要接受這種比較。
我們將在下面展示幾個示例,解釋它們的含義,然后討論代碼。
Interpreting Partial Dependence Plots
我們將從2個部分依賴圖開始,顯示Price和來自Melbourne Housing數(shù)據(jù)集的幾個變量之間的關(guān)系(根據(jù)我們的模型)。 我們將介紹如何創(chuàng)建和解釋這些圖。
【1】
import pandas as pd from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier from sklearn.ensemble.partial_dependence import partial_dependence, plot_partial_dependence from sklearn.preprocessing import Imputercols_to_use = ['Distance', 'Landsize', 'BuildingArea']def get_some_data():data = pd.read_csv('../input/melbourne-housing-snapshot/melb_data.csv')y = data.PriceX = data[cols_to_use]my_imputer = Imputer()imputed_X = my_imputer.fit_transform(X)return imputed_X, yX, y = get_some_data() my_model = GradientBoostingRegressor() my_model.fit(X, y) my_plots = plot_partial_dependence(my_model, features=[0,2], X=X, feature_names=cols_to_use, grid_resolution=10)?
左圖顯示了我們的目標,銷售價格和距離變量之間的部分依賴關(guān)系。此數(shù)據(jù)集中的距離測量墨爾本中央商務(wù)區(qū)的距離。
僅在模型擬合后才計算部分依賴圖。該模型適用于實際數(shù)據(jù)。在那些真實的數(shù)據(jù)中,城鎮(zhèn)不同地區(qū)的房屋可能有多種不同的方式(不同的年齡,大小等)。但是在模型擬合之后,我們可以從一個房屋的所有特征開始。比如,一間有2間臥室,2間浴室,10歲的房子等等。
然后我們使用該模型來預(yù)測該房屋的價格,但我們在進行預(yù)測之前更改距離變量。我們首先預(yù)測距離為4時房屋的價格。然后我們預(yù)測設(shè)定距離為5的價格。然后再次預(yù)測距離為6的價格。依此類推。當我們從小的距離值(在水平軸上)移動時,我們會追蹤預(yù)測價格如何變化(在垂直軸上)。
在本說明中,我們只使用了一個房子。但由于相互作用,單個房屋的部分依賴圖可能是非典型的。所以,我們用多個房子重復(fù)那個實驗,然后我們在垂直軸上繪制平均預(yù)測價格。你會看到一些負數(shù)。這并不意味著會以負價出售。相反,它意味著價格將低于該距離的實際平均價格。
在左圖中,我們看到房價下跌,因為我們進一步從中央商務(wù)分散注意力。雖然大約16公里外似乎有一個不錯的郊區(qū),但房價高于許多更近的郊區(qū)。
右圖顯示了建筑面積的影響,其解釋類似。較大的建筑面積意味著更高的價格。
這些圖既可用于提取洞察力,也可用于檢查模型是否正在學(xué)習(xí)您認為合理的內(nèi)容。
Code
我們不關(guān)注加載數(shù)據(jù)的代碼,相反關(guān)注繪圖的代碼:
【2】
def get_some_data():cols_to_use = ['Distance', 'Landsize', 'BuildingArea']data = pd.read_csv('../input/melbourne-housing-snapshot/melb_data.csv')y = data.PriceX = data[cols_to_use]my_imputer = Imputer()imputed_X = my_imputer.fit_transform(X)return imputed_X, y【3】
from sklearn.ensemble.partial_dependence import partial_dependence, plot_partial_dependence# get_some_data is defined in hidden cell above. X, y = get_some_data() # scikit-learn originally implemented partial dependence plots only for Gradient Boosting models # this was due to an implementation detail, and a future release will support all model types. my_model = GradientBoostingRegressor() # fit the model as usual my_model.fit(X, y) # Here we make the plot my_plots = plot_partial_dependence(my_model, features=[0, 2], # column numbers of plots we want to showX=X, # raw predictors data.feature_names=['Distance', 'Landsize', 'BuildingArea'], # labels on graphsgrid_resolution=10) # number of values to plot on x axis一些與plot_partial_dependence有關(guān)的提示:
Another Examples
以下是泰坦尼克號數(shù)據(jù)中非常簡單的模型的部分圖。
[4]
titanic_data = pd.read_csv('../input/titanic/train.csv') titanic_y = titanic_data.Survived clf = GradientBoostingClassifier() titanic_X_colns = ['PassengerId','Age', 'Fare',] titanic_X = titanic_data[titanic_X_colns] my_imputer = Imputer() imputed_titanic_X = my_imputer.fit_transform(titanic_X)clf.fit(imputed_titanic_X, titanic_y) titanic_plots = plot_partial_dependence(clf, features=[1,2], X=imputed_titanic_X, feature_names=titanic_X_colns, grid_resolution=8)?
?
乍一看,這些看起來可能令人驚訝。 但他們展示了一些有趣的見解:
Conclusion
部分依賴圖是從復(fù)雜模型中提取洞察力的好方法(盡管不是唯一的方法)。這些可以非常強大,可以將這些見解傳達給同事或非技術(shù)用戶。
當這些圖來自非實驗數(shù)據(jù)時,對于如何解釋這些圖有各種各樣的觀點。有些人聲稱,除非來自實驗,否則你不能對數(shù)據(jù)的因果關(guān)系做任何結(jié)論。其他人對從非實驗數(shù)據(jù)(也稱為觀察數(shù)據(jù))可以學(xué)到的東西更加積極。這是數(shù)據(jù)科學(xué)領(lǐng)域的一個分歧主題,超出了本教程的范圍。
但大多數(shù)人都同意這些對于理解您的模型很有用。此外,鑒于大多數(shù)真實世界數(shù)據(jù)源的混亂,您的模型捕獲真實模式也是一個很好的理智檢查。
partial_dependence_plot函數(shù)是獲取這些圖的簡單方法,盡管結(jié)果在視覺上并不美觀。 partial_dependence函數(shù)為您提供原始數(shù)據(jù),以防您想要制作演示質(zhì)量圖表。
Your?Turn
在項目中選擇三個預(yù)測變量。 制定關(guān)于部分依賴圖將是什么樣的。 創(chuàng)建繪圖,并根據(jù)您的假設(shè)檢查結(jié)果。
總結(jié)
以上是生活随笔為你收集整理的10.Partial Dependence Plots的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米12S塞下索尼IMX707后网友担心
- 下一篇: 曝《猎天使魔女3》10月28日发售 贝姐