iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0

於建立自變數(cause)和依變數(dependent variable)之間關係的統計模型

  • 自變數(independent variable):解釋變數,是模型中用來解釋或預測依變數的變數。
  • 依變數(dependent variable):目標變數,是我們想要預測或解釋的變數。

簡單線性回歸(Simple linear regression)

只有一個自變數和一個依變數之間的線性關係時
y=mx+b

多元回歸(Multiple regression)

有多個自變數和一個依變數之間的線性關係時
y=b0+b1x1+b2x2+…+bnxn

實作 - 簡單線性回歸

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 生成隨機數據
np.random.seed(0)
X = np.random.rand(100, 1)
y = 2 * X + 1 + 0.1 * np.random.rand(100, 1)

# 創建線性回歸模型
model = LinearRegression()
model.fit(X, y)

# 進行預測
y_pred = model.predict(X)

# 繪製原始數據和回歸線
plt.scatter(X, y, label='Original Data')
plt.plot(X, y_pred, color='red', linewidth=2, label='Regression Line')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

https://ithelp.ithome.com.tw/upload/images/20231001/20161144II3HRtLIxG.png

實作 - 支持向量回歸(SVR)

Kernal

  • 線性核函數:kernel='linear'。它在輸入特徵和目標變數之間使用線性關係進行建模。
  • 多項式核函數:kernel='poly'。它將數據映射到更高維度的特徵空間,通過多項式函數建立非線性關係。
  • RBF 核函數:kernel='rbf'。它將數據映射到無窮維度的特徵空間,通過高斯函數建立非線性關係。
  • Sigmoid 核函數:kernel='sigmoid'。它使用 sigmoid 函數建立非線性關係,通常用於二元分類問題。
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from sklearn import datasets

# 生成一個具有200個樣本、1個特徵、1個目標變數和10的噪音水平的回歸dataset
X, y = datasets.make_regression(n_samples=200, n_features=1, n_targets=1, noise=10)

# 創建一個散點圖以視覺化生成的數據集
plt.scatter(X, y, linewidths=0.1)

# 創建支持向量回歸(SVR)模型的實例,使用linear核函數
model = SVR(kernel='linear', C=1.0)
model.fit(X, y)

# 使用模型對數據進行預測
predict = model.predict(X)

# 繪製回歸線
plt.plot(X, predict, c="red")

# 顯示原始數據的散點圖和預測的回歸線
plt.scatter(X, y, linewidths=0.1, c='blue', label='Data')
plt.plot(X, predict, c='red', label='Prediction')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Support Vector Regression (linear Kernel)')
plt.grid(True)
plt.show()

https://ithelp.ithome.com.tw/upload/images/20231001/20161144HdENa2GopB.png

多項式回歸(Polynomial Regression)

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
X = np.random.rand(100, 1)
y = 2 * X + 1 + 0.1 * np.random.rand(100, 1)

# 創建多項式特徵
poly_features = PolynomialFeatures(degree=2)
X_poly = poly_features.fit_transform(X)

# 使用線性回歸模型擬合多項式特徵
model = LinearRegression()
model.fit(X_poly, y)

# 預測
y_pred = model.predict(X_poly)

# 繪製原始數據和回歸線
plt.scatter(X, y, label='Original Data')
plt.plot(X, y_pred, color='red', linewidth=2, label='Polynomial Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

https://ithelp.ithome.com.tw/upload/images/20231001/2016114429QGHR92zU.png

隨機梯度下降回歸(SGD Regressor)

from sklearn.linear_model import SGDRegressor
import numpy as np
import matplotlib.pyplot as plt


np.random.seed(0)
X = np.random.rand(100, 1)
y = 2 * X + 1 + 0.1 * np.random.rand(100, 1)

# 創建隨機梯度下降回歸模型
model = SGDRegressor(max_iter=1000, eta0=0.01, random_state=0)

# 適配模型到數據
model.fit(X, y.ravel())

# 預測
y_pred = model.predict(X)

# 繪製原始數據和回歸線
plt.scatter(X, y, label='Original Data')
plt.plot(X, y_pred, color='red', linewidth=2, label='SGD Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

https://ithelp.ithome.com.tw/upload/images/20231001/20161144USrPkV275y.png

正規化回歸(Ridge, Lasso, Elastic Net

  • Ridge 回歸:它添加了一個 L2 正規化項,通過最小化權重的平方和來防止權重過大。這有助於減少模型的方差。
  • Lasso 回歸:它添加了一個 L1 正規化項,通過最小化權重的絕對值和來防止權重過大。它有助於特徵選擇,可以將不重要的特徵權重設為零。
  • Elastic Net 回歸:它結合了 Ridge 和 Lasso 正規化,同時考慮 L1 和 L2 正規化項。

保序回歸

  • 用於當依變數和自變數之間的關係不是線性的
  • 順序約束: 希望模型保持一個順序(例如,隨著自變數增加,依變數也應增加或減少)
  • sklearn.isotonic.IsotonicRegression

上一篇
[DAY15] 機器學習基本架構(二): 特徵工程Part2
下一篇
[DAY17] 機器學習-迴歸分析(二)
系列文
關於我從基礎程設轉職到人工智慧入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言