機器學習-建立嶺迴歸器
阿新 • • 發佈:2019-02-04
線性迴歸的主要問題是對異常值敏感。在真實世界的資料收集過程中,經常會遇到錯誤的度量結果。而線性迴歸使用的是普通最小二乘法,其目標是使平方誤差最小化。這時,由於異常誤差的絕對值很大,因此破壞整個模型。普通最小二乘法在建模的時候會考慮每個資料點的影響,為了避免這個問題,我們引入正則化項的係數作為閾值來消除異常值的影響。這個方法被稱為嶺迴歸。
#開啟檔案,獲取資料 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)