在Python中,我们可以使用scikit-learn
库来实现支持向量机(SVM)的回归预测算法。scikit-learn
提供了SVR
(Support Vector Regression)类来实现这一功能。以下是一个简单的示例,展示了如何使用SVR
进行回归预测。
pip install scikit-learn |
# 导入必要的库 | |
import numpy as np | |
from sklearn.svm import SVR | |
from sklearn.model_selection import train_test_split | |
from sklearn.metrics import mean_squared_error | |
import matplotlib.pyplot as plt | |
# 生成一些模拟数据 | |
np.random.seed(0) | |
X = np.sort(5 * np.random.rand(40, 1), axis=0) | |
y = np.sin(X).ravel() | |
# 添加一些噪声 | |
y[::5] += 3 * (0.5 - np.random.rand(8)) | |
# 划分训练集和测试集 | |
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) | |
# 创建SVR模型 | |
# kernel可以是'linear', 'poly', 'rbf', 'sigmoid', 'precomputed' 或自定义的核函数 | |
svr_rbf = SVR(kernel='rbf', C=100, gamma='auto') | |
# 训练模型 | |
svr_rbf.fit(X_train, y_train) | |
# 预测测试集 | |
y_pred = svr_rbf.predict(X_test) | |
# 计算并打印均方误差 | |
mse = mean_squared_error(y_test, y_pred) | |
print(f"Mean Squared Error: {mse}") | |
# 可视化结果 | |
plt.scatter(X_train, y_train, color='darkorange', label='data') | |
plt.plot(X_test, y_pred, color='navy', lw=2, label='SVR (RBF kernel) prediction') | |
plt.xlabel('data') | |
plt.ylabel('target') | |
plt.title('Support Vector Regression') | |
plt.legend() | |
plt.show() |
在这个例子中,我们首先生成了一些模拟数据,这些数据是sin
函数的值加上一些随机噪声。然后,我们将数据分为训练集和测试集,并创建了一个使用RBF(径向基函数)核的SVR模型。接着,我们训练模型并在测试集上进行预测,最后计算了预测的均方误差(MSE)并绘制了结果图。
可以通过调整SVR
的参数(如C
和gamma
)来优化模型的性能。C
是正则化参数,gamma
定义了单个训练样本的影响达到最大的距离(对于RBF、poly和sigmoid核)。对于不同的数据集和问题,最佳参数可能会有所不同。