已有部分理论基础,先运行出来再说:
第一部分:
主要参考:随机森林的原理分析及Python代码实现:https://blog.csdn.net/flying_sfeng/article/details/64133822/(Python实现)
脉络:
随机森林--->集成学习(通过构建并结合多个分类器来完成学习任务。通过将多个学习器进行结合,常可获得比单一学习器更好的泛化性能)--->投票法产生结果(要获得好的集成,个体学习器应“好而不同”,要有一定的“准确性”,即不能太差,并且要有“多样性”,即具有差异。)--->目前的集成学习方法大致可分为两大类,即个体学习器之间存在强依赖关系,必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系,可同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging和“随机森林”(Random Forest)
随机森林就是对决策树的集成,但有两点不同:
(1)采样的差异性:从含m个样本的数据集中有放回的采样,得到含m个样本的采样集,用于训练。这样能保证每个决策树的训练样本不完全一样。
(2)特征选取的差异性:每个决策树的n个分类特征是在所有特征中随机选择的(n是一个需要我们自己调整的参数)
随机森林需要调整的参数有:
(1) 决策树的个数
(2) 特征属性的个数
(3) 递归次数(即决策树的深度)
代码实现流程:
(1) 导入文件并将所有特征转换为float形式
(2) 将数据集分成n份,方便交叉验证
(3) 构造数据子集(随机采样),并在指定特征个数(假设m个,手动调参)下选取最优特征
(4) 构造决策树
(5) 创建随机森林(多个决策树的结合)
(6) 输入测试集并进行测试,输出预测结果
进一步学习:
从头开始:用Python实现随机森林算法:https://www.tuicool.com/articles/iiUfeim(Python实现)
数据的来源+实现原理(与上一篇对照看)
第二部分:手写识别的运行
【没成功,主要因为不知道该把数据放在哪,同时也不会改路径。恳请各位大佬帮忙解答,非常感谢】
数据下载:http://yann.lecun.com/exdb/mnist/
主要参考:
RandomForest 随机森林总结:https://www.cnblogs.com/hrlnw/p/3850459.html
OpenCV:随机决策森林CvRTrees使用实例:https://blog.csdn.net/u010002704/article/details/43829573?utm_source=blogxgwz1(C++实现)
OpenCV中随机森林的实现与字符识别例子:https://blog.csdn.net/holybin/article/details/25708347(C++实现)
随机森林算法(RandomForest)实现MNIST手写体数字识别:https://blog.csdn.net/Barry_J/article/details/81902266(C++实现)
详解 MNIST 数据集:https://blog.csdn.net/simple_the_best/article/details/75267863(Python实现)
Scikit-Learn学习笔记——用随机森林识别手写数字:https://blog.csdn.net/jasonzhoujx/article/details/81911799(Python实现)
在Kaggle手写数字数据集上使用Spark MLlib的RandomForest进行手写数字识别:https://blog.csdn.net/LXYTSOS/article/details/51387355(没看懂)
scikit-learn中随机森林使用详解:https://blog.csdn.net/jeryjeryjery/article/details/78882661(简单,但没看懂)
没成功,主要因为不知道该把数据放在哪,同时也不会改路径。恳请各位大佬帮忙解答,非常感谢