SVM连续值预测

使用svm既可以实现分类问题,即输出是标签的种类,例如手写数字识别,Iris鸢尾花分类,同时也能实现连续值的预测,即输出是连续值,也就是回归问题,例如波士顿房价预测。具体使用方法请见svm官方文档
下图中Classification函数即是分类函数,Regression即是回归函数。
在这里插入图片描述

分类问题

使用svm实现,Iris鸢尾花数据集分类问题,详情请见链接

回归问题

使用svm实现波士顿房价预测。在此说一下自己程序实现预处理的问题,在我的代码中本来是没有进行StandardScaler()标准化这一步,而且我的输出数据有8位小数,最后实现的预测效果很差,基本预测全是一样的值。加上预处理后,虽然预测值会进行标准化,但是可以得到模型的均方差MSE。

一、导入库和数据

本文采用dataset自带的Boston房价数据集,进行回归预测

# 导入库
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVR
from sklearn import metrics
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVR
import seaborn as sns
import matplotlib.pyplot as plt

# 导入数据集
boston = load_boston()
data = boston.data
target = boston.target

二、数据预处理

先用train_test_split切割出70%的训练集和30%的测试集。由于该数据集各样本取值范围差异很大,直接将数据输入到SVM中的话,学习将会变得困难且容易被噪声干扰。解决方法是对每个特征做标准化或归一化或正则化,本次采用sklearn库自带的z_值标准化

# 数据预处理
train_data,test_data,train_target,test_target = train_test_split(data,target,test_size=0.3)
Stand_X = StandardScaler()  # 特征进行标准化
Stand_Y = StandardScaler()  # 标签也是数值,也需要进行标准化
train_data = Stand_X.fit_transform(train_data)
test_data = Stand_X.transform(test_data)
train_target = Stand_Y.fit_transform(train_target.reshape(-1,1)) # reshape(-1,1)指将它转化为1列,行自动确定
test_target = Stand_Y.transform(test_target.reshape(-1,1))  

三、模型训练和评估

 # ① 线性核函数
clf = LinearSVR(C=2)
clf.fit(train_data,train_target)
y_pred = clf.predict(test_data)
print("线性核函数:")
print("训练集评分:", clf.score(train_data,train_target))
print("测试集评分:", clf.score(test_data,test_target))
print("测试集均方差:",metrics.mean_squared_error(test_target,y_pred.reshape(-1,1)))
print("测试集R2分:",metrics.r2_score(test_target,y_pred.reshape(-1,1)))

# ② 高斯核函数
clf = SVR(kernel='rbf',C=10,gamma=0.1,coef0=0.1)
clf.fit(train_data,train_target)
y_pred = clf.predict(test_data)
print("高斯核函数:")
print("训练集评分:", clf.score(train_data,train_target))
print("测试集评分:", clf.score(test_data,test_target))
print("测试集均方差:",metrics.mean_squared_error(test_target,y_pred.reshape(-1,1)))
print("测试集R2分:",metrics.r2_score(test_target,y_pred.reshape(-1,1)))

# ③ sigmoid核函数
clf = SVR(kernel='sigmoid',C=2)
clf.fit(train_data,train_target)
y_pred = clf.predict(test_data)
print("sigmoid核函数:")
print("训练集评分:", clf.score(train_data,train_target))
print("测试集评分:", clf.score(test_data,test_target))
print("测试集均方差:",metrics.mean_squared_error(test_target,y_pred.reshape(-1,1)))
print("测试集R2分:",metrics.r2_score(test_target,y_pred.reshape(-1,1)))

# ④ 多项式核函数
clf = SVR(kernel='poly',C=2)
clf.fit(train_data,train_target)
y_pred = clf.predict(test_data)
print("多项式核函数:")
print("训练集评分:", clf.score(train_data,train_target))
print("测试集评分:", clf.score(test_data,test_target))
print("测试集均方差:",metrics.mean_squared_error(test_target,y_pred.reshape(-1,1)))
print("测试集R2分:",metrics.r2_score(test_target,y_pred.reshape(-1,1)))

从结果上看,模型评分:高斯> 多项式>线性>sigmoid
因为SVM对参数十分敏感,不同的参数会导致模型的评分差距非常大,因此用GridSearchCV进行调参,看下是否高斯的得分依然最高

# 调参
clf = GridSearchCV(SVR(),param_grid={'kernel':['poly','sigmoid','rbf'],'C': [0.1,1,10],'gamma': [0.1,1,10]},cv=5)
clf.fit(train_data,train_target)
print("best_param:",clf.best_params_)
print("best_score:", clf.best_score_)

果然还是高斯核函数的评分最高,说明在线性不可分情况下,可以优先使用高斯核函数

详情见链接

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 支持向量机(Support Vector Machine, SVM)是一种机器学习算法,可以用于分类和回归问题。在回归预测中,SVM可以通过训练数据找到一个最优的超平面,以尽可能地使训练样本与超平面之间的差距最小化。 SVM回归预测的基本思想是,通过将样本映射到高维特征空间,找到一个超平面,使得样本与该超平面之间的总误差最小。样本点到超平面的距离即为预测,如果样本点在超平面正方向的误差大于负方向的误差,则预测为负;反之,预测为正。 在SVM回归预测中,可以通过引入松弛变量来允许一些样本点与超平面之间存在一定的误差,从而增加模型的容错性。同时,通过引入惩罚项,可以平衡模型的简洁性与预测准确性。 SVM回归预测的核心是选择合适的核函数。常用的核函数有线性核函数、多项式核函数、径向基函数等。这些核函数能够将样本点映射到高维特征空间,并通过计算样本点在特征空间内的距离来进行预测SVM回归预测具有以下优点: 1. 可以处理小样本问题,且在样本较少的情况下仍能保持较好的泛化能力。 2. 适用于高维特征空间的预测问题,能够处理非线性关系。 3. 通过引入松弛变量和惩罚项,可以提高模型的容错性和稳定性。 然而,SVM回归预测也存在一些缺点: 1. 对于大规模的数据集,需要较长的训练时间。 2. 对于非平衡数据集和噪音敏感,需要进行数据预处理和调参。 3. 由于核函数的选择和参数的设置,模型的解释性相对较差。 总而言之,SVM回归预测是一种强大的机器学习算法,可以用于解决回归预测问题。在实际应用中,需要根据具体问题选择合适的核函数和参数,并进行数据预处理和模型调优,以获得更好的预测性能。 ### 回答2: 支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,既可以用于分类问题,也可以用于回归问题。SVM回归预测是利用SVM算法进行回归分析和预测SVM回归预测的目标是找到一个最优的线性或非线性函数,将特征空间中的样本点映射到一个高维空间,使得样本点与此超平面之间的间隔最大。具体来说,SVM回归预测的目标是寻找一个超平面,这个超平面可以最大程度地将已知的样本点与预测的样本点分开,同时保持预测样本点不超过一定误差。这个超平面可以看作是一个线性回归模型。 SVM回归预测的基本原理是通过构建一个最优化问题,求解一个凸二次规划问题。通过调整模型参数,如核函数、惩罚系数和松弛变量等,可以得到不同的回归模型。在实际应用中,可以根据具体情况选择不同的核函数和参数设置,以获得更好的回归效果。 SVM回归预测具有以下优点: 1. 能够处理线性和非线性问题,具有较强的泛化能力。 2. 在实际应用中,通过选择合适的核函数和参数设置,可以灵活地适应不同的数据集。 3. 可以有效地处理高维数据,因为在高维空间中,样本点更容易线性可分。 然而,SVM回归预测也存在一些限制: 1. 计算复杂度较高,随着样本数量的增加而增加。 2. 对于大规模数据集,需要耗费较长的训练时间。 3. 对参数调整敏感,需要经过多次实验和调试,才能获得最佳的回归结果。 总结来说,SVM回归预测是一种可靠且灵活的机器学习算法,可以用于回归问题的预测。它具有较强的泛化能力,能够处理线性和非线性问题,在实际应用中可以根据具体情况选择不同的参数设置,以获得更好的回归效果。 ### 回答3: 支持向量机(SVM)是一种被广泛应用于分类和回归问题的机器学习算法。与传统的回归算法相比,SVM回归在处理非线性和高维数据时表现出较好的性能。 SVM回归的目标是通过构建一个最佳拟合的超平面来预测或估计连续变量的输出。该超平面的构建是通过最大化间隔(该间隔是超平面与最近样本点之间的距离)来实现的。换句话说,SVM回归试图通过找到让尽可能多的样本点远离超平面的方式来找到一个最佳的超平面。 在SVM回归中,我们使用了一种称为“ε不敏感损失”的函数来度量超平面与真实输出之间的误差。这是一种以超平面为中心的ε带(带宽)之内的数据点的误差被认为是可接受的,超平面之外的数据点的误差被认为是不可接受的方法。我们的目标是找到一个尽可能小的带宽ε,同时让超平面与尽可能多的样本点相交。 SVM回归的优点包括: 1. 对于非线性和高维数据的回归问题具有很好的表现。 2. 可以通过选择不同的核函数来适应不同的数据类型,如线性核、多项式核和径向基函数核。 3. 通过引入罚项,可以处理更复杂的数据,避免了过拟合问题。 然而,SVM回归也存在一些限制: 1. 对大规模数据集的处理效率相对较低,因为SVM回归需要计算每个样本点与超平面之间的距离。 2. 选择合适的核函数及其参数是一个挑战。 3. 对于存在大量噪声或异常点的数据集,SVM回归可能表现不佳。 总之,SVM回归是一种强大的机器学习算法,适用于多种回归问题。但在应用时需要注意合理选择核函数和参数,以及处理大规模数据集和异常点的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值