赞
踩
SVM支持向量机进行分类与回归操作:
【机器学习】使用scikitLearn进行SVM支持向量机进行回归
如果将分类用SVM算法的优化目标反转,使尽可能多的数据集实例出现在虚线中部,同时减少虚线外出现实例的数量。
对于线性回归,有参数epsilon:
from sklearn.svm import LinearSVR
svm_reg = LinearSVR(epsilon=1.5, random_state=42)
svm_reg.fit(X, y)
关于epsilon参数:越大虚线范围越宽。如果不确定,使用默认值0.epsilon越大,模型泛化能力越好,其值与预测值的大小相关。
该模型为epsilon不敏感,在固定epsilon的情况下,在虚线内添加更多实例,不改变回归结果。
对于非线性数据集,可以采用核技巧进行回归:
from sklearn.svm import SVR
svm_poly_reg = SVR(kernel="poly", degree=2, C=100, epsilon=0.1, gamma="scale")
svm_poly_reg.fit(X, y)
在固定epsilon的情况下,C值越大,对错分情况非惩罚越大,泛化性越差。
使用下列代码绘制下图:
fig, axes = plt.subplots(ncols=2, figsize=(9, 4), sharey=True)
plt.sca(axes[0])
plot_svm_regression(svm_poly_reg1, X, y, [-1, 1, 0, 1])
plt.title(r"$degree={}, C={}, \epsilon = {}$".format(svm_poly_reg1.degree, svm_poly_reg1.C, svm_poly_reg1.epsilon), fontsize=18)
plt.ylabel(r"$y$", fontsize=18, rotation=0)
plt.sca(axes[1])
plot_svm_regression(svm_poly_reg2, X, y, [-1, 1, 0, 1])
plt.title(r"$degree={}, C={}, \epsilon = {}$".format(svm_poly_reg2.degree, svm_poly_reg2.C, svm_poly_reg2.epsilon), fontsize=18)
save_fig("svm_with_polynomial_kernel_plot")
plt.show(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。