一、數據預處理
在開始建立模型前,我們需要通過數據預處理將原始數據轉化成可供模型訓練的數據。常見的數據預處理包括:數據清洗、特徵選擇、數據變換、特徵縮放等。
以房屋價格數據為例,我們首先需要檢查數據是否存在缺失值。可以使用 pandas 庫中的 isnull() 函數來檢測數據集中的缺失值,然後使用 dropna() 函數將缺失值所在的樣本或特徵刪除。若數據中存在離群點,則可以通過刪除或平滑處理的方法來處理離群點。
接下來是特徵選擇問題。在訓練模型時,我們需要選擇最有用的特徵。可以使用相關係數或卡方檢驗等方法篩選特徵。同時,我們也可以使用特徵降維操作,如主成分分析(PCA)。
數據變換包括數據類型轉換,比如將字元串型轉化為數值型,還有特徵變換,如對特徵進行歸一化、標準化等。 特徵縮放是指使數據分布在合適的區間內,能夠加速模型的收斂速度。其中常見的特徵縮放方法包括MinMaxScaler和StandardScaler。
import pandas as pd from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler # 1.數據清洗 data = pd.read_csv('house_price.csv') data = data.dropna() #刪除缺失樣本 # 2.特徵選擇 X = data.drop(['price'], axis=1) y = data['price'] corr = X.corr() # 計算相關係數 # 選擇相關係數大於 0.6 的特徵 relevant_features = corr[corr>0.6].dropna(how='all', axis=0).columns.tolist() X = X[relevant_features] # 3.數據變換和特徵縮放 X = X.astype('float64') #轉換數據類型 imputer = SimpleImputer() X = imputer.fit_transform(X) # 處理缺失值 scaler = StandardScaler() X = scaler.fit_transform(X) # 對特徵進行標準化
二、選擇模型
選擇合適的模型是建立預測模型的核心。目前常用的回歸模型包括線性回歸、嶺回歸、Lasso回歸和決策樹等。這些模型都有各自的優缺點,需要根據特定問題選擇合適的模型。
在選擇模型時,除了考慮模型的準確性外,還要考慮計算複雜度和模型可解釋性。計算複雜度越低,模型越容易被擴展和維護。同時,模型可解釋性能夠幫助我們深入理解模型的工作原理和預測結果的依據。
from sklearn.linear_model import LinearRegression from sklearn.tree import DecisionTreeRegressor # 選擇線性回歸模型 model_lr = LinearRegression() model_lr.fit(X, y) # 選擇決策樹模型 model_tree = DecisionTreeRegressor(random_state=0) model_tree.fit(X, y)
三、模型評估
在模型選擇後,需要對模型進行評估。模型評估常見的指標有:均方誤差(MSE)、平均絕對誤差(MAE)、R2 指數等。均方誤差越小,說明模型的預測效果更好。
為了避免模型過擬合,我們需要將數據分為訓練集和測試集。取一部分數據用於訓練模型,以另一部分數據用於測試模型的準確性。
from sklearn.metrics import mean_squared_error, r2_score from sklearn.model_selection import train_test_split # 將數據分為訓練集和測試集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 對訓練集和測試集進行評估 y_train_pred = model_tree.predict(X_train) y_test_pred = model_tree.predict(X_test) print('MSE train:', mean_squared_error(y_train, y_train_pred)) print('MSE test:', mean_squared_error(y_test, y_test_pred)) print('R2 score train:', r2_score(y_train, y_train_pred)) print('R2 score test:', r2_score(y_test, y_test_pred))
四、模型調優
模型調優是提高模型準確性的重要手段。常用的模型調優方法包括:網格搜索法、隨機搜索法、貝葉斯優化等。
網格搜索法和隨機搜索法是基於模型參數的調優方法,其主要思想是通過對模型每個參數的不同取值進行交叉驗證,從而找到最優的模型。而貝葉斯優化是一種更加複雜的優化方法,它可以通過考慮每個參數取值對整體優化的影響,從而減少搜索空間,大大提高調優的效率。
from sklearn.model_selection import GridSearchCV params = { 'max_depth': [10, 20, 30], 'min_samples_leaf': [1, 2, 3], 'min_samples_split': [2, 3, 4] } model = DecisionTreeRegressor(random_state=0) grid_search = GridSearchCV(model, param_grid=params, cv=5, scoring='neg_mean_squared_error') grid_search.fit(X_train, y_train) print(grid_search.best_params_) # 輸出最優參數 print(grid_search.best_score_) # 輸出最優分數
五、模型融合
在某些情況下,使用一個模型無法得到較好的結果,此時可以通過模型融合的方法提高預測的準確性。常用的模型融合方法包括:Bagging、Boosting 和 Stacking 等。
Bagging是一種通過多次採樣,然後針對每個樣本採用相同的模型進行訓練,然後將結果進行平均匯總的方法。Boosting是一種通過迭代訓練多個弱模型,然後將結果進行加權綜合的方法。而Stacking是通過將多個模型的預測結果作為輸入,使用一個元模型來訓練的方法。
from sklearn.ensemble import BaggingRegressor # 選擇 Bagging 模型進行模型融合 model_bag = BaggingRegressor(base_estimator=model_tree, n_estimators=50, random_state=0) model_bag.fit(X_train, y_train) # 對訓練集和測試集進行評估 y_train_pred = model_bag.predict(X_train) y_test_pred = model_bag.predict(X_test) print('MSE train:', mean_squared_error(y_train, y_train_pred)) print('MSE test:', mean_squared_error(y_test, y_test_pred)) print('R2 score train:', r2_score(y_train, y_train_pred)) print('R2 score test:', r2_score(y_test, y_test_pred))
六、總結
本文中介紹了使用機器學習技術預測房價的完整流程。首先進行數據預處理,包括數據清洗、特徵選擇、數據變換和特徵縮放等。然後選擇模型進行訓練,包括線性回歸、嶺回歸、Lasso回歸和決策樹等。接下來對模型進行評估,常用的評估指標包括均方誤差、平均絕對誤差和R2指數等。在模型準確性不足時,可以使用模型調優和模型融合的方法來提高預測準確性。
原創文章,作者:PXDA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/132622.html