zoukankan      html  css  js  c++  java
  • 【SVM】理解与使用(不好完全掌握,知道如何使用即可)

    1:原理理解

    图中有分别属于两类的一些二维数据点和三条直线。如果三条直线分别代表三个分类器的话,请问哪一个分类器比较好?

    我们凭直观感受应该觉得答案是H3。首先H1不能把类别分开,这个分类器肯定是不行的;H2可以,但分割线与最近的数据点只有很小的间隔,如果测试数据有一些噪声的话可能就会被H2错误分类(即对噪声敏感、泛化能力弱)。H3以较大间隔将它们分开,这样就能容忍测试数据的一些噪声而正确分类,是一个泛化能力不错的分类器。

    对于支持向量机来说,数据点若是[公式]维向量,我们用[公式]维的超平面来分开这些点。但是可能有许多超平面可以把数据分类。最佳超平面的一个合理选择就是以最大间隔把两个类分开的超平面。因此,SVM选择能够使离超平面最近的数据点的到超平面距离最大的超平面。

    以上介绍的SVM只能解决线性可分的问题,为了解决更加复杂的问题,支持向量机学习方法有一些由简至繁的模型:

    • 线性可分SVM
    当训练数据线性可分时,通过硬间隔(hard margin,什么是硬、软间隔下面会讲)最大化可以学习得到一个线性分类器,即硬间隔SVM,如上图的的H3。
    • 线性SVM
    当训练数据不能线性可分但是可以近似线性可分时,通过软间隔(soft margin)最大化也可以学习到一个线性分类器,即软间隔SVM。
    • 非线性SVM
    当训练数据线性不可分时,通过使用核技巧(kernel trick)和软间隔最大化,可以学习到一个非线性SVM。

    2:使用

    import numpy as np
    import sklearn.svm as sk_svm
    import sklearn.datasets as datasets
    
    iris = datasets.load_iris() # 鸟分类数据集
    X = iris['data']
    y = iris['target']
    
    from sklearn.model_selection import train_test_split
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2)
    print("训练集:",X_train.shape,y_train.shape)
    print("测试集:",X_test.shape,y_test.shape)
    
    model = sk_svm.SVC(C=1,kernel='rbf',gamma='auto')
    model.fit(X_train,y_train)
    acc=model.score(X_test,y_test) #根据给定数据与标签返回正确率的均值
    print('SVM模型评价:',acc)
     
  • 相关阅读:
    【Pascal's Triangle II 】cpp
    【Pascal's Triangle】cpp
    【Substring with Concatenation of All Words】cpp
    【Multiply Strings】cpp
    【Minimum Window】cpp
    【Merge Intervals】cpp
    【Insert Interval】cpp
    认识GIT之入门
    数据结构学习系列之线性表(四)
    VBox虚拟机与主机(宿主)通讯原理以及socat(套接字猫)简单介绍
  • 原文地址:https://www.cnblogs.com/wanghong1994/p/13458567.html
Copyright © 2011-2022 走看看