机器学习算法
来源:互联网 发布:js怎么判断日期相等 编辑:程序博客网 时间:2024/06/06 05:22
在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM。
SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果。
【案例背景】
从前有两个地主,他们都是占山为王的一方霸主。本来各自吃饱自己的饭万事无忧,可是人心不知足蛇吞象啊,自己总是都想占对方的一亩三分地,冲突争吵从来都没有停歇过。当时的环境就是谁狠这土地就归谁,但是我们现在想从科学的角度来分析,如何让他们的地盘均分,画条边界线,从此互不干扰呢?
【演示代码】
import numpy as np import matplotlib.pylab as pltfrom sklearn import svm #生成随机分布的点np.random.seed(1) X=np.r_[np.random.randn(20,2)-[2,2],np.random.randn(20,2)+[2,2]] Y=[0]*20+[1]*20#在图中画出随机分布的点plt.scatter(X[:,0],X[:,1],c=Y,s=80,cmap=plt.cm.Paired) #这里是SVM核心算法函数 clf=svm.SVC(kernel='linear') clf.fit(X,Y) #画出分割线 w=clf.coef_[0] a=-w[0]/w[1] #得到斜率xx=np.linspace(-5,5) yy=a*xx-(clf.intercept_[0])/w[1] plt.plot(xx,yy,'k-') #在图中画出支持向量的点的两条直线b=clf.support_vectors_[0] yy_down=a*xx+(b[1]-a*b[0]) b=clf.support_vectors_[-1] yy_up=a*xx+(b[1]-a*b[0])plt.plot(xx,yy_down,'k--') plt.plot(xx,yy_up,'k--') #将支持向量的点特殊显示 plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=100)#在图中显示需要预测的点test_x1, test_y1 = (-3, -3)test_x2, test_y2 = (0, 5)plt.scatter([test_x1],[test_y1],s=100)plt.scatter([test_x2],[test_y2],s=100)Z1 = clf.predict([[test_x1, test_y1]])Z2 = clf.predict([[test_x2, test_y2]])print('预测结果:',Z1) #显示预测结果print('预测结果:',Z2) #显示预测结果plt.show()
【执行结果】
预测结果: [0]预测结果: [1]
【结果分析】
在上图中,用了4种颜色的圆点和三条直线,他们分别表示如下:
浅色点:地主1的建筑物
紫色点:地主2的建筑物
蓝色点:地主1和地主2相邻的关键建筑物
黄色点:预测点1
绿色点:预测点2
实体直线:最终的分界线,即楚河汉界的分界线,直线下方是地主1的地盘,直线上方是地主2的地盘。
虚线:关键点连成的直线,他们到分界线是等距的。
我们看到预测结果,黄点预测结果显示0,表示它在地主1的地盘;绿点预测结果显示1,表示它在地主2的地盘。
当然我们从肉眼也可以判断本次预测结果是对的。
【算法总结】
1. SVM算法只能划分两类物体,当然多类的情况可以转化为多次两类进行划分。
2. SVM算法不仅能划分线性可分的情况,还可以划分更加复杂线性不可分的情况,核心思想是:变成高阶计算,然后映射到低阶,以后有机会再单独演示这种情况。
OK, 本讲到此结束,后续更多精彩内容,请持续关注我的博客。
本文为原创文章,请珍惜作者的劳动成果,转载请注明出处。
阅读全文
0 0
- 机器学习算法排名
- 《机器学习》 KNN算法
- 机器学习中的算法
- 机器学习算法
- 机器学习算法
- 机器学习算法
- 机器学习算法---决策树
- 机器学习_adaboost 算法
- 机器学习常用算法
- 机器学习算法_Adaboost
- 【机器学习】HMM算法
- 机器学习算法-boost
- 机器学习算法-HMM
- 机器学习:KNN算法
- 机器学习常见算法
- 机器学习算法笔记
- 机器学习算法简介
- 机器学习算法汇总
- 08 Spring框架 AOP (一)
- 虚拟机下 solr7.1 cloud 集群搭建 (手动解压和官方脚本两种方式)
- 坐拥10亿用户的产品大牛们都被难住了?
- 利用指向类成员函数的指针数组,实现更加隐蔽的接口
- 中文乱码问题
- 机器学习算法
- quaggaJS 识别条形码
- ES6学习之路7----set数据结构
- 把数据list分割成list/len组,每组len条数据
- VS提示图标的含义
- 1 dubbo源码之启动时检查
- Attr、Style和Theme
- ADB命令与调试文件安装拷贝
- 第一个ssm小项目