ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【机器学习实战】 支持向量机

2021-09-29 23:01:07  阅读:210  来源: 互联网

标签:实战 kernel svm 机器 clf SVM import 向量 sklearn


线性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())

 

标签:实战,kernel,svm,机器,clf,SVM,import,向量,sklearn
来源: https://www.cnblogs.com/kyfishing/p/15354808.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有