檔案建立日期: 2019/12/18
最後修訂日期: None
相關軟體資訊:
- Windows 10
- Python 3.7.2
- Numpy 1.17.3
- sklearn 0.21.3
- matpltlib 3.1.1
參考檔案: AI with Python Tutorial
說明: 所有內容歡迎引用, 只需註明來源及作者, 本文內容如有錯誤或用詞不當, 敬請指正.
標題: 人工智慧 (03) 機器學習 - 監督式學習迴歸方法
監督式學習 - 迴歸
取決於輸入變數的輸出變數是連續實數值
線性迴歸/單變數回歸 ( Linear Regressor/Single Variable Regressor )
- 匯入有用的軟體包
- 匯入資料集
- 檢查資料集與各變數間是否存在某種線性關係, 可以畫出闗系圖確認
- 將資料整理成陣列 - 將資料分為兩部分,即訓練集和測試集。
- 根據訓練集建立模型
- 以測試集評估模型及其準確性
- 效能評估方法: Var, Square Error := sum((y - predict_y)^2)
- MAE ( Mean Absolute Error ) := sum(abs(y-predict_y))/N
- MSE ( Mean Squared Error ) := sum((y - predict_y)^2)/N
- MedAE ( Median Absolute Error ) := median(abs(y-predict_y))
- EVS ( Explained Variance Score ) := 1 - Var(y - predict_y)/Var(y)
- R2 Score ( R Square Score ) := 1 - sum((y - predict_y)^2)/sum((y - mean(y))^2)
多變數回歸 ( Multivariable Regressor )
- 輸入資料集先進多項式和互動特徵生成器
- 再進到線性迴歸
- 效能評估方法同線性迴歸.
注: 在作處理之前或處理中, 最好能檢視一下資料的內容及分佈, 以便能找出合適的方式來解決問題, 不合適的方式極可能找到錯誤的結果, 比如以下的示例, 明明資料非線性 還要以線性迴歸或多變數回歸來求結果, 很明顯結果就是不正確的. 不過以下的示例只是示範如何操作.
示例 1. 線性迴歸
# -----------------------------------------------------------------------------
# Linear Regressor/Single Variable Regressor
# -----------------------------------------------------------------------------
import numpy as np
from sklearn import linear_model
import sklearn.metrics as sm
import matplotlib.pyplot as plt
input_data = np.array([[2.0,4.8],[2.9,4.7],[2.5,5.0], # 載入資料
[3.2,5.5],[6.0,5.0],[7.6,4.0], # 每筆資料的
[3.2,0.9],[2.9,1.9],[2.4,3.5], # 最一個資料是目標
[0.5,3.4],[1.0,4.0],[0.9,5.9],
[1.2,2.5],[3.2,5.6],[5.1,1.5],
[4.5,1.2],[2.3,6.3],[2.1,2.8]])
X, y = input_data[:, :-1], input_data[:, -1:]
training_samples = int(0.6 * len(X)) # 分割資料
testing_samples = len(X) - training_samples # 60% 是訓練組
X_train, y_train = X[:training_samples], y[:training_samples]
X_test, y_test = X[training_samples:], y[training_samples:]
reg_linear = linear_model.LinearRegression() # 建立迴歸器
reg_linear.fit(X_train, y_train) # 訓練
y_test_pred = reg_linear.predict(X_test) # 預估測試組
plt.scatter(X_test, y_test, color='red') # 畫出測試組及預估值
plt.plot(X_test, y_test_pred, color='black', linewidth=2)
plt.xticks(())
plt.yticks(())
plt.show()
# 線性迴歸指標
mean_absoulte_error = sm.mean_absolute_error (y_test, y_test_pred)
mean_square_error = sm.mean_squared_error (y_test, y_test_pred)
median_absolute_erroe = sm.median_absolute_error (y_test, y_test_pred)
explain_variance_score= sm.explained_variance_score(y_test, y_test_pred)
r2_score = sm.r2_score (y_test, y_test_pred)
示例 2. Multivariable Regressor
# -----------------------------------------------------------------------------
# Multivariable Regressor
# -----------------------------------------------------------------------------
import numpy as np
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
# 載入資料集
input_data = np.array([[2.0,4.8,1.2,3.2],[2.9,4.7,1.5,3.6],[2.5,5.0,2.8,2.0],
[3.2,5.5,3.5,2.1],[6.0,5.0,2.0,3.2],[7.6,4.0,1.2,3.2],
[3.2,0.9,2.3,1.4],[2.9,1.9,2.3,1.2],[2.4,3.5,2.8,3.6],
[0.5,3.4,1.8,2.9],[1.0,4.0,3.0,2.5],[0.9,5.9,5.6,0.8],
[1.2,2.5,3.4,1.2],[3.2,5.6,2.0,3.2],[5.1,1.5,1.2,1.3],
[4.5,1.2,4.1,2.3],[2.3,6.3,2.5,3.2],[2.1,2.8,1.2,3.6]])
X, y = input_data[:, :-1], input_data[:, -1]
training_samples = int(0.6 * len(X)) # 60% 資料集作為訓練集
testing_samples = len(X) - training_samples
X_train, y_train = X[:training_samples], y[:training_samples]
X_test, y_test = X[training_samples:], y[training_samples:]
polynomial = PolynomialFeatures(degree=5) # 多項式和互動特徵生成器
X_train_transformed = polynomial.fit_transform(X_train) # 5次多項式
# 線性迴歸只是1次多項式
poly_linear_model = linear_model.LinearRegression() # 建立線性迴歸
poly_linear_model.fit(X_train_transformed, y_train) # 利用生成器的輸出訓練
X_test_transformed = polynomial.fit_transform(X_test) # 預估測試值
y_test_predict = poly_linear_model.predict(X_test_transformed)
X_data_point = [[2.23, 1.35, 1.12]] # 預估輸入也要先入生成器
poly_datapoint = polynomial.fit_transform(X_data_point)
poly_linear_predict = poly_linear_model.predict(poly_datapoint)