1. 程式人生 > >機器學習-建立嶺迴歸器

機器學習-建立嶺迴歸器

線性迴歸的主要問題是對異常值敏感。在真實世界的資料收集過程中,經常會遇到錯誤的度量結果。而線性迴歸使用的是普通最小二乘法,其目標是使平方誤差最小化。這時,由於異常誤差的絕對值很大,因此破壞整個模型。普通最小二乘法在建模的時候會考慮每個資料點的影響,為了避免這個問題,我們引入正則化項的係數作為閾值來消除異常值的影響。這個方法被稱為嶺迴歸。

#開啟檔案,獲取資料
import sys
import numpy as np
import sklearn.metrics as sm
from sklearn.linear_model import Ridge
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
X = []
y = []
f = open('E:\MachineLearning\CodeBook\data_multivar.txt', 'r')#開啟檔案
lines = f.readlines()     #一次性按行把所有資料讀取出來
for line in lines:       #逐行讀取檔案
    #print(line)          #列印一行資料
    data = [float(i) for i in line.split(',')]#逗號分隔欄位,並將欄位轉化為浮點數
    xt ,yt = data[:-1], data[-1]
    X.append(xt)
    y.append(yt)
#劃分資料為訓練集與驗證集
num_training = int(0.8*len(X))
num_test = len(X) - num_training
#訓練資料,80%的資料是訓練資料
X_train = np.array(X[:num_training]).reshape(num_training, 3)
y_train = np.array(y[:num_training])
#測試資料,20%的資料是測試資料
X_test = np.array(X[num_training:]).reshape(num_test, 3)
y_test = np.array(y[num_training:])
#訓練模型
ridge_regressor = Ridge(alpha=0.01, fit_intercept=True,max_iter=10000)#alpha引數控制迴歸器的複雜度
ridge_regressor.fit(X_train, y_train)
y_test_predict = ridge_regressor.predict(X_test)
#計算迴歸準確性
print('Mean absolute error = ', round(sm.mean_absolute_error(y_test, y_test_predict)), 2)
print('Mean squared error = ', round(sm.mean_squared_error(y_test, y_test_predict)), 2)
print('Median absolute error = ', round(sm.median_absolute_error(y_test, y_test_predict)), 2)