支持向量机回归及其应用(附Python 案例代码)

使用支持向量机回归估计房价

让我们看看如何使用支持向量机(SVM)的概念构建一个回归器来估计房价。我们将使用sklearn中提供的数据集,其中每个数据点由13个属性定义。我们的目标是根据这些属性估计房价。

引言

支持向量回归(SVR)是一种用于回归任务的机器学习算法。它的目标是找到一个函数,使得数据点偏离该函数的距离在某个阈值内的情况下,该函数尽可能平滑。数学上,SVR 通过解决以下优化问题来实现:
min ⁡ 1 2 ∥ w ∥ 2 + C ∑ i = 1 n max ⁡ ( 0 , ∣ y i − ( w ⋅ x i + b ) ∣ − ϵ ) \min \frac{1}{2} \|w\|^2 + C \sum_{i=1}^n \max(0, |y_i - (w \cdot x_i + b)| - \epsilon) min21w2+Ci=1nmax(0,yi(wxi+b)ϵ)
其中, w w w 是权重向量, b b b 是偏差, C C C 是惩罚参数, ϵ \epsilon ϵ 是不敏感阈值。
在这里插入图片描述

案例代码

# 导入所需的包
import numpy as np
from sklearn import datasets
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error, explained_variance_score
from sklearn.utils import shuffle

# 加载房价数据集
data = datasets.load_boston()

# 打乱数据以避免分析偏差
X, y = shuffle(data.data, data.target, random_state=7)

# 将数据集按照80/20的比例分割为训练集和测试集
num_training = int(0.8 * len(X))
X_train, y_train = X[:num_training], y[:num_training]
X_test, y_test = X[num_training:], y[num_training:]

# 创建支持向量回归模型并使用线性核
# C 参数表示训练误差的惩罚,如果增大 C 的值,模型将更精细地拟合训练数据
# 这可能会导致过拟合并使其失去泛化能力
# epsilon 参数指定一个阈值,如果预测值与实际值的距离在此阈值内,则不会有训练误差的惩罚
sv_regressor = SVR(kernel='linear', C=1.0, epsilon=0.1)

# 训练支持向量回归模型
sv_regressor.fit(X_train, y_train)

# 评估回归器的性能并打印指标
y_test_pred = sv_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_test_pred)
evs = explained_variance_score(y_test, y_test_pred)
print("\n#### 性能 ####")
print("均方误差 =", round(mse, 2))
print("解释方差分数 =", round(evs, 2))

# 对测试数据点进行预测
test_data = [3.7, 0, 18.4, 1, 0.87, 5.95, 91, 2.5052, 26, 666, 20.2, 351.34, 15.27]
print("\n预测价格:", sv_regressor.predict([test_data])[0])

为了方便读者理解,这里我们对datasets.load_boston()
房价数据部分展示:

CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT PRICE
0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98 24.0
0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2 242 17.8 396.90 9.14 21.6
0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03 34.7
0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3 222 18.7 394.63 2.94 33.4
0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3 222 18.7 396.90 5.33 36.2

运行代码应该得到以测试数据对应的房价预测结果:

#### 性能 ####
均方误差 = 15.41
解释方差分数 = 0.82
预测价格: 18.5217801073

猜你喜欢

转载自blog.csdn.net/qq_39538718/article/details/140739334