zoukankan      html  css  js  c++  java
  • SVM支持向量机分类算法

    SVM(Support Vector Machine)支持向量机是建立于统计学习理论上的一种二类分类算法,适合处理具备高维特征的数据集。它对数据的分类有两种模式,一种是线性可分割,另一种是线性不可分割(即非线性分割)。SVM思想是:通过某种核函数,将数据在高维空间里寻找一个最优超平面,能够将两类数据分开。支持向量是距离最优超平面最近的实例,因此有该算法用到的实例数据量相较其他会少巨多的说法,可以研究体会下。
     
    针对不同数据集,不同核函数的分类效果可能完全不一样。可选的核函数有这么几种:
    线性函数:形如K(x,y)=x*y这样的线性函数;
    多项式函数:形如K(x,y)=[(x·y)+1]^d这样的多项式函数;
    径向基函数:形如K(x,y)=exp(-|x-y|^2/d^2)这样的指数函数;
    Sigmoid函数:......
     
    SVM的一般流程
    (1)收集数据:可以适用任意方法
    (2)准备数据:需要数值型数据
    (3)分析数据:有助于可视化分割 超平面
    (4)训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优
    (5)测试算法:十分简单的计算过程就可以实现
    (6)使用算法:几乎所有二类分类问题都可以使用SVM,对多类问题需要对代码做一些修改
     
     
    简单示例1
    import numpy as np
    import pylab as pl
    from sklearn import svm
     
    x = [[1, 1], [2, 5], [5, 5], [2, 4]]
    y = [5, 6, 5,6]  #对应x的分类标记
    clf = svm.SVC(kernel= 'linear') #线性核函数
    clf.fit(x, y)
     
    print clf
    print clf.support_vectors_  #支持向量
    print clf.support_  #支持向量是哪几个(下标)
    print clf.n_support_   #每一类中有几个支持向量
    print clf.predict([[4, 4]])  #测试数据
     
    输出:
    SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
      decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',
      max_iter=-1, probability=False, random_state=None, shrinking=True,
      tol=0.001, verbose=False)
    [[1. 1.]
     [5. 5.]
     [2. 4.]]
    [0 2 3]
    [2 1]
    [5]
     
     
    简单示例2
    import numpy as np
    import pylab as pl
    from sklearn import svm
     
    #生成随机点数据集
    np.random.seed(0) 
    x = np.r_[np.random.randn(5, 2) - [2, 2], np.random.randn(5, 2) + [2, 2]]
    y = [0] *5 +[1] * 5
    print x
    print y
     
    clf2 = svm.SVC(kernel='linear')
    clf2.fit(x, y)
    print clf2.support_
    print clf2.support_vectors_  
     
    #画出散点图
    #画出支持向量的点,参数:x,y,大小
    pl.scatter(clf2.support_vectors_[:, 0],clf2.support_vectors_[:, 1],s=100)
    #画出全部的点,参数:x,y,颜色,colormap,形状
    pl.scatter(x[:, 0],x[:, 1],c=y,cmap=pl.cm.Paired,marker='o')
    pl.axis('tight')
    pl.savefig('LinearSVC.png')
    pl.show()
     
    输出:
    LinearSVC.png图片粘贴失败,程序运行看吧。
     
     
  • 相关阅读:
    angularjs学习笔记—事件指令
    JS编写点击页面弹出被点击的标签名
    对数据进行排序
    springBoot集成seata
    maven打包时根据不同的环境生成不同的jar包名称
    单列模式-双重锁校验解析
    hashmap原理简述
    Linux搭建disconf(二)
    Linux搭建dubbo-admin 分布式服务监控中心
    Linux安装zookeeper
  • 原文地址:https://www.cnblogs.com/myshuzhimei/p/11776639.html
Copyright © 2011-2022 走看看