机器学习-支持向量机(SVM) -回归-python scikit-learn

本文介绍了如何使用Python的scikit-learn库进行支持向量机回归,包括数据导入、预处理、训练线性和支持向量回归器,以及通过随机搜索优化模型参数的过程。实验展示了线性与非线性模型的比较,并强调了模型评估的重要性。
摘要由CSDN通过智能技术生成

前言

支持向量机是一种用于回归、分类和检测异常值的监督学习算法。支持向量机是经典机器学习中非常强大的模型之一,适用于处理复杂的高维数据集。

支持向量机支持不同的核(线性、多项式、径向基函数(rbf)和sigmoid),支持向量机可以处理不同类型的数据集,包括线性和非线性。

支持向量机的工作方式可以比作有边界线的间隔。在SVM训练过程中,SMV根据每个训练数据点的重要程度绘制类之间的较大裕度或决策边界。在决策边界内的训练数据点称为支持向量。

实验数据可在机器学习-线性回归-python scikit-learn 房价预测文章中下载。

1.导入模块

import numpy as np
import pandas as pd
import seaborn as sns
import urllib.request
import sklearn
import matplotlib.pyplot as plt
%matplotlib inline

2.导入数据

cal_data = pd.read_csv('housing.csv')
#把数据分成训练集和测试集。
from sklearn.model_selection import train_test_split
train_data, test_data = train_test_split(cal_data, test_size=0.1,random_state=20)

3.数据预处理

# 获取训练输入数据和标签
training_input_data = train_data.drop('median_house_value', axis=1)
training_labels = train_data['median_house_value']

# 数值特征
num_feats = training_input_data.drop('ocean_proximity', axis=1)
# 分类特征
cat_feats = training_input_data[['ocean_proximity']]

# 处理缺失值
from sklearn.pipeline import Pipeline 
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
num_pipe = Pipeline([
      ('imputer', SimpleImputer(strategy='mean')),
      ('scaler', StandardScaler())])
num_preprocessed = num_pipe.fit_transform(num_feats)
# Pipeline结合了数值Pipeline和分类特征编码
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
num_list = list(num_feats)
cat_list = list(cat_feats)
final_pipe = ColumnTransformer([
    ('num', num_pipe, num_list),
    ('cat', OneHotEncoder(), cat_list)
])
training_data_preprocessed = final_pipe.fit_transform(training_input_data)

4.训练支持向量回归器

在回归中,SVR不像在分类中那样用决策边界分离类,而是在边界边缘上拟合训练数据点,但保持它们不相交。

from sklearn.svm import LinearSVR, SVR
#使用线性支持向量机。
lin_svr = LinearSVR()
lin_svr.fit(training_data_preprocessed, training_labels)
#还可以使用具有多项式核函数的非线性支持向量机。
poly_svr = SVR(kernel='poly')
poly_svr.fit(training_data_preprocessed, training_labels)

5.评价支持向量回归

在对测试集进行评估之前,先对训练集上创建的两个模型进行评估。因为找到一个好的模型需要许多改进的迭代,所以不建议在模型足够好之前触摸测试集。否则,它将无法根据新数据做出预测。
通常用均方误差来评价回归模型,但最常用的是均方根误差。

from sklearn.metrics import mean_squared_error
#先看看线性支持向量机看看效果
predictions = lin_svr.predict(training_data_preprocessed)
mse = mean_squared_error(training_labels, predictions)
rmse = np.sqrt(mse)
rmse  #215682.86713461558

线性支持向量机效果不佳,再看看多项式核函数非线性支持向量机的效果。

predictions = poly_svr.predict(training_data_preprocessed)
mse = mean_squared_error(training_labels, predictions)
rmse = np.sqrt(mse)
rmse  #117513.38828582528

它比前者做得好。这里还可以尝试用随机搜索来改进这一点,以找到最好的参数。

6.改进支持向量回归模型

使用随机搜索来改进SVR模型。关于参数的一些注意事项:

  • Gamma(y): 这是一个正则化超参数。当Gamma很小时,模型可能欠拟合。它太高,模型会过拟合。
  • C: 和Gamma一样。它是一个正则化超参数。当C较低时,有很多正则化。当C较高时,正则化程度较低。
  • Epsilon:用来控制间隔的宽度。
from sklearn.model_selection import RandomizedSearchCV
params = {'gamma':[0.0001, 0.1],'C':[1,1000], 'epsilon':[0,0.5], 'degree':[2,5]}
rnd_search = RandomizedSearchCV(SVR(), params, n_iter=10, verbose=2, cv=3, random_state=42)
rnd_search.fit(training_data_preprocessed, training_labels)

predictions = svr_rnd.predict(training_data_preprocessed)
mse = mean_squared_error(training_labels, predictions)
rmse = np.sqrt(mse)
rmse  #68684.15262765526
#测试集上进行评估
test_input_data = test_data.drop('median_house_value', axis=1)
test_labels = test_data['median_house_value']
test_preprocessed = final_pipe.transform(test_input_data)

test_pred = svr_rnd.predict(test_preprocessed)
test_mse = mean_squared_error(test_labels,test_pred)
test_rmse = np.sqrt(test_mse)
test_rmse  #68478.07737338323

总结

这是一个使用支持向量机进行回归的实验介绍。在下一个实验中,将使用SVM进行分类。

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值