用libsvm做模式识别

需求:能够识别的手拿着手机是否按照特定路径晃动

 

实现步骤:

第1天:与其它同事讨论需求,可行性,分工,最终确定由我在系统框架层实现识别算法,给应用层提供广播事件,开会完立即着手开发数据采集工具,选用工具为python+opencv,数据来源为g-sensor的原始数据,幸运的是这些数据在现有的log里面已经存在,只需要做简单的字符串过滤就能得到,一个小时后,采集工具雏形完成,能够通过曲线很直观的观测到传感器3个坐标轴的数据变化,为后期数据分析,采集,学习,验证打下了很好的基础,做了几个简单的实验,通过观察没有明显的规律,看来得借助统计识别

 

第2天:通过对神经网和svm两者的比较,选择的更适合的svm来做后期的模式识别,上网,寻找可用的svm库,通过比对,选择了易用的libsvm。从数据规律上得出数据采集的算法,当数值变化超过某一阈值则进入采集,对应的用户行为是开始晃动手机,当数值变化较小的时候,用户停止晃动,则采集结束,同时通过键盘明确告知当前的这组数据的模式类别,完成一次采集,将采集的数据按照libsvm的要求格式保存。保存了10多组特征数据,执svm行命令行进行训练,再用命令行验证,100%的识别率,比较欣慰,但将预测代码放入python中时,发现结果完全错误,不解

 

第3天:通过对简单的svm识别过程分析,发现libsvm文档中介绍的数据矢量都是从1开始标注,而用python编程实现svm的学习,识别过程却是从0开始,文档中未曾提及(我没仔细看),所以有了识别全错的结果,动手将采集系统的保存模块重新写过,重新采集,重新识别,成功。之后进行大量样本的采集,然后识别,识别率下降到了94%,还好能接受,发邮件,向大家广播这个好消息

第4天: boss来了,检查效果,右手效果很好,换左手,发现基本识别不了,汗,解释道,我没做左手的数据采集,boss走了,重新采集数据,左右开弓,重新学习,数据采集量过百,识别率降到93%,前期工作完成

 

后期工作:将svm预测功能放入手机中,使其能够真正使用,现在正在评估java,c语言用哪个好些。

 

你可能感兴趣的:(用libsvm做模式识别)