本文转自:http://blog.youkuaiyun.com/net_wolf_007/article/details/51794254
前面两章对数据进行了简单的特征提取及线性回归分析。识别率已经达到了85%, 完成了数字识别的第一步:数据探测。
这一章要做的就各种常用机器学习算法来对数据进行测试,并总结规律,为后续进一步提供准确率作准备。
这单选取的算法有:(后面有时间再对每个算法单独作分析总结介绍):
- 线性回归
- 支持向量机
- 决策树
- 朴素贝叶斯
- KNN算法
- 逻辑回归
以测试样本的最后一千个数作为测试样例,其它的作为训练样例。 数据结果为测试样例的识别结果。
使用到的统计概念有:precision,recall及f1-score(参见文章
机器学习结果统计-准确率、召回率,F1-score)
先看测试总结数据,后面会提供完整代码及数据提供。使用的机器学习算法库为:
http://scikit-learn.org/
算法测试数据
对算法进行测试,测试数据如下:
测试算法 | 中文 | precision | recall | f1-score | 样本数 | 所花时间(秒) |
LinearRegression | 线性回归 | 0.84 | 0.84 | 0.84 | 1000 | 2.402 |
SVC | 支持向量机 | 0.85 | 0.85 | 0.85 | 1000 | 22.72 |
DecisionTree | 决策树 | 0.81 | 0.81 | 0.81 | 1000 | 0.402 |
Bayes | 朴素贝叶斯 | 0.78 | 0.77 | 0.77 | 1000 | 0.015 |
KNN | KNN算法 | 0.86 | 0.86 | 0.86 | 1000 | 0.374 |
LogisticRegression | 逻辑回归 | 0.82 | 0.82 | 0.82 | 1000 | 2.419 |
总结:
算法识别结果想差不多,除了贝叶斯之外都在80%以上。
时间花销上SVC算法花得最多。而贝叶斯花得最小。
在手写识别上,如果样本量够多,相比之下KNN算法会更确。
分析:
由于贝叶期是基于概率统计的算法。 计算时间会很快。而由于缺乏对特征之间的关心的支持,识别率会弱一些。
各数字识别统计
线性回归 | 支持向量机 | 决策树 | 基本贝叶斯算法 | KNN算法 | 逻辑回归 | |||||||||
数字 | recall | precision | recall | precision | recall | precision | recall | precision | recall | precision | recall | precision | recall 平均 | precision平均 |
0 | 0.93 | 0.83 | 0.93 | 0.88 | 0.92 | 0.9 | 0.92 | 0.88 | 0.95 | 0.87 | 0.95 | 0.89 | 0.933 | 0.875 |
1 | 0.96 | 0.91 | 0.97 | 0.97 | 0.96 | 0.96 | 0.97 | 0.84 | 0.99 | 0.98 | 0.94 | 0.94 | 0.965 | 0.933 |
2 | 0.82 | 0.82 | 0.84 | 0.76 | 0.8 | 0.74 | 0.59 | 0.73 | 0.81 | 0.81 | 0.73 | 0.76 | 0.765 | 0.770 |
3 | 0.79 | 0.72 | 0.75 | 0.74 | 0.71 | 0.74 | 0.71 | 0.61 | 0.81 | 0.71 | 0.73 | 0.67 | 0.750 | 0.698 |
4 | 0.68 | 0.87 | 0.73 | 0.84 | 0.7 | 0.77 | 0.64 | 0.83 | 0.75 | 0.85 | 0.68 | 0.78 | 0.697 | 0.823 |
5 | 0.73 | 0.78 | 0.75 | 0.8 | 0.66 | 0.73 | 0.67 | 0.63 | 0.78 | 0.84 | 0.8 | 0.8 | 0.732 | 0.763 |
6 | 0.93 | 0.93 | 0.92 | 0.88 | 0.89 | 0.88 | 0.91 | 0.84 | 0.92 | 0.91 | 0.89 | 0.91 | 0.910 | 0.892 |
7 | 0.89 | 0.83 | 0.88 | 0.85 | 0.78 | 0.72 | 0.74 | 0.78 | 0.87 | 0.88 | 0.86 | 0.82 | 0.837 | 0.813 |
8 | 0.83 | 0.83 | 0.83 | 0.85 | 0.78 | 0.79 | 0.82 | 0.77 | 0.81 | 0.9 | 0.83 | 0.8 | 0.817 | 0.823 |
9 | 0.82 | 0.86 | 0.82 | 0.85 | 0.86 | 0.83 | 0.72 | 0.8 | 0.84 | 0.81 | 0.79 | 0.8 | 0.808 | 0.825 |
数据总结:
- 整体数据中,1,6的识别率最高,而2, 3, 4, 5识别率最低。说明数据中比较难区分2, 3, 4, 5的属性。
- 注意线性回归中,0的recall 大于precision10个百分点,意味着把别的数据错误识别成0成的较多。
- 4中 recall小于precision 20%面分则说明识别4的特征不明显。
终合上面分析结果得到后续计划:
- 继续分析数据,寻找更有用的特征值。
- 使用KNN来作为数据分析算法。
测试代码
输出结果