Flask接口签名sign原理与实例代码浅析
282
2022-09-03
機器學習基石 机器学习基石(Machine Learning Foundations) 作业1 习题解答
最近在cousera上面学习台湾大学的机器学习基石的课程,不过上面的课程都是用英文来进行测试的,做起来总是通过不了,于是在网上搜寻解答方法,最后找到了下面的一个博客,里面记录了 机器学习基石 这门课所有测试的答案,作为参考之用还是十分有用的,下面给出其汇总的网址:
具体链接如下:
1.作业一
(1)作业一课后习题解答:
(2)作业一Q15-17 C++实现(PLA)
(2)作业一Q18-20 C++实现(Pocket PLA)
2.作业二
(1)作业二课后习题解答:
(2)作业二Q16-18 C++实现:
(3)作业二Q19-20 C++实现:
3.作业三
(1)作业三课后习题解答:
(2)作业三Q13-15 C++实现(Linear Regression):
(3)作业三Q18-20 C++实现(Logistic Regression):
4.作业四
(1)作业四课后习题解答:
(2)作业四Q13-15 MATLAB实现(Regularization+Validation):
机器学习基石手写笔记:
关于adaboost的一些个人理解:
====================================================================
作业1 中 15题 Python 代码:
#!/usr/bin/env python3#encoding:UTF-8import urllib.requestL=4train_time=0w=[0]*(L+1)dataList=[]"数据读入"def dataLoad(): global dataList url=" repones=urllib.request.urlopen(url) dataList=repones.readlines() dataList=[(float(v) for v in k.strip().split()) for k in dataList] dataList=[(1.0,)+tuple(k) for k in dataList]#训练过程def train(): global train_time def sign(item): s=0 for k in range(L+1): s+=w[k]*item[k] if(s>0):return 1 else:return -1 def w_change(item): global w for k in range(L+1): w[k]+=item[k]*item[-1] while(True): state=0 for item in dataList: value=sign(item) if(value!=item[-1]): w_change(item) train_time+=1 state=1 if(state==0): breakif __name__=="__main__": dataLoad() train() print(train_time)
结果如下:
给出 权重每次更新时候的 训练数据集误差:
error_1 0.71
error_2 0.29
error_2 0.2375
error_2 0.71
error_2 0.2225
error_2 0.29
error_2 0.2475
error_2 0.685
error_2 0.2575
error_2 0.525
error_2 0.28
error_2 0.1825
error_2 0.2875
error_2 0.1425
error_2 0.68
error_2 0.105
error_2 0.2875
error_2 0.05
error_2 0.5275
error_2 0.0625
error_2 0.4375
error_2 0.1475
error_2 0.25
error_2 0.24
error_2 0.0175
error_2 0.2575
error_2 0.0075
error_2 0.365
error_2 0.1025
error_2 0.3225
error_2 0.0975
error_2 0.1625
error_2 0.1925
error_2 0.065
error_2 0.2275
error_2 0.0125
error_2 0.2175
error_2 0.0025
error_2 0.515
error_2 0.03
error_2 0.1875
error_2 0.025
error_2 0.19
error_2 0.015
error_2 0.2
error_2 0.0
可以,发现每次权重更新后 在数据集的误差不是一直减小的,而是存在着起伏的。但是,由于是线性可分,最终都是会收敛,将所有数据正确分割。
第16题:
#!/usr/bin/env python3#encoding:UTF-8import randomimport urllib.requestL=4train_time=0w=[0]*(L+1)dataList=[]"数据读入"def dataLoad(): global dataList url=" repones=urllib.request.urlopen(url) dataList=repones.readlines() dataList=[(float(v) for v in k.strip().split()) for k in dataList] dataList=[(1.0,)+tuple(k) for k in dataList]#训练过程def train(): global train_time global dataList global w w=[0]*(L+1) def sign(item): s=0 for k in range(L+1): s+=w[k]*item[k] if(s>0):return 1 else:return -1 def w_change(item): global w for k in range(L+1): w[k]+=item[k]*item[-1] while(True): state=0 "打乱顺序" random.shuffle(dataList) for item in dataList: value=sign(item) if(value!=item[-1]): w_change(item) train_time+=1 state=1 if(state==0): breakif __name__=="__main__": dataLoad() for _ in range(2000): train() print(train_time/2000)
结果:
约等于 40 。
第17题:
#!/usr/bin/env python3#encoding:UTF-8import randomimport urllib.requestL=4train_time=0w=[0]*(L+1)dataList=[]"数据读入"def dataLoad(): global dataList url=" repones=urllib.request.urlopen(url) dataList=repones.readlines() dataList=[(float(v) for v in k.strip().split()) for k in dataList] dataList=[(1.0,)+tuple(k) for k in dataList]#训练过程def train(): global train_time global dataList global w w=[0]*(L+1) def sign(item): s=0 for k in range(L+1): s+=w[k]*item[k] if(s>0):return 1 else:return -1 def w_change(item): global w for k in range(L+1): w[k]+=0.5*item[k]*item[-1] while(True): state=0 "打乱顺序" random.shuffle(dataList) for item in dataList: value=sign(item) if(value!=item[-1]): w_change(item) train_time+=1 state=1 if(state==0): breakif __name__=="__main__": dataLoad() for _ in range(2000): train() print(train_time/2000)
答案 仍为 40 。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~