机器学习之支持向量机(SVM) (一)
来源:互联网 发布:淘宝联盟社区在哪里 编辑:程序博客网 时间:2024/05/16 15:09
写这篇博客其实我倍感压力,因为我把对偶式推出来后就不知道怎么做了,而且发现好像在应用这块,都没有用到对偶式,也许是应用的例子太简单或者是svm的包封装的太完善。总之,我倍感压力。
注:本文写的是线性可分的情况
一、理论
其中,对偶式推导如下:
后面我也不知道怎么做了,所以结合应用来感受一下吧。当然,这个例子比较浅,纯粹感受一下。
二、实践
假设我们有如下两类样本:
有以下待测试样本:
需要通过svm对其进行分类。
所以我们开始构建SVM:
# -*- coding: utf-8 -*-from sklearn import svmimport numpy as npimport pylab as plnp.random.seed(0)a = np.random.randn(20,2) - [2,2] #产生一个20行2列的随机数,且满足标准正态分布(0,1),均值为0,标准差为1. 然后将均值改为-2,标准差不变b = np.random.randn(20,2) + [2,2] #与上面类似X = np.r_[a,b] #按行来组合两个矩阵Y = [0] * 20 + [1] * 20 #标签#print a#print X,X.shape#print Yclassifier = svm.SVC(kernel = 'linear')classifier.fit(X,Y)print '支持向量:',classifier.support_vectors_#得到支持向量在X中的indexprint '支持向量在样本中的位置:',classifier.support_#得到支持向量的数量print '支持向量的个数:',classifier.n_support_w = classifier.coef_[0] #coefficient:系数k = -w[0] / w[1] #斜率 w0x + w1y + b = 0,则 y = -(w0/w1)x - (b/w1)b = classifier.intercept_[0]x = np.linspace(-5,5)y = k * x - b / w[1] #最大边缘超平面(在这里是线)#计算左右两个边界上的线的方程point = classifier.support_vectors_[0] #左边的一个点l = point[1] - k * point[0] #截距y_left = k * x + lpoint = classifier.support_vectors_[-1]l = point[1] - k * point[0] #截距y_right = k * x + lpl.plot(x,y,'k-') #第三个参数:实线pl.plot(x,y_left,'k--') #第三个参数:虚线pl.plot(x,y_right,'k--') #第三个参数:虚线pl.scatter(classifier.support_vectors_[:,0],classifier.support_vectors_[:,1],s=80,facecolors = 'yellow')pl.scatter(X[:,0],X[:,1],c = Y, cmap = pl.cm.Paired)pl.axis('tight')pl.show()
构建完的结果如下:
黄色的是支持向量。
然后开始测试:(随机样本换了,不影响)
from random import *for i in range(10): a = [uniform(-5,5),uniform(-5,5)] #print a print '分类结果:',classifier.predict(a) pl.scatter(a[0],a[1],s = 180,facecolors = 'black')
结果如下:
好了,线性可分总结到这里吧,以后如果需要深入研究SVM再说吧。唉,压力山大。
阅读全文
1 0
- 机器学习之支持向量机(SVM) (一)
- 机器学习之支持向量机(svm)
- 机器学习之支持向量机(SVM)
- 机器学习之支持向量机SVM
- 机器学习-支持向量机SVM学习笔记一
- 机器学习笔记08:支持向量机(一)(SVM)
- 机器学习之支持向量机(SVM)
- 深入浅出机器学习之支持向量机SVM(SMO算法)
- 机器学习之支持向量机: Support Vector Machines (SVM)
- Spark机器学习系列之13: 支持向量机SVM
- 机器学习之—支持向量机(SVM)
- 机器学习之支持向量机SVM及代码示例
- 机器学习算法笔记之5:支持向量机SVM
- 机器学习之支持向量机(SVM)
- 机器学习笔记(五)之详解SVM支持向量机
- 机器学习之理解支持向量机SVM
- 机器学习 支持向量机(SVM)
- Stanford机器学习--- 支持向量机SVM
- 十进制转换为二至九进制
- iOS 使用CAShapeLayer给View添加虚线边框
- Win10 修改cmd命令行窗口UTF-8编码
- iptables详解(转)
- E-R图的初步了解
- 机器学习之支持向量机(SVM) (一)
- Java基础与提高系列-java 接口的Interafce
- notepad++给找到的内容前后添加双引号
- 2017.10.31工作日记
- 0基础lua学习(十)迭代器
- android开发之改变TextView部分字体的颜色和大小工具类
- hibernate原理
- Python之函数简析(一)
- 基于zookeeper的服务注册中心