机器学习基石作业一PLA算法
来源:互联网 发布:mac自带的文本编辑器 编辑:程序博客网 时间:2024/05/22 14:59
本文实现机器学习基石课程作业一种关于PLA算法的实现,算法由python实现。
机器学习基石作业一中15-17题,pla算法是有错才更新,直到算法在看到的数据上全部正确它就会停下来(当然前提是数据线性可分才行)。
第15题的题干如下:
16题如下:
17题如下:
从上面的描述可以看出,15题仅仅需要执行一次就行,而16,17则需要执行2000次,且每次的数据需要打乱,17需要将学习率设置为0.5,这三道题均是考察更新的次数。
算法实现如下:
import numpy as npimport os#读取数据,filepath为一个文件路径,load_Data函数返回两个矩阵x,ydef load_Data(filepath): file = open(filepath) lines = file.readlines() sampleNum = len(lines) x = np.zeros((sampleNum,5)) y = np.zeros((sampleNum,1)) print(y.shape) for i in range(sampleNum): items = lines[i].strip().split('\t') y[i,0] = float(items[1]) items = items[0].strip().split(' ') x[i,0] = 1 for j in range(0,4): x[i,j+1] = items[j] return x,y#sign函数,参数mat为w*x的一个矩阵def sign(mat): sampleNum= mat.shape[0] for i in range(sampleNum): if(mat[i][0]>0): mat[i][0] = 1 else: mat[i][0] = -1 return mat#beta表示每次更新时候的学习率def pla(x,y,beta): w = np.zeros((5,1)) sampleNum = len(x) #设置一个标识,flag用来表示样本中时候有分类错误的,刚开始时置为False flag = False #count计数器,用来统计更新了多少次 count =0 while(flag==False): #当全部都被正确分类的时候,就可以跳出while循环 for i in range(sampleNum): if(flag==False): pre_y = sign(np.dot(x,w)) if(pre_y[i]==y[i]): flag = True else: #有错才更新 w = w+beta*y[i][0]*np.mat(x[i]).T count=count+1 flag = False return count if __name__ =='__main__': #将环境切换为当前路径 os.chdir(r"C:\Users\bs\Desktop") #文件 filepath = 'assignment1.txt' x,y = load_Data(filepath) #一个列表 index = [i for i in range(len(x))] #ssum表示总共出错的次数 ssum = 0 #updates表示要重复运行的次数 updates =2000 #学习率 beta =0.5 for i in range(updates): X = x[:,:] Y = y[:,:] #将上面的列表打乱 np.random.shuffle(index) #得到相应打乱的x,y data = X[index] label = Y[index] count = pla(data,label,beta) print(count,'第',i,'次') ssum = ssum+count #计算平均更新次数 averageTimes = ssum/updates print(averageTimes,"averagetimes")
阅读全文
0 0
- 机器学习基石作业一PLA算法
- 机器学习基石 作业1 实现PLA和Pocket算法
- Coursera课程-机器学习基石作业一Q18-Q20(pocket on D算法 for PLA/C++ edition)
- 机器学习基石作业1-17-PLA 的c++实现
- 《机器学习基石》作业一
- 机器学习基石PLA算法c++语言实现
- PLA算法Java实现——机器学习基石
- 机器学习基石第一讲:PLA
- 机器学习基石 2.3 Guarantee of PLA
- 机器学习基石 2.4 More about PLA
- 机器学习基石---第二周PLA
- 机器学习基石 4.5 作业一
- 机器学习基石—作业1(15-20题PLA编程)
- 台大林轩田《机器学习基石》学习笔记:线性模型一(PLA/pocket、Linearregression )
- 台大林轩田《机器学习基石》学习笔记5:线性模型一(PLA/pocket、Linearregression )
- PLA算法总结——Percetron Learning Algorithm(机器学习基石2)
- [机器学习][1]--PLA算法
- 机器学习基石学习笔记(1)-PLA
- 204. Count Primes
- NTOJ 91 阶乘之和
- openstack搭建--4--控制节点安装配置glance
- 大数据
- HTML CSS: the language of web-getting to know HTML
- 机器学习基石作业一PLA算法
- 生物信息脚本练习(2)求反向互补序列
- win2008r2虚拟机架设asp.net步骤
- TCP 三次握手 与 四次分手
- 基于UDP广播的回射服务器
- C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承
- CSDN-markdown编辑器模板
- CSS3 DIV自适应宽度、水平居中的实现方法
- Huffman