美文网首页
支撑向量机 SVM

支撑向量机 SVM

作者: 61etj | 来源:发表于2018-11-14 00:38 被阅读0次

支撑向量机 SVM

image

分类算法中,一般用一条边界来决策分类。这条就是决策边界。但是决策边界在很多时候都可以是多条 。那一条比较合适呢?数学理论的基础下,当只有分类边界离最近的分类点最远的时候,这条边界是最优秀的。 如图,有三条边界,中间的一条是离两个分类结果最远的,也就是最合适的。而上边和下边这两条我们称为支撑向量。当margin值最大时,中间的决策边界泛化能力就最强,也就是最合适。

推出公式

image 当 image

d最大,也就是margin最大

Soft Margin SVM

当边界不明确时,或者分类元素有异常时,决策边界就很难定义,上面用的方法可能会定义出泛化能力非常差的决策边界。所以我们要在边界中加入一定的容错率,这个容错率就是Soft Margin SVM

image

可以给容错加上比例

image

Scikit-learn 线性SVM

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets

iris = datasets.load_iris()

X = iris.data
y = iris.target

X = X[y<2,:2]
y = y[y<2]

#使用标准化同一量纲
from sklearn.preprocessing import StandardScaler

standardScaler = StandardScaler()
standardScaler.fit(X)
X_standard = standardScaler.transform(X)

#使用线性SVM算法
from sklearn.svm import LinearSVC

#超参数C,容错比例
svc = LinearSVC(C=1e9)
svc.fit(X_standard, y)

svc.coef_
svc.intercept_

Scikit-learn 多项式

from sklearn.svm import SVC

def PolynomialKernelSVC(degree, C=1.0):
    return Pipeline([
        ("std_scaler", StandardScaler()),
        ("kernelSVC", SVC(kernel="poly", degree=degree, C=C))#使用kernel="poly"核函数
    ])

poly_kernel_svc = PolynomialKernelSVC(degree=3)
poly_kernel_svc.fit(X, y)

Scikit-learn 高斯核函数

from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC

def RBFKernelSVC(gamma):
    return Pipeline([
        ("std_scaler", StandardScaler()),
        ("svc", SVC(kernel="rbf", gamma=gamma))#rbf 高斯核函数,gamma值越大越容易过拟合
    ])

svc = RBFKernelSVC(gamma=1)
svc.fit(X, y)

Scikit-learn SVM解决回归问题

类似分类问题,但是,支撑向量机包含越多元素越好,然后取向量机中间的边界。epsilon是向量机和边界的距离

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets

boston = datasets.load_boston()
X = boston.data
y = boston.target

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)

from sklearn.svm import LinearSVR
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

def StandardLinearSVR(epsilon=0.1):
    return Pipeline([
        ('std_scaler', StandardScaler()),
        ('linearSVR', LinearSVR(epsilon=epsilon))#
    ])

svr = StandardLinearSVR()
svr.fit(X_train, y_train)

svr.score(X_test, y_test)

相关文章

网友评论

      本文标题:支撑向量机 SVM

      本文链接:https://www.haomeiwen.com/subject/nzorfqtx.html