您的位置:

深入探究sklearnsvr

一、简介

支持向量回归 (Support Vector Regression, SVR) 是一种回归分析的方法,和 SVM 相关。SVR 同样采用 SVM 中的技巧,使用核函数,最终目的是求解支持向量。与 SVM 不同的是,SVR 对每个样本都有一个不同的目标函数和不同的损失函数。

在 Scikit-learn 中,SVR 实现就是 sklearn.svm.SVR。Scikit-learn 中也提供了 Decision Tree、Gradient Boosting、Random Forest、K-Neighbor 等一系列回归分析的方法,而 SVM 是其中一种,它是在高维空间指定样本之间的最大间隔用分离超平面来实现分类的。

二、使用

使用 SVR 进行回归分析需要采取下面几个步骤:

1. 导入数据

import pandas as pd

dataset=pd.read_csv("sample.csv")
X=dataset.iloc[:,:-1].values
y=dataset.iloc[:,-1].values

2. 训练模型

from sklearn.svm import SVR
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error 

model=make_pipeline(StandardScaler(),SVR(C=1.0, epsilon=0.2))
model.fit(X,y)

y_pred=model.predict(X)
error=mean_squared_error(y,y_pred)
print('MSE: %.3f' % error)

3. 评估模型

评估模型时,可以使用 Scikit-learn 中的 scoring 函数,比如 r2_score、mean_squared_error、mean_absolute_error 等。

from sklearn.metrics import r2_score

r_square=r2_score(y, y_pred)
print('R-Square: %.3f' % r_square)

三、参数

1. C 参数

C 参数是 SVM 优化问题的惩罚因子,它决定了训练误差的容忍度。

当 C 越小,模型会容忍更大的误差,但泛化误差可能会受到影响;当 C 越大,模型会尽可能去减少训练误差,但泛化误差也可能会变大。

model=SVR(C=1.0)

2. kernel 参数

kernel 参数是用于指定用于执行非线形特征映射的内核类型。Scikit-learn 中提供了四种内核类型:

  • linear:线性核函数
  • poly:多项式核函数
  • rbf:径向基核函数
  • sigmoid:Sigmoid 核函数
model=SVR(kernel='rbf')

四、优化

1. Grid Search

Grid Search 是一种超参数优化算法,它会尝试用不同的超参数组合来训练模型,并选择使评分最佳的超参数组合。在 Scikit-learn 中,可以使用 GridSearchCV 让算机自动搜索超参数组合。

from sklearn.model_selection import GridSearchCV 

param_grid={'C':[1,10],'kernel':['rbf','linear']}

grid=GridSearchCV(SVR(),param_grid,refit=True,verbose=3)

grid.fit(X,y)

print(grid.best_params_)
print(grid.best_estimator_)

2. Random Search

Random Search 和 Grid Search 类似,不过它是随机选择超参数,并在一定次数里选取最优超参数。在 Scikit-learn 中,可以使用 RandomizedSearchCV 让算机自动搜索超参数组合。

from sklearn.model_selection import RandomizedSearchCV

param_dist={'C':[0.1,0.5,1],'kernel':['rbf','linear']}

rand=RandomizedSearchCV(SVR(),param_distributions=param_dist,n_iter=10,refit=True,verbose=3)

rand.fit(X,y)

print(rand.best_params_)
print(rand.best_estimator_)

五、总结

本文介绍了 SVM 的回归分析方法 SVR,并详细介绍了 SVR 的使用、参数和优化。在实际应用中,我们可以选择不同的核函数、适度调整参数,来得到更好的回归分析结果。