【机器学习实战】 支持向量机
2021/9/29 23:43:34
本文主要是介绍【机器学习实战】 支持向量机,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
线性SVM分类
SVM分类器在类之间拟合可能的最宽街道
软间隔分类,超参数C越小,越容易欠拟合,间隔违例情况越多, 但泛化效果可能更好;C越大, 越容易过拟合, 间隔违例情况越少, 泛化效果更差。
# detect virginica iris import numpy as np from sklearn import datasets from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import LinearSVC iris = datasets.load_iris() X = iris["data"][:, (2, 3)] # petal length, petal width y = (iris["target"] == 2).astype(np.float64) # Iris virginica svm_clf = Pipeline([ ("scaler", StandardScaler()), ("linear_svc", LinearSVC(C=1, loss="hinge")), ]) svm_clf.fit(X, y) svm_clf.predict([[5.5, 1.7]]) # array([1.])
可以将SVC类与线性内核一起使用, 而不使用LinearSVC类。 创建SVC模型时, 编写 SVC(kernel=“linear”, C=1)。 或者可以将SGDClassifier类与SGDClassifier(loss=“hinge”, alpha=1/(m*C))一起使用。 这将使用常规的随机梯度下降训练SVM分类器, 收敛速度不如LinearSVC类, 但对处理在线分类任务或不适合内存的庞大数据集很有用。
非线性SVM分类
# Satellite datasets from sklearn.datasets import make_moons from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures X, y = make_moons(n_samples=100, noise=0.15) polynomial_svm_clf = Pipeline([ ("poly_features", PolynomialFeatures(degree=3)), ("scaler", StandardScaler()), ("svm_clf", LinearSVC(C=10, loss="hinge")) ]) polynomial_svm_clf.fit(X, y)
多项式内核
from sklearn.svm import SVC poly_kernel_svm_clf = Pipeline([ ("scaler", StandardScaler()), ("svm_clf", SVC(kernel="poly", degree=3, coef0=1, C=5)), ]) poly_kernel_svm_clf.fit(X, y)
coef0控制模型受高阶多项式还是低阶多项式的影响程度。
寻找正确超参数值的常用方法是网格搜索。
相似特征
解决非线性问题的另一种技术是添加相似特征, 这些特征经过相似函数计算得出, 相似函数可以测量每个实例与一个特定地标之间的相似度。
高斯RBF内核
用SVC类试试高斯RBF(径向基函数)核:
rbf_kernel_svm_clf = Pipeline([ ("scaler", StandardScaler()), ("svm_clf", SVC(kernel="rbf", gamma=5, C=0.001)) ]) rbf_kernel_svm_clf.fit(X, y)
超参数gamma增加,会使钟型曲线变窄, 每个实例影响范围随之减小:决策边界变得更不规则, 开始围着单个实例绕转; 反之, 减小gamma值使钟形曲线更宽,每个实例影响范围更大,决策边界更平坦。
所以gamma就如一个正则化的超参数:过拟合,就降低它的值, 欠拟合, 就提升它的值。
SVM回归
SVM回归尽可能使可能多的实例位于街道上, 同时限制间隔违例。 街道宽度用超参数epsilon控制。
from sklearn.svm import LinearSVR svm_reg = LinearSVR(epsilon=1.5) svm_reg.fit(X, y)
解决非线性回归任务, 可以采用核化的SVM模型
from sklearn.svm import SVR svm_poly_reg = SVR(kernel="poly", degree=2, C=100, epsilon=0.1) svm_poly_reg.fit(X,y.ravel())
这篇关于【机器学习实战】 支持向量机的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-28机器学习资料入门指南
- 2024-10-25机器学习开发的几大威胁及解决之道
- 2024-10-24以下是五个必备的MLOps (机器学习运维)工具,帮助提升你的生产效率 ??
- 2024-10-15如何选择最佳的机器学习部署策略:云 vs. 边缘
- 2024-10-12从软件工程师转行成为机器学习工程师
- 2024-09-262024年机器学习路线图:精通之路步步为营指南
- 2024-09-13机器学习教程:初学者指南
- 2024-08-07从入门到精通:全面解析机器学习基础与实践
- 2024-01-24手把手教你使用MDK仿真调试
- 2024-01-10基于“小数据”的机器学习