4.Model Validation
你已經建立了一個模型。 但它有多好?
在本課程中,您將學習如何使用模型驗證來衡量模型的質量。 測量模型質量是迭代改進模型的關鍵。
What is Model Validation
你幾乎要評估你構建的每個模型。在大多數(盡管不是全部)應用中,模型質量的相關測量是預測準確性。換句話說,模型的預測是否接近實際發生的情況。
在測量預測準確性時,許多人犯了一個大錯誤。他們使用他們的訓練數據進行預測,并將這些預測與訓練數據中的目標值進行比較。你會看到這種方法的問題以及如何在一瞬間解決它,但讓我們考慮一下我們如何首先做到這一點。
您首先需要將模型質量概括為可理解的方式。如果您比較10,000個房屋的預測價值和實際價值,您可能會發現好的和壞的預測混合在一起。查看10,000個預測值和實際值的列表將毫無意義。我們需要將其總結為一個指標。
有許多用于總結模型質量的指標,但我們將從一個稱為平均絕對誤差(也稱為MAE)開始。讓我們從最后一個單詞開始分解這個指標,error。
每個房子的預測錯誤是:
所以,如果房子花費150,000美元并且你預測它將花費100,000美元,那么誤差就是50,000美元。
使用MAE指標,我們獲取每個誤差的絕對值。 這會將每個誤差轉換為正數。 然后我們取這些絕對誤差的平均值。 這是我們對模型質量的衡量。 用簡單的英語,可以說是
???? 平均而言,我們的預測大約是X.
要計算MAE,我們首先需要一個模型。 下面是一個模型。
【1】
# Data Loading Code Hidden Here import pandas as pd# Load data melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv' melbourne_data = pd.read_csv(melbourne_file_path) # Filter rows with missing price values filtered_melbourne_data = melbourne_data.dropna(axis=0) # Choose target and features y = filtered_melbourne_data.Price melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 'YearBuilt', 'Lattitude', 'Longtitude'] X = filtered_melbourne_data[melbourne_features]from sklearn.tree import DecisionTreeRegressor # Define model melbourne_model = DecisionTreeRegressor() # Fit model melbourne_model.fit(X, y) DecisionTreeRegressor(criterion='mse', max_depth=None, max_features=None,max_leaf_nodes=None, min_impurity_decrease=0.0,min_impurity_split=None, min_samples_leaf=1,min_samples_split=2, min_weight_fraction_leaf=0.0,presort=False, random_state=None, splitter='best')一旦我們有了模型,這就是我們計算平均絕對誤差的方法:
【2】
from sklearn.metrics import mean_absolute_errorpredicted_home_prices = melbourne_model.predict(X) mean_absolute_error(y, predicted_home_prices)434.71594577146544The Problem with "In-Sample" Scores
我們剛剛計算的度量可以稱為“樣本內”得分。我們使用單個房屋“樣本”來構建模型并對其進行評估。這就是為什么這很糟糕。
想象一下,在大型房地產市場,門顏色與房價無關。
但是,在用于構建模型的數據樣本中,所有帶綠色門的房屋都非常昂貴。該模型的工作是找到預測房價的模式,因此它將看到這種模式,它將始終預測綠色房屋的價格高。
由于該模式源自訓練數據,因此模型在訓練數據中看起來是準確的。
但是,如果在模型看到新數據時這種模式不成立,那么在實際使用時該模型將非常不準確。
由于模型的實用價值來自對新數據的預測,因此我們測量未用于構建模型的數據的性能。最直接的方法是從模型構建過程中排除一些數據,然后使用它們來測試模型對以前沒有見過的數據的準確性。該數據稱為驗證數據。
Coding it
scikit-learn庫有一個函數train_test_split,可以將數據分成兩部分。 我們將使用一些數據作為訓練數據來擬合模型,我們將使用其他數據作為驗證數據來計算mean_absolute_error。
這是代碼:
[3]
from sklearn.model_selection import train_test_split# split data into training and validation data, for both features and target # The split is based on a random number generator. Supplying a numeric value to # the random_state argument guarantees we get the same split every time we # run this script. train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 0) # Define model melbourne_model = DecisionTreeRegressor() # Fit model melbourne_model.fit(train_X, train_y)# get predicted prices on validation data val_predictions = melbourne_model.predict(val_X) print(mean_absolute_error(val_y, val_predictions)) 255481.2698515171Wow!
您的樣本數據的平均絕對誤差約為500美元。 但樣本之外超過25萬美元。
這是幾乎完全正確的模型與大多數實際用途無法使用的模型之間的差異。 作為參考,驗證數據中的平均房屋價格為110萬美元。 因此,新數據中的誤差大約是平均房屋價值的四分之一。
有許多方法可以改進此模型,例如嘗試查找更好的特征或不同的模型類型。
Your Turn
在我們改善模型之前,嘗試進行模型驗證。
總結
以上是生活随笔為你收集整理的4.Model Validation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装VMware tools
- 下一篇: PQV2ISECURITY.EXE -