人工智慧 (03) 機器學習 - 監督式學習迴歸方法

Jason990420發表於2019-12-18

檔案建立日期: 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 )

  1. 匯入有用的軟體包
  2. 匯入資料集
  3. 檢查資料集與各變數間是否存在某種線性關係, 可以畫出闗系圖確認
  4. 將資料整理成陣列 - 將資料分為兩部分,即訓練集和測試集。
  5. 根據訓練集建立模型
  6. 以測試集評估模型及其準確性
  7. 效能評估方法: 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. 輸入資料集先進多項式和互動特徵生成器
  2. 再進到線性迴歸
  3. 效能評估方法同線性迴歸.

注: 在作處理之前或處理中, 最好能檢視一下資料的內容及分佈, 以便能找出合適的方式來解決問題, 不合適的方式極可能找到錯誤的結果, 比如以下的示例, 明明資料非線性 還要以線性迴歸或多變數回歸來求結果, 很明顯結果就是不正確的. 不過以下的示例只是示範如何操作.

示例 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)

人工智慧 (03) 機器學習 - 監督式學習迴歸方法

示例 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)

Jason Yang

相關文章