def getData2():r"""使用numpy生成随机数;使用pandas构造满足条件的随机数;:return:"""df = pd.DataFrame()df['X'] = np.random.randint(1,100,size=(100))df['Y'] = np.random.randint(1,100,size=(100))G1 = df[(df['X']>50) & (df['Y']>50)]G2 = df[(df['X']<50) & (df['Y']<50)]G1 = G1.reset_index(drop=True)G2 = G2.reset_index(drop=True)return (G1, G2)
# 解决分类问题
import mathfrom LinearRegression import *def calDistance(x,y,w,b):r"""计算一个点(x,y)到直线(w,b)的距离:param x: point x:param y: point y:param w: 直线的斜率:param b: 直线的截距:return: 返回距离"""x0 = xy0 = yx1 = (y0-b)/wy1 = w*x0+bd0 = math.sqrt((x0-x1)**2+(y0-y1)**2)if d0==0:return 0else:dis = abs(x0-x1)*abs(y0-y1)/d0return disdef getSVMLoss(G1, G2, w, b):r"""计算在(w,b)的前提下,整个数据集的loss;loss function 是 hinge loss:param G1:第一类样本pandas,第一列是X,第二列是Y:param G2:第二类样本pandas,第一列是X,第二列是Y:param w:斜率:param b:截距:return:返回当前斜率和截距下的loss"""total_loss = 0#G1的lossclass1Num = G1.shape[0]d1min = 99999x_f_1, y_f_1 = 0, 0for i in range(class1Num):x = G1.iloc[i,0]y = G1.iloc[i,1]d = calDistance(x,y,w,b)if (w*x+b) > y:total_loss += d####if d < d1min:x_f_1, y_f_1 = x, yd1min = d#G2的lossclass2Num = G2.shape[0]d2min = 99999x_f_2, y_f_2 = 0, 0for i in range(class2Num):x = G2.iloc[i,0]y = G2.iloc[i,1]d = calDistance(x,y,w,b)if w*x+b < y: #分类错误进行惩罚total_loss += dif d < d2min:#分类错误进行惩罚x_f_2, y_f_2 = x, yd2min = dtotal_loss = total_loss + abs(d2min - d1min)#如果两者相距太远,进行惩罚return total_lossdef SVMFit(G1, G2):w_last, b_last = -5, 100w, b = -6, 99loss_last = 1loss = 0stop = 10000i = 0eta = 1e-4count = 0while(i < stop):print("{:05d}: w is {:.2f}, b is {:.2f}, loss is {:.2f}".format(i,w,b,loss))loss = getSVMLoss(G1, G2, w, b)if loss == 0:breakif loss - loss_last < 0.1:count += 1if count>1000:breakwn = w - eta * (loss-loss_last)/(w-w_last)bn = b - eta * (loss-loss_last)/(b-b_last)w_last = ww = wnb_last = bb = bnloss_last = lossi += 1return w, bif __name__ == "__main__":print("to solve classification problem")np.random.seed(5)G1, G2 = getData2()fig, ax = plt.subplots()ax.scatter(G1['X'], G1['Y'], color="C0")ax.scatter(G2['X'], G2['Y'], color="C1")ax.plot(np.array([50,50]), np.array([0,100]))ax.plot(np.array([0,100]), np.array([50,50]))w, b = -6, 99x = np.arange(0, 100, 1)y = w * x + bax.plot(x, y, color="C2",label="original")w_f, b_f = SVMFit(G1, G2)y_f = w_f * x + b_fax.plot(x, y_f, color="C3",label="final")ax.legend()ax.set_xlim(xmin = 0, xmax = 100)ax.set_ylim(ymin = 0, ymax = 100)fig.show()# x,y,w,b# print("距离是:{:.2f}".format(calDistance(1,0,1,0)))

python 实现简单的SVM分类器相关推荐

  1. python支持向量机分类器怎么用_可视化SVM分类器开源实现的python代码

    如下的Python代码是可视化SVM分类器开源实现的python代码.这是个小巧又简单,却不一定满足大家高效要求的具有可视化功能的SVM分类器源码.是采用标准python写成的,但如果需要作图功能,则 ...

  2. opencv c++ svm分类器 初学

    c++ 初学者 + opencv初学者 写了一个简单的svm分类器,由于有很多不是很了解,所以代码注释得比较详细 svm 直接上代码吧 大家将就看 #include "pch.h" ...

  3. 用Python实现一个SVM分类器策略

    2019独角兽企业重金招聘Python工程师标准>>> 支持向量机(SVM)是什么意思? 正好最近自己学习机器学习,看到reddit上 Please explain Support ...

  4. 人工智能学习笔记 实验五 python 实现 SVM 分类器的设计与应用

    学习来源 [机器学习]基于SVM人脸识别算法的一些对比探究(先降维好还是先标准化好等对比分析)_○( ^皿^)っHiahiahia-的博客-CSDN博客 实验原理 有关svm原理 请移步该篇通俗易懂的 ...

  5. 菜鸟之路——机器学习之SVM分类器学习理解以及Python实现

    SVM分类器里面的东西好多呀,碾压前两个.怪不得称之为深度学习出现之前表现最好的算法. 今天学到的也应该只是冰山一角,懂了SVM的一些原理.还得继续深入学习理解呢. 一些关键词: 超平面(hyper ...

  6. SVM分类器用python

    1.1题目的主要研究内容 了解分类器的原理和算法流程.利用现有的任意公开数据集实现了分类器分类,并利用评价标准对分类结果进行分析评判. 我在本组中主要负责资料的查找以及PPT讲解部分. 理解SVM的工 ...

  7. Python SVM分类器 XGBOOST分类器 文本情绪分析

    Python SVM分类器 XGBOOST分类器 文本情绪分析 微博网民情绪识别比赛 目录 Python SVM分类器 XGBOOST分类器 文本情绪分析 疫情期间网民情绪识别比赛 一:比赛相关事项 ...

  8. SVM分类器原来这么简单

    前 言 SVM,英文全称为 Support Vector Machine,中文名为支持向量机,由数学家Vapnik等人早在1963年提出.在深度学习兴起之前,SVM一度风光无限,是机器学习近几十年来最 ...

  9. Python构建SVM分类器(线性)

    1.SVM建立线性分类器 SVM用来构建分类器和回归器的监督学习模型,SVM通过对数学方程组的求解,可以找出两组数据之间的最佳分割边界. 2.准备工作 我们首先对数据进行可视化,使用的文件来自学习书籍 ...

最新文章

  1. c#操作Excel整理总结
  2. nautilus出现一闪而过现象
  3. Android--Activity四种启动模式
  4. 读取文件卡顿_奥睿科IV300固态硬盘评测:35克,读取超900M/s?
  5. python基础学习(八)元组
  6. 剑指 Offer II 056 二叉搜索树中两个节点之和
  7. 软件工程第四次作业——例行报告
  8. 苹果运营商中移动苹果互盼“在一起” 最快Q3推4G移动版iPhone
  9. 语音测试,串口和adb
  10. zend studio php 接口,通过PHP环境ZendStudio轻松实现webservice接口
  11. OSM获取城市路网数据及其矢量化
  12. Adobe Photoshop CC 2019 精简版
  13. 区分LPCTSTR和LPTSTR和char *
  14. 端粒效应《The Telemere Effect》程序员的养生指南(二)情绪、思维模式与健康
  15. 学校作业-Usaco DP水题
  16. autojs怎么暂停脚本_三国群英传8脚本已暂停名片点赞autojs
  17. GB28181对接摄像机/NVR视频流
  18. pm-UED、数据分析
  19. mac os x 文件权限管理
  20. 短信接口调用-手机短信,验证码

热门文章

  1. 苹果描述的iPad难道是“四不象”?.
  2. linux 及Ubuntu的安装 202011 29
  3. 【vue案例】vue实现tab选项卡
  4. HttpEntity的类型及其使用
  5. 看懂 Serverless,这一篇就够了
  6. 985高校的学生“夫妻宿舍”令人羡慕,网友:已婚学子的读博福利
  7. 深度学习之DCGAN
  8. CANoe-以DHCP为例学习如何移植工程
  9. PyQt5 工具箱
  10. rocksdb原理_看图了解RocksDB