原来机器学习那么简单——支持向量机回归

引言:
在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。


一、算法介绍

支持向量回归(SVR)是一种监督学习算法,用于解决回归问题。其核心思想是找到一个超平面,这个超平面能够以最小的误差包含所有的训练样本。与支持向量机处理分类问题类似,支持向量回归的目标是确保尽可能多的数据点位于由超平面决定的边界内。

二、算法原理

2.1 基本思想

SVR的目标是找到一个函数 f ( x ) f(x) f(x),使得该函数在整个数据集上的偏差最小,并且同时保证模型的复杂度较低,以提高模型的泛化能力。在实现上,这通常通过引入所谓的“软间隔”来实现,允许某些数据点可以处于误差允许的范围之外,从而达到更好的预测效果。

2.2 数学模型

在支持向量回归中,我们试图找到一个线性函数 f ( x ) = w x + b f(x) = wx + b f(x)=wx+b,其中 w w w 是权重向量, b b b 是偏置。我们希望大部分的数据点 ( x i , y i ) (x_i, y_i) (xi,yi) 都满足 ∣ y i − f ( x i ) ∣ ≤ ϵ |y_i - f(x_i)| \leq \epsilon yif(xi)ϵ,这里的 ϵ \epsilon ϵ 是预先设定的一个小的非负数,表示容忍的误差范围。

为了找到这样的函数,我们需要解决以下优化问题:

min ⁡ w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ( ξ i + ξ i ∗ ) \min_{w, b} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^n (\xi_i + \xi_i^*) w,bmin21w2+Ci=1n(ξi+ξi)

其中, ξ i \xi_i ξi ξ i ∗ \xi_i^* ξi 是松弛变量,用于处理不在误差范围内的数据点, C C C 是正则化参数,用于控制模型复杂度和误差之间的平衡。

2.3 核技巧

在实际应用中,很多问题的数据分布可能是非线性的,直接使用线性函数进行回归可能无法达到较好的效果。SVR通过引入核函数来解决这一问题。核函数可以将数据映射到一个高维空间,在这个高维空间中,原本线性不可分的数据可能变得线性可分。常见的核函数包括线性核、多项式核、径向基函数(RBF)核等。

三、案例分析

为了进一步理解支持向量回归(SVR)的应用,我们将使用加州房价数据集进行模型训练和测试。加州房价数据集包含以下特征:

  • MedInc:收入中位数
  • HouseAge:房屋年龄的中位数
  • AveRooms:平均房间数目
  • AveBedrms:平均卧室数目
  • Population:区域人口
  • AveOccup:平均入住率
  • Latitude:纬度
  • Longitude:经度

数据集的目标变量为MedHouseVal,即房屋价值的中位数(单位为$100,000)。

3.1 案例代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error

# 加载数据
california = fetch_california_housing()
X = pd.DataFrame(california.data, columns=california.feature_names)
y = california.target
X
# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 创建SVR模型
svr = SVR(kernel='rbf')

# 训练模型
svr.fit(X_train, y_train)

# 预测测试集
y_pred = svr.predict(X_test)

# 计算MSE
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

# 可视化实际值与预测值
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, color='blue')
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'r--', lw=2)
plt.xlabel('Actual')
plt.ylabel('Predicted')
plt.title('Actual vs. Predicted')
plt.show()

# 可视化误差分布
errors = y_pred - y_test
plt.figure(figsize=(10, 6))
plt.hist(errors, bins=20, color='purple')
plt.xlabel('Prediction Error')
plt.ylabel('Frequency')
plt.title('Prediction Error Distribution')
plt.show()

3.2 结果分析

通过运行代码,得到模型在测试集上的平均平方误差(MSE)为: 0.3551984619989417。这个值越低,表示模型的预测能力越好。大家可以通过更换 SVR 的核函数类型(如 ‘linear’, ‘poly’ 等)来尝试改善模型的表现。

预测值与实际值的对比图如下:

误差分布图如下:

四、结论

通过这个案例,我们可以看到支持向量回归在实际数据集上的应用。尽管 SVR 是一种强大的回归工具,但选择合适的核函数和调整模型参数对于获得最佳性能至关重要。

鱼鹰算法优化支持向量机(OOA-SVR)是一种基于鱼鹰算法的支持向量机优化方法。支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,用于分类和回归问题。 鱼鹰算法是一种基于自然界中鱼鹰捕食行为的优化算法。它模拟了鱼鹰在捕食过程中的搜索和追踪策略,通过不断调整搜索空间中的候选解来寻找最优解。 OOA-SVR方法将鱼鹰算法应用于支持向量机的优化过程中,以提高支持向量机的性能和精度。其原理如下: 1. 初始化种群:根据问题的特点和要求,初始化一定数量的鱼鹰个体作为初始种群。 2. 评估适应度:根据支持向量机的目标函数,计算每个个体的适应度值,评估其性能。 3. 更新位置:根据鱼鹰算法的搜索策略,通过调整个体的位置来更新种群。这里的位置表示支持向量机模型中的参数,如权重和偏置。 4. 更新速度:根据个体之间的位置差异和适应度值,更新个体的速度。速度的更新可以帮助个体更好地搜索最优解。 5. 选择操作:根据适应度值,选择一部分个体作为下一代的父代,用于产生新的个体。 6. 交叉和变异:通过交叉和变异操作,生成新的个体,并加入到下一代种群中。 7. 终止条件:根据预设的终止条件,判断是否满足停止迭代的条件。如果满足,则输出最优解;否则,返回第3步继续迭代。 通过以上步骤,OOA-SVR方法能够通过鱼鹰算法的优化策略,不断调整支持向量机模型的参数,以找到更优的分类或回归模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抱抱宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值