2. 手動實現SVR

我們將使用Kaggle中的「汽車燃油效率」數據集(或類似的數據集),從頭實現SVR的訓練過程,并進行數據可視化分析。

步驟:

1. 加載數據集

2. 數據預處理

3. 定義SVR的訓練過程

4. 可視化分析

1. 加載與預處理數據

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 加載數據
data = pd.read_csv('auto-mpg.csv')

# 數據預處理
data = data[['mpg', 'horsepower', 'weight', 'acceleration']]
data = data.dropna() # 刪除缺失值

# 將'horsepower'列轉換為數值型,并處理無效數據
data['horsepower'] = pd.to_numeric(data['horsepower'], errors='coerce')
data = data.dropna() # 處理轉換后可能出現的缺失值

X = data[['horsepower', 'weight', 'acceleration']].values
y = data['mpg'].values

# 標準化輸入數據
X = (X - X.mean(axis=0)) / X.std(axis=0)
y = (y - y.mean()) / y.std()

2. 定義SVR的訓練過程

為了簡單,我們實現一個線性SVR,不使用現有的庫來直接調用SVR算法。

class SVR:
def __init__(self, C=1.0, epsilon=0.1, lr=0.001, max_iter=1000):
self.C = C
self.epsilon = epsilon
self.lr = lr
self.max_iter = max_iter

def fit(self, X, y):
n_samples, n_features = X.shape
self.w = np.zeros(n_features)
self.b = 0
for _ in range(self.max_iter):
for i in range(n_samples):
if np.abs(y[i] - (np.dot(X[i], self.w) + self.b)) > self.epsilon:
if y[i] > np.dot(X[i], self.w) + self.b:
self.w += self.lr * (X[i] - self.C * self.w)
self.b += self.lr * 1
else:
self.w -= self.lr * (X[i] + self.C * self.w)
self.b -= self.lr * 1

def predict(self, X):
return np.dot(X, self.w) + self.b

3. 訓練模型

# 訓練SVR模型
model = SVR(C=1.0, epsilon=0.1, lr=0.001, max_iter=10000)
model.fit(X, y)

# 預測
y_pred = model.predict(X)

4. 數據可視化分析

我們將通過以下四個圖表來分析數據和模型表現:

1. 原始數據的分布

2. 訓練后的回歸線與實際數據的對比

3. 殘差分布

4. 預測值與實際值的對比

# 1. 原始數據的分布
plt.figure(figsize=(8,6))
plt.scatter(X[:,0], y, color='blue', label='Actual')
plt.title('Original Data Distribution')
plt.xlabel('Horsepower')
plt.ylabel('MPG')
plt.legend()
plt.show()

# 2. 回歸線與實際數據對比
plt.figure(figsize=(8,6))
plt.scatter(X[:,0], y, color='blue', label='Actual')
plt.plot(X[:,0], y_pred, color='red', label='Predicted')
plt.title('SVR Fit')
plt.xlabel('Horsepower')
plt.ylabel('MPG')
plt.legend()
plt.show()

# 3. 殘差分布
residuals = y - y_pred
plt.figure(figsize=(8,6))
plt.hist(residuals, bins=20, color='green')
plt.title('Residuals Distribution')
plt.xlabel('Residuals')
plt.ylabel('Frequency')
plt.show()

# 4. 預測值與實際值的對比
plt.figure(figsize=(8,6))
plt.scatter(y, y_pred, color='purple')
plt.title('Predicted vs Actual MPG')
plt.xlabel('Actual MPG')
plt.ylabel('Predicted MPG')
plt.show()

這個案例中,我們手動實現了一個簡單的SVR模型,并且通過四個圖形分析了模型的表現:

1. 原始數據分布 展示了我們正在處理的數據的基本特征。

2. 回歸線與實際數據對比 展示了SVR模型的擬合效果。

3. 殘差分布 讓我們直觀了解模型誤差的分布情況。

4. 預測值與實際值的對比 幫助我們評估模型的預測效果。

上面的代碼手動實現了 SVR,通過圖形進行數據分析。在這個過程中,希望幫助大家深入理解了SVR的數學原理,并通過手動實現掌握了它的內在工作邏輯。

文章轉自微信公眾號@深夜努力寫Python

上一篇:

突破最強時間序列模型,LightGBM??!

下一篇:

突破XGBoost,XGBoost在股票市場趨勢預測中的應用 ??!
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費