機器學習基石 (Machine Learning Foundations) 作业1 Q18-20的C++实现(pocket)

本文介绍了如何使用C++实现Coursera上台湾大学機器學習基石课程的作业1,特别是Pocket PLA算法。讨论了在不同迭代次数和是否采用贪心策略下,对测试样本的平均错误率的影响,并提供了实验结果。
摘要由CSDN通过智能技术生成

        大家好,我是Mac Jiang,今天和大家分享Coursera---台湾大学---機器學習基石 (Machine Learning Foundations)---作业1:Q18-20的C++实现。虽然我的代码得到了较为正确的结果,但是肯定不是最好的,如果各位博友有更好的实现思路,请留言指正,谢谢!希望我的博客能给您带来一些学习上的帮助!Q15-17的实现过程已经在:http://blog.csdn.net/a1015553840/article/details/50979434中给出,有需要的博友可以前往阅读。


其他解答看汇总帖:http://blog.csdn.net/a1015553840/article/details/51085129


        虽然已经有很多博友给出了这个算法的Phython实现过程,说实话,利用Phython的实现比C++来的简答,但是不是每位博友都会Phython,所以在这里提供C++的实现过程,以备各位博友的不时之需!


        好的,话不多说。这次主要任务是实现PLA的pocket过程,前面博客提到,当训练样本是线性可分的,我们用PLA可以很快的实现样本的分类。但是如果样本不是线性可分的,那么我们就需要对PLA进行改进。这里采用的是贪心算法,他的思想是把当前最好的分类线保存在口袋中,然后对曲线进行修正得到新的线。如果得到新的线对训练样本的错误率更小,那么我们把这条线保存下来。继续运行程序,直到达到足够的迭代次数。

0.初始化口袋曲线w

{

    1.寻找分类错误点(x,y)

    2.修正错误:w(t+1) = w(t) + y*x

    3.如果w(t+1)对训练样本的错误率比口袋里的w更小,则用w(t+1)替代w

}until(达到足够的迭代次数)


        如果知道训练样本D是线性可分的,则运行PLA比较好ÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值