iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
AI & Data

使用python學習Machine Learning系列 第 5

Day 5 [Python ML] 欠擬合(Underfitting)和過擬合(Overfitting)

實驗不同的模型

若是是太多分支,會造成leaf太多,而每一個leaf都只是用其中一筆資料建立出來的,因此對model來說,會過度擬和(overfitting)

因此在驗證(validation)的時候,需要測試較多的情況,並且用不同的參數來驗證

得到最好的值之後,再利用這個參數,對所有資料建模

# 讀取資料
import pandas as pd
    
melbourne_file_path = './Dataset/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
# 處理缺失值
filtered_melbourne_data = melbourne_data.dropna(axis=0)
# 選擇目標和特徵
y = filtered_melbourne_data.Price
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 
                        'YearBuilt', 'Lattitude', 'Longtitude']
X = filtered_melbourne_data[melbourne_features]

# 切割資料成訓練資料和驗證資料
from sklearn.model_selection import train_test_split
train_X, val_X, train_y, val_y = train_test_split(X, y,random_state = 0)
# 匯入決策樹和平均絕對誤差
from sklearn.metrics import mean_absolute_error
from sklearn.tree import DecisionTreeRegressor

# 寫一個叫做取得平均絕對誤差的function,get_mae
# input有樹的最大節點數量(max_leaf_nodes)、訓練資料和驗證資料
def get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y):
    # 創建一個決策樹的model,並且將最大節點數量設為max_leaf_nodes
    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)
# 求出不同的最大節點的平均絕對誤差
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))
Max leaf nodes: 5  		 Mean Absolute Error:  347380
Max leaf nodes: 50  		 Mean Absolute Error:  258171
Max leaf nodes: 500  		 Mean Absolute Error:  243495
Max leaf nodes: 5000  		 Mean Absolute Error:  254983

在這邊發現max_leaf_node=500對這個模型來說是相對好的參數

因此使用這個參數對全部的資料做建模

結論

Overfitting: 太過吻合訓練資料,導致在驗證的時候準確度降低

Underfitting: 不夠吻合訓練資料,導致預測的時候不準確


上一篇
Day 4 [Python ML] 模型驗證
下一篇
Day 6 [Python ML] 隨機森林(Random Forests)演算法
系列文
使用python學習Machine Learning29

尚未有邦友留言

立即登入留言