1. 概述
sklearn.svm.SVR
是 Scikit-learn 提供的支持向量回归的函数库,用于建立支持向量机回归模型,主要用于非线性回归问题。支持向量回归是一种基于支持向量机技术的回归分析方法,支持向量回归学习的目标是找到一个回归函数,使预测结果尽可能地接近实际值,同时最大化支持向量与超平面的距离。
2. 使用方法
2.1 调用方法
在使用 sklearn.svm.SVR
库时,我们需要实例化一个 SVR
类,并通过参数调节模型的参数。其中,最重要的参数有 C
、kernel
、gamma
等。
from sklearn.svm import SVR
clf = SVR(C=1.0, kernel='rbf', degree=3, gamma='auto',
coef0=0.0, shrinking=True, tol=0.001, cache_size=200,
verbose=False, max_iter=-1)
2.2 参数解释
C
: 惩罚系数,C值越大,则容忍错误程度越低,这意味着模型将更加拟合训练数据。kernel
: 核函数类型,通常有线性核函数(linear)、多项式核函数(polynomial)、径向基函数(rbf)等。gamma
: 核函数宽度参数,用于控制选择的支持向量的数量。degree
: 多项式核函数的度数,通常只有使用多项式核函数时才会用到。coef0
: 某些核函数中的常量项。tol
: 求解器中的容差值。max_iter
: 求解器的最大迭代次数。
2.3 代码示例
以下是一个使用 SVR
进行数据拟合和预测的示例。我们使用 sklearn.datasets
库中的 make_regression
生成一组随机回归数据,并将其划分为训练集和测试集,最后使用 SVR
对数据进行拟合和预测。
import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error
X, y = make_regression(n_samples=500, n_features=5, noise=0.1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
clf = SVR(kernel='rbf')
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("MSE: %.4f" % mse)
我们可以看到输出的 MSE 略大于 0,这是因为我们生成的数据中有噪声(noise=0.1),对于实际应用,我们可以自己准备数据进行实验。
2.4 实例应用
实例 1: 预测市场房价
以下是一个使用 SVR
进行市场房价预测的示例。我们使用 sklearn.datasets
库中的 load_boston
读取波士顿房价数据,将数据划分为训练集和测试集,最后使用 SVR
对数据进行拟合和预测。
import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error
data = load_boston()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2)
clf = SVR(kernel='rbf', C=10.0, gamma=0.1)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("MSE: %.4f" % mse)
我们可以看到输出的 MSE 较小,说明 SVR
可以用于市场房价预测。
实例 2: 预测黄石国家公园的游客数量
以下是一个使用 SVR
进行黄石国家公园游客数量预测的示例。我们使用 pandas
库读取黄石国家公园游客数量数据,并将数据划分为训练集和测试集,最后使用 SVR
对数据进行拟合和预测。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error
data = pd.read_csv('YellowstoneVisitors.csv')
X_train, X_test, y_train, y_test = train_test_split(data.MonthId.values.reshape(-1, 1), data.Visitors,
test_size=0.2)
clf = SVR(kernel='rbf', C=100000.0, gamma=0.001)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("MSE: %.4f" % mse)
我们可以看到输出的 MSE 比较小,说明 SVR
在指定足够的数据时可以用于游客数量预测。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解 Scikit-learn 的 svm.SVR函数:支持向量机回归器 - Python技术站