AI在线 AI在线

原来机器学习那么简单—SVR

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

一、算法介绍

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

二、算法原理

2.1 基本思想

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

2.2 数学模型

        在支持向量回归中,我们试图找到一个线性函数 ,其中 是权重向量, 是偏置。我们希望大部分的数据点 都满足 ,这里的 是预先设定的一个小的非负数,表示容忍的误差范围。

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

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

2.3 核技巧

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

三、案例分析

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

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

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

案例代码

复制
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()

四、结果分析

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

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

图片图片

误差分布图如下:

图片图片

五、结论

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

相关资讯

稳健且准确,AlphaFold 结合两种 AI 方法,实现蛋白质化学位移自动分配

编辑 | 绿萝化学位移分配对于基于核磁共振 (NMR) 的蛋白质结构、动力学和相互作用研究至关重要,可提供重要的原子级见解。然而,获得化学位移分配是劳动密集型的并且需要大量的测量时间。为了解决这一限制,苏黎世联邦理工学院(ETH Zurich)的研究人员之前提出了 ARTINA——一种用于自动分配二维 (2D)–4D NMR 谱的深度学习方法。近日,研究人员提出了一种将 ARTINA 与 AlphaFold 和 UCBShift 相结合的综合方法,能够减少实验数据、提高准确性并增强大型系统的稳健性,从而实现化学位移
11/30/2023 10:11:00 AM
ScienceAI

发现38万种新材料、17天自主合成41种新化合物,DeepMind一日两篇论文登上Nature

编辑 | 萝卜皮从计算机芯片、电池到太阳能电池板等现代技术都依赖于无机晶体。开发这些新技术,所需的晶体必须稳定,否则材料就会分解,而每个新的、稳定的晶体背后可能需要研究人员数月或者更久的艰苦实验。Google DeepMind 材料团队分享了 220 万颗新晶体的发现,相当于近 800 年的知识。该团队推出了新的深度学习工具,用于材料探索的图网络 (GNoME),可通过预测新材料的稳定性来显著提高发现的速度和效率。论文链接: GNoME,科学家可以使人类已知的技术上可行的材料数量成倍增加。在其 220 万个预测中,
11/30/2023 2:19:00 PM
ScienceAI

可直接比较潜在新药的性能,杜克大学团队开发新的药物AI模型

编辑 | 白菜叶目前的分子机器学习模型往往将单个分子作为输入,来预测其生物、化学或物理特性。然而,此类算法需要大型数据集,并且尚未针对预测分子之间的性质差异进行优化,限制了它们从较小数据集学习的能力,也限制了直接比较两个分子预期性质的能力。杜克大学(Duke University)的研究人员开发了 DeepDelta,这是一种成对深度学习方法,可以同时处理两个分子,并学习从小数据集中预测两个分子之间的属性差异。在 10 个 ADMET 基准任务中,DeepDelta 方法显著优于两种已建立的分子机器学习算法:定向消
12/6/2023 2:17:00 PM
ScienceAI
  • 1