2.1.2.2支持向量机(回归)
2017-11-19 本文已影响82人
idatadesign
模型介绍:相必读者朋友已经对2.1.1.2支持向量机(分类)中提到的分类模型的作用机理有所了解。本节介绍的支持向量机(回归)也同样是从训练数据中选取一部分更加有效的支持向量,只是这少部分的训练样本所提供的并不是类别目标,而是具体的预测数值。
初始
from sklearn.datasets import load_boston
#从读取房价数据存储在变量boston中。
boston=load_boston()
#输出数据描述
print(boston.DESCR)
from sklearn.cross_validation import train_test_split
import numpy as np
X=boston.data
y=boston.target
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33)
from sklearn.preprocessing import StandardScaler
#分别初始化对特征和目标值的标准化器
ss_X=StandardScaler()
ss_y=StandardScaler()
#分别对训练和测试数据的特征以及目标值进行标准化处理
X_train=ss_X.fit_transform(X_train)
X_test=ss_X.fit_transform(X_test)
y_train=ss_y.fit_transform(y_train)
y_test=ss_y.fit_transform(y_test)
使用三种不同核函数配置的支持向量机回归模型进行训练,并且分别对测试数据做出预测
from sklearn.svm import SVR
#使用线性核函数配置的支持向量机进行回归训练,并且对测试样本进行预测
linear_svr=SVR(kernel='linear')
linear_svr.fit(X_train,y_train)
linear_svr_y_predict=linear_svr.predict(X_test)
#使用多项式核函数配置的支持向量机进行回归训练,并且对测试样本进行预测
poly_svr=SVR(kernel='poly')
poly_svr.fit(X_train,y_train)
poly_svr_y_predict=poly_svr.predict(X_test)
#使用径向基核函数配置的支持向量机进行回归训练,并且对测试样本进行预测
rbf_svr=SVR(kernel='rbf')
rbf_svr.fit(X_train,y_train)
rbf_svr_y_predict=rbf_svr.predict(X_test)
对三种核函数配置下的支持向量机回归模型在相同测试集上进行性能评估
#使用R-squared,MSE,MAE指标对三种配置的支持向量机(回归)模型在相同测试集上进行性能评估
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error
print('R-squared value of linear SVR is',linear_svr.score(X_test,y_test))
print('The mean squared error of linear SVR is',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(linear_svr_y_predict)))
print('The mean absolute error of linear SVR is',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(linear_svr_y_predict)))
R-squared value of linear SVR is 0.654497663771
The mean squared error of linear SVR is 26.7906984256
The mean absolute error of linear SVR is 3.41002068375
print('R-squared value of poly SVR is',poly_svr.score(X_test,y_test))
print('The mean squared error of poly SVR is',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(poly_svr_y_predict)))
print('The mean absolute error of poly SVR is',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(poly_svr_y_predict)))
R-squared value of poly SVR is 0.23496198912
The mean squared error of poly SVR is 59.3220377532
The mean absolute error of poly SVR is 4.19595019294
print('R-squared value of rbf SVR is',rbf_svr.score(X_test,y_test))
print('The mean squared error of rbf SVR is',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(rbf_svr_y_predict)))
print('The mean absolute error of rbf SVR is',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(rbf_svr_y_predict)))
R-squared value of rbf SVR is 0.71072756206
The mean squared error of rbf SVR is 22.4305593192
The mean absolute error of rbf SVR is 2.81406224321
特点分析
本节首次向读者展示了不同配置模型在相同数据上所表现的性能差异。特别是除了2.1.1.2节支持向量机(分类)模型里曾经提到过的特点之外,该系列模型还可以通过配置不同的核函数来改变模型性能。因此,建议读者在使用时多尝试几种配置,进而获得更好的预测性能。