嘗試不同的模型
既然有一種可靠的方法來測量模型精度,那麼可以嘗試使用其他模型,並檢視哪種模型可以提供最佳**。 但是對模型有什麼選擇?
可以在scikit-learn的文件中看到決策樹模型有很多選項(比您長期想要或需要的更多)。 最重要的選項決定了樹的深度。 回想一下這個微課程的第一課,樹的深度是衡量它在進行**之前**的數量。 這是一棵相對較淺的樹
在實踐中,樹在頂層(所有房屋)和葉子之間有10個**並不罕見。 隨著樹木越來越深,資料集被切成了更少房屋的樹葉。 如果樹只有1個分割,則將資料分為2組。 如果每組再次拆分,我們將獲得4組房屋。 再次拆分每個將建立8個組。 如果我們通過在每個級別新增更多分組來保持組的數量翻倍,那麼當我們到達第10級時,我們將擁有210組房屋。 這是1024片葉子。
當我們將房屋分成許多樹葉時,每片樹葉的房屋數量也會減少。 擁有極少數房屋的樹葉將做出與房屋實際值非常接近的**,但它們可能會對新資料做出非常不可靠的**(因為每個**僅基於少數房屋)。
這是一種稱為過度擬合的現象,其中模型幾乎完美地匹配訓練資料,但在驗證和其他新資料方面表現不佳。 另一方面,如果我們使樹很淺,它不會將房屋分成非常不同的組。
在極端情況下,如果一棵樹將房屋分成2或4,每個房屋仍然有各種各樣的房屋。 對於大多數房屋來說,結果**可能相差甚遠,即使在訓練資料中也是如此(由於同樣的原因,驗證也會很糟糕)。 當模型無法捕獲資料中的重要區別和模式時,即使在訓練資料中它也表現不佳,這稱為欠擬合。
由於我們關注新資料的準確性,我們根據驗證資料估計,我們希望找到欠擬合和過度擬合之間的最佳點。 在視覺上,我們想要(紅色)驗證曲線的低點
例子有一些控制樹深度的替代方案,並且許多允許通過樹的一些路線具有比其他路線更大的深度。 但是max_leaf_nodes引數提供了一種非常合理的方法來控制過度擬合與欠擬合。 我們允許模型生成的葉子越多,我們從上圖中的欠擬合區域移動到過度擬合區域。
我們可以使用效用函式來幫助比較max_leaf_nodes的不同值的mae分數:
from sklearn.metrics import mean_absolute_error
from sklearn.tree import decisiontreeregressor
def get_mae(max_leaf_nodes, train_x, val_x, train_y, val_y):
model = decisiontreeregressor(max_leaf_nodes=max_leaf_nodes, random_state=0)
model.fit(train_x, train_y)
preds_val = model.predict(val_x)
mae = mean_absolute_error(val_y, preds_val)
return(mae)
使用您已經看過的**(以及您已經編寫過的**)將資料載入到train_x,val_x,train_y和val_y中。
我們可以使用for迴圈來比較使用max_leaf_nodes的不同值構建的模型的準確性。
for max_leaf_nodes in [5, 50, 500, 5000]:
my_mae = get_mae(max_leaf_nodes, train_x, val_x, train_y, val_y)
print(「max leaf nodes: %d \t\t mean absolute error: %d」 %(max_leaf_nodes, my_mae))
在列出的選項中,500是最佳葉數。
結論這是外賣:模型可能會受到以下任何一種情況:
過度擬合:捕獲將來不會再發生的虛假模式,導致**不太準確,或者
我們使用未在模型訓練中使用的驗證資料來測量候選模型的準確性。 這讓我們可以嘗試許多候選模型並保持最好的模型。
欠擬合和過擬合
解決欠擬合問題,可以從以下三個方面入手 1 增加特徵項 在大多數情況下出現過擬合是因為沒有準確把握資料的主要特徵,可以嘗試在模型中加入更多的和原始資料有重要相關性的特徵來尋連搭建的模型,著牙嗎嗯得到的模型可能會有更好的泛化能力。2 構造複雜的多項式 3 減少正則化引數 解決過擬合問題 1 增大訓練的...
過擬合和欠擬合
乙個假設在訓練資料上,能夠獲得比其他假設更好的擬合,但是在訓練資料外的資料集上卻不能很好的擬合資料,此事認為這個模型出現了過擬合現象 模型過於複雜 原因 原始特徵過多,存在一些嘈雜特徵,模型過於複雜是因為模型嘗試去兼顧各個測試資料點 解決辦法 乙個假設在訓練集上不能獲得更好的擬合,但是在訓練資料集以...
過擬合和欠擬合
開始我是很難弄懂什麼是過擬合,什麼是欠擬合以及造成兩者的各自原因以及相應的解決辦法,學習了一段時間機器學習和深度學習後,分享下自己的觀點,方便初學者能很好很形象地理解上面的問題。無論在機器學習還是深度學習建模當中都可能會遇到兩種最常見結果,一種叫過擬合 over fitting 另外一種叫欠擬合 u...