范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

手撕SVM(公式推导代码实现)(三)

  前言
  前面我们进行了很多的理论性研究,下面我们开始用代码进行实现。编程求解线性SVM可视化数据集import matplotlib.pyplot as plt import numpy as np  #读取数据 def loadDataSet(fileName):     dataMat = []; labelMat = []     fr = open(fileName)     for line in fr.readlines(): #逐行读取,滤除空格等         lineArr = line.strip().split("	")         dataMat.append([float(lineArr[0]),float(lineArr[1])]) #添加数据         labelMat.append(float(lineArr[2])) #添加标签     return dataMat,labelMat  #数据可视化 def showDataSet(dataMat,labelMat):     data_plus = []     data_minus = []     for i in range(len(dataMat)):         if labelMat[i] > 0:             data_plus.append(dataMat[i])         else:             data_minus.append(dataMat[i])     data_plus_np = np.array(data_plus) #转换为numpy矩阵     data_minus_np = np.array(data_minus)#转换为numpy矩阵     plt.scatter(np.transpose(data_plus_np)[0],np.transpose(data_plus_np)[1]) #正样本     plt.scatter(np.transpose(data_minus_np)[0],np.transpose(data_minus_np)[1]) #负样本     plt.show()  dataMat,labelMat = loadDataSet("testSet.txt") showDataSet(dataMat,labelMat)
  这个数据集显然线性可分。 应用简化版SMO算法处理小规模数据集
  import random  def selectJrand(i,m):     j=i     while(j==i): #选择一个不等于i的j         j = int(random.uniform(0,m))     return j  def clipAlpha(aj,H,L):     if aj > H:         aj = H     if L > aj:         aj = L     return aj  dataArr,labelArr  =loadDataSet("testSet.txt") labelArr
  [-1.0,
  -1.0,
  1.0,
  -1.0,
  1.0,
  1.0,
  1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  1.0,
  -1.0,
  1.0,
  1.0,
  -1.0,
  1.0,
  -1.0,
  -1.0,
  -1.0,
  1.0,
  -1.0,
  -1.0,
  1.0,
  1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  1.0,
  1.0,
  1.0,
  1.0,
  -1.0,
  1.0,
  -1.0,
  -1.0,
  1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  1.0,
  1.0,
  1.0,
  1.0,
  1.0,
  -1.0,
  1.0,
  1.0,
  -1.0,
  -1.0,
  1.0,
  1.0,
  -1.0,
  1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  1.0,
  -1.0,
  1.0,
  -1.0,
  -1.0,
  1.0,
  1.0,
  1.0,
  -1.0,
  1.0,
  1.0,
  -1.0,
  -1.0,
  1.0,
  -1.0,
  1.0,
  1.0,
  1.0,
  1.0,
  1.0,
  1.0,
  1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  1.0,
  -1.0,
  1.0,
  1.0,
  1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0,
  -1.0] data = np.mat(dataArr) data[2,:]matrix([[ 7.55151, -1.58003]])
  可以看出来,这里使用的类别标签是-1和1
  SMO算法的伪代码: 创建一个alpha向量并将其初始化为 0 向量  当迭代次数小于最大迭代次数时 (外循环)      对数据集中的每个数据向量 (内循环):     如果该数据向量可以被优化:         随机选择另外一个数据向量         同时优化这两个向量         如果两个向量都不能被优化, 退出内循环 如果所有向量都没被优化, 增加迭代数目, 继续下一次循环#简化版SMO算法 def smoSimple(dataMatIn,classLabels,C,toler,maxIter):     dataMatrix = np.mat(dataMatIn); labelMat = np.mat(classLabels).transpose()     b = 0; m,n = np.shape(dataMatrix)     alphas = np.mat(np.zeros((m,1)))#初始化alpha参数,设置为0     iterSmo = 0 #初始化迭代次数     while(iterSmo < maxIter):         alphaPairsChanged = 0#用于记录alpha是否已经进行优化         #步骤1. 计算误差Ei         for i in range(m):             fXi = float(np.multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[i,:].T)) + b             Ei = fXi - float(labelMat[i])             if ((labelMat[i]*Ei < -toler) and (alphas[i] < C)) or ((labelMat[i]*Ei > -toler) and (alphas[i] > 0)):                 j = selectJrand(i,m)                 #步骤1. 计算误差Ej                 fXj = float(np.multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[j,:].T)) + b                 Ej = fXj - float(labelMat[j])                 #保存更新前的alpha值,使用浅拷贝                 alphaIold = alphas[i].copy()                 alphaJold = alphas[j].copy()                 #步骤2:计算上界H和下界L                 if (labelMat[i] != labelMat[j]):                     L = max(0,alphas[j] - alphas[i])                     H = min(C,C + alphas[j] - alphas[i])                 else:                     L = max(0,alphas[j] + alphas[i] - C)                     H = min(C,alphas[j] + alphas[i])                 if L==H: print("L==H"); continue                 #步骤3:计算eta                 eta = 2.0 * dataMatrix[i,:]*dataMatrix[j,:].T - dataMatrix[i,:]*dataMatrix[i,:].T - dataMatrix[j,:]*dataMatrix[j,:].T                 if eta >=0 : print("eta>=0");continue                 #步骤4:更新alpha_j                 alphas[j] -= labelMat[j]*(Ei-Ej)/eta                 #步骤5:修剪alpha_j                 alphas[j] = clipAlpha(alphas[j],H,L)                 if (abs(alphas[j] - alphaJold) < 0.00001) : print("j not moving enough") ; continue                 #步骤6:更新alpha_i                 alphas[i] += labelMat[j]*labelMat[i]*(alphaJold - alphas[j])                 #步骤7:更新b_1和b_2                 b1 = b - Ei - labelMat[i]*(alphas[i] - alphaIold)*dataMatrix[i,:]*dataMatrix[i,:].T                  - labelMat[j]*(alphas[j] - alphaJold)*dataMatrix[i,:]*dataMatrix[j,:].T                 b2 = b - Ej - labelMat[i]*(alphas[i] - alphaIold)*dataMatrix[i,:]*dataMatrix[j,:].T                  - labelMat[j]*(alphas[j] - alphaJold)*dataMatrix[j,:]*dataMatrix[j,:].T                 #步骤8:根据b_1和b_2更新b                 if (0 < alphas[i]) and (C > alphas[i]) :                     b = b1                 elif (0 < alphas[j]) and (C > alphas[j]):                     b = b2                 else:                     b = (b1 + b2)/2.0                 #统计优化次数                 #如果程序执行到for循环的最后一行都不执行continue语句,那么就已经成功地改变了一对alpha,同时可以增加alphaPairsChanged的值                 alphaPairsChanged += 1                 #打印统计信息                 print("第%d次迭代 样本:%d, alpha优化次数:%d" % (iterSmo,i,alphaPairsChanged))         #更新迭代次数         #在for循环之外,需要检查alpha值是否做了更新,如果有更新则将iterSmo设为0后继续运行程序。只有在所有数据集上遍历maxIter次,且不再发生任何alpha修改之后,程序才会停止并退出while循环         if (alphaPairsChanged == 0): iterSmo += 1         else:             iterSmo = 0         print("迭代次数:%d" % iterSmo)     return b,alphas  b,alphas = smoSimple(dataArr,labelArr,0.6,0.001,500)
  L==H
  第0次迭代 样本:1, alpha优化次数:1
  第0次迭代 样本:3, alpha优化次数:2
  第0次迭代 样本:5, alpha优化次数:3
  L==H
  第0次迭代 样本:8, alpha优化次数:4
  L==H
  j not moving enough
  j not moving enough
  L==H
  L==H
  j not moving enough
  L==H
  第0次迭代 样本:30, alpha优化次数:5
  第0次迭代 样本:31, alpha优化次数:6
  L==H
  L==H
  第0次迭代 样本:54, alpha优化次数:7
  L==H
  L==H
  第0次迭代 样本:71, alpha优化次数:8
  L==H
  L==H
  L==H
  第0次迭代 样本:79, alpha优化次数:9
  L==H
  第0次迭代 样本:92, alpha优化次数:10
  j not moving enough
  L==H
  迭代次数:0
  第0次迭代 样本:1, alpha优化次数:1
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  L==H
  L==H
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  L==H
  j not moving enough
  L==H
  L==H
  j not moving enough
  j not moving enough
  第0次迭代 样本:37, alpha优化次数:2
  第0次迭代 样本:39, alpha优化次数:3
  第0次迭代 样本:52, alpha优化次数:4
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  第0次迭代 样本:71, alpha优化次数:5
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  迭代次数:0
  j not moving enough
  j not moving enough
  j not moving enough
  第0次迭代 样本:8, alpha优化次数:1
  L==H
  j not moving enough
  第0次迭代 样本:23, alpha优化次数:2
  L==H
  j not moving enough
  j not moving enough
  L==H
  j not moving enough
  j not moving enough
  j not moving enough
  第0次迭代 样本:39, alpha优化次数:3
  L==H
  j not moving enough
  第0次迭代 样本:52, alpha优化次数:4
  j not moving enough
  第0次迭代 样本:55, alpha优化次数:5
  L==H
  L==H
  L==H
  L==H
  L==H
  j not moving enough
  第0次迭代 样本:79, alpha优化次数:6
  第0次迭代 样本:92, alpha优化次数:7
  迭代次数:0
  j not moving enough
  L==H
  j not moving enough
  j not moving enough
  L==H
  j not moving enough
  第0次迭代 样本:23, alpha优化次数:1
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  L==H
  L==H
  第0次迭代 样本:51, alpha优化次数:2
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  L==H
  第0次迭代 样本:69, alpha优化次数:3
  L==H
  j not moving enough
  第0次迭代 样本:94, alpha优化次数:4
  j not moving enough
  j not moving enough
  迭代次数:0
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  j not moving enough
  ...
  迭代次数:497
  j not moving enough
  j not moving enough
  j not moving enough
  迭代次数:498
  j not moving enough
  j not moving enough
  j not moving enough
  迭代次数:499
  j not moving enough
  j not moving enough
  j not moving enough
  迭代次数:500 b matrix([[-3.83785102]])  alphas[alphas>0] matrix([[0.1273855 , 0.24131542, 0.36872064]])  np.shape(alphas[alphas>0]) (1, 3)  for i in range(100):     if alphas[i] > 0.0:         print(dataArr[i],labelArr[i]) [4.658191, 3.507396] -1.0 [3.457096, -0.082216] -1.0 [6.080573, 0.418886] 1.0  #分类结果可视化 def showClassifer(dataMat, w, b):     #绘制样本点     data_plus = []                                  #正样本     data_minus = []                                 #负样本     for i in range(len(dataMat)):         if labelMat[i] > 0:             data_plus.append(dataMat[i])         else:             data_minus.append(dataMat[i])     data_plus_np = np.array(data_plus)              #转换为numpy矩阵     data_minus_np = np.array(data_minus)            #转换为numpy矩阵     plt.scatter(np.transpose(data_plus_np)[0], np.transpose(data_plus_np)[1], s=30, alpha=0.7)   #正样本散点图     plt.scatter(np.transpose(data_minus_np)[0], np.transpose(data_minus_np)[1], s=30, alpha=0.7) #负样本散点图     #绘制直线     x1 = max(dataMat)[0]     x2 = min(dataMat)[0]     a1, a2 = w     b = float(b)     a1 = float(a1[0])     a2 = float(a2[0])     y1, y2 = (-b- a1*x1)/a2, (-b - a1*x2)/a2     plt.plot([x1, x2], [y1, y2])     #找出支持向量点     for i, alpha in enumerate(alphas):         if abs(alpha) > 0:             x, y = dataMat[i]             plt.scatter([x], [y], s=150, c="none", alpha=0.7, linewidth=1.5, edgecolor="red")     plt.show() #计算w def get_w(dataMat, labelMat, alphas):     alphas, dataMat, labelMat = np.array(alphas), np.array(dataMat), np.array(labelMat)     w = np.dot((np.tile(labelMat.reshape(1, -1).T, (1, 2)) * dataMat).T, alphas)     return w.tolist() w = get_w(dataMat,labelMat,alphas) showClassifer(dataMat,w,b)

被汉化后的NBA球星,霍华德吃烧烤,奥尼尔玩起了麻将中国球迷对于NBA的热爱,可以说仅次于美国。只有在NBA有名气,或者有足够的影响力,那才有资格举行中国行,要不然即便是来了也没人搭理。来到中国,肯定就要入乡随俗了,我们中国的文化也与世界为敌!勇士这是犯了什么众怒?除自己人外没人支持他们夺冠西部半决赛中,灰熊头号球星莫兰特在面对普尔的防守时膝部受伤,并缺席了后面的比赛。最终他们也24不敌勇士无缘西决。对于这次受伤,灰熊上下一直耿耿于怀,一方面认为普尔的防守动作有故意之数字经济时代国际税收规则改革逻辑及政策重点丨环球视野数字经济快速发展改变了传统的经济运行生态,促使税基转移和利润侵蚀等问题突出,催生了国际税收规则改革诉求。尽管世界主要国家认识到推行国际税收规则改革的必要性,但不同国家经济发展水平及太空出差近日启程神十四航天员将解锁哪些新关卡?中新网北京6月3日电(马帅莎)目前,神舟十四号航天员乘组出征太空进入倒计时。与神舟十三号飞行任务相比,神舟十四号航天员乘组将解锁哪些新的关卡?此次任务有何看点?国际宇航联空间运输委1400光年外传来一声叹息,这声叹息,预示着我们太阳的死亡我们的太阳系从何而来,又去往何处呢?这个问题起初困扰了科学家很久,不过随着天文技术的发展,我们似乎发现了一个宇宙的轮回。距离我们1400光年,有一片美丽的星云ESO57724,它呈神舟十四号发射时间已定!航天员乘组名单公布,陈冬刘洋蔡旭哲神舟十四号是我国载人航天工程发射的第十四艘飞船,计划将于2022年6月发射,3名航天员进驻核心舱并在轨驻留6个月。5月10日,为神舟十四号运送粮草的天舟四号货运飞船发射升空并顺利完一时热?大商机?露营食品,真有利可图?露营迎来爆发式增长,食品行业的机会点在哪里?如何响应市场需求?文GiselleYin来源Foodaily每日食品(IDfoodaily)这个春天,你去露营了吗?露营可以说是近期最受杜兰特纳什出卖篮网利益首次解密全程被人利用助攻勇士杀回总决赛旧金山纪事报记者乔恩舒尔茨最新长篇报道,通过采访勇士队总经理鲍勃迈尔斯老板乔拉科布和勇士队球员,回顾勇士队用三年时间重回总决赛的历程,这个过程可以简单描述为,凯文杜兰特和篮网队助攻大量苹果用户反映IOS15。5偷跑流量,谁说苹果稳定没bug?不知道是什么原因,iOS14iOS15这两代系统总是会出现各种莫名其妙的问题,但这一次更严重,因为涉及到流量资费,会给用户造成金钱损失。这两天IOS15。5偷跑流量的事闹得沸沸扬扬勇士训练日专访!维金斯格林摊牌绿军,卢尼展杀器,库里不服老明天是勇士和凯尔特人的总决赛第一场比赛了,这种情况下,维金斯第一时间喊话凯尔特人球队需要我得分,我就去得分,球队需要我防守,我就去防守,抢篮板。这样的话语非常明确了,只要球队要求什张常宁点评中国女排比赛盛赞王媛媛,球迷年轻主攻得向宝宝学习主攻张常宁点评了中国女排世联赛首秀。虽然因为个人原因没能参加比赛,但是张常宁始终关注队友们的表现。比赛结束之后,张常宁也第一时间对中国女排的表现进行了肯定。听听张常宁怎么说。张常宁
最新发布!乐山2022特色研学产品线路第一期上线11月22日,2022乐山乐游嘉学研学品牌培育及成渝乐推广活动在峨眉举办。活动现场,乐山师范学院吴薇老师为大家发布了2022年乐游嘉学全新打造的6条特色研学产品线路。接下来我们将分秘境云南独木也成林到处呈现大美景致的秘境云南,独树成林也是一绝。提到独树成林,想必你一定会想起云南省西双版纳傣族自治州勐海县打洛镇的那棵大榕树。西双版纳因独特的地理位置和雨林气候条件,适合榕树生长,甘肃青海交界有座张掖市,目前仅为五线城市,却是理想的旅游胜地秋日生活打卡季提起甘肃省,很多人首先想到的是敦煌酒泉,或者省会兰州市,其实甘肃的甘字来源于曾经叫甘州的张掖市。张掖市位于河西走廊狭小的通道之中,东北与内蒙古自治区交界,西南和青海省陕西8个乡村入选2022年中国美丽休闲乡村日前,农业农村部公布2022年中国美丽休闲乡村名单,共计255个乡村入选。陕西有8个乡村入选,其中2个为农家乐特色村。陕西入选的8个乡村是安康市平利县老县镇蒋家坪村商洛市镇安县青铜长白山绝美秘境穿梭在雾凇里的漂流长白山风光无限,不仅有恢弘大气的天池和峡谷,还有绝美秘境雾凇,一江寒水清,两岸琼花凝。自长白山天池流下的水,寒冷的冬季也不会结冰。沆砀雾气间,漂流于水上,顺水流动,伴着雾凇,一秒拉一滴血能验癌?白藜芦醇抗衰老?这些漂洋过海的骗局,需避开注重养生本身是没有错的,现代人能够逐渐的明白养生重要性,是件值得开心的事情,可在养生过程中,有些养生骗局,还是应该及时避开的,以免破财了还不能消灾。正确养生才能给身体带来好处,但若00后的第一个IPO来了!感谢核酸检测,但招股书却闹笑话了小时候,许多人都有过一个不切实际的幻想如果全国人民每个人给我一块钱,我就能赚到14亿。没想到核酸企业居然做到了,而且一做就是三年。这让不少踏入这个赛道的企业迅速催肥。近日,趁着核酸小雪(散文)又到了小雪节气,雪没有如约而来。温煦的阳光拂照着每条街巷,暖暖地。读了一首诗,其中一句我理解雪,它不想落下,它想停在深深的天空。是啊,世上万物都有惯性,也或者可以说成是惰性。每常习喜迎小雪,向暖而行,一切都是最好的安排摄影师张海洋图片来源图虫北风呼啸,冷雨淅沥,黄叶飘零,似乎一转眼,老天就收走了所有的柔情蜜意,将萧杀和季节的寒凉赐予风雨中漂泊的人们。穿行在城市的柏油大道上,看着片片黄叶在风中萧瑟羊肉,您自己真的适合常吃吗?治未病,得健康,掌握收藏五形人体质,内涵人体先天阴阳寒热量比,什么体质有什么气质,什么体质得什么病什么体质吃什么饭,什么体质用什么方。调体质,护健康,得长寿。体质秘语羊肉,古称羖(g,黑色公羊阄割羊山羊)明日小雪气郁的时节到了,记得做好这4件事,疏通身体平安入冬明日小雪,冬天第二个节气。北方天气越来越冷了,经常有寒潮雾霾,南方开始新一轮的阴雨天气,给人感觉阴阴郁郁的,而且从小雪节气的三个物候,我们可以看出,这个节气天地不通闭塞成冬!小雪节