本文是个人学习笔记,该篇主要学习随机森林算法概念,并应用sklearn.ensemble.RandomForestClassifier算法包解决Kaggle入门级Digit Recognizer。

  • 随机森林概述

    • 决策树
    • 随机森林分类过程
  • Python 代码

随机森林概述

随机森林就是用随机方式建立一个决策树森林,随机森林的决策树之间相互独立。因此随机森林可以简单理解为基于决策树算法的一种拓展与改进,主要应用于回归与分类。它也是一种数据降维手段,用于处理缺失值、异常值以及其他数据探索中的重要步骤。

其在分类问题上的基本思想是通过训练样本建立起随机森林,每当新样本进入时,让森林中每颗决策树都对该样本进行分类判断,最终通过投票方式确定其最终类别。

决策树

决策树顾名思义是一种树结构,其每个非叶节点表示一个基于特征属性的测试,每个分支代表该特征属性在某个值域上的输出,而每个叶节点存放一个类别。

决策树进行分类决策的过程就是从根节点开始,测试待分类项中对应该节点的特征属性,然后按照其值选择输出分支,到达新节点重复上述判断步骤,直到到达叶子节点,该叶节点类别即为分类判断结果。

随机森林分类过程

  1. 假设原始训练集共有N个样本,利用重复自抽样有放回地随机抽取出k个新的自助样本集(每个样本集中也有N个样本,由于是有放回随机抽取,因此可能会有重复样本,从而避免过拟合),由此构建k棵分类树(二叉树);
  2. 假设训练样本共有M个属性变量,则在每个节点处随机选取其中m个属性变量,然后在其中选择具有最大信息增益(信息增益表示特征值使得数据集不确定性的下降程度,因此信息增益越大,特征分类能力越强)或具有最小基尼指数(基尼指数表示样本集合的不确定性程度,基尼指数越小,对应的特征分类能力越强)的属性为节点分裂属性,变量分类的阈值通过检查每一个分类点确定;
  3. 每棵树最大限度地生长, 不做任何修剪;
  4. 将生成的k棵分类树组成随机森林,用随机森林分类器对新样本进行判别与分类,最终分类结果按每颗决策树分类的投票确定(在回归问题中,随机森林的输出将会是所有决策树输出的平均值);

Python 代码

import pandas as pd
import numpy as np
import time
from sklearn.ensemble import RandomForestClassifierdef data_load():# 利用pandas读取csv文件内容train_ttl=pd.read_csv('D:\Program files\JetBrains\digit recognizer\Raw data\\train.csv')train_label=pd.DataFrame(train_ttl['label'])train_data=pd.DataFrame(train_ttl.ix[:,1:])test_data=pd.read_csv('D:\Program files\JetBrains\digit recognizer\Raw data\\test.csv')# dataframe归整化test_data[test_data!=0]=1# train_data[train_data!=0]=1m, n = train_data.shape  # 这里似乎因为dataframe太大,用bool判断更改时总会异常跳出,所以选择循环更改,但慢for i in range(m):for j in range(n):if train_data.ix[i, j] != 0:train_data.ix[i, j] = 1return train_data,train_label,test_data#利用Python Sklearn包,进行test样本集分类判别
def rf_classify(traindata,trainlabel,testdata):rf_clf = RandomForestClassifier() #设置函数和参数rf_clf.fit(traindata,trainlabel.values.ravel())#训练Train样本rf_result=rf_clf.predict(testdata)#预测Test样本return rf_resultif __name__=='__main__':start = time.clock()traindata,trainlabel,testdata=data_load()#加载raw datam,n=testdata.shaperesult_labels=rf_classify(traindata,trainlabel,testdata)#将结果转化成Dataframe结构result={}ImageId=np.arange(m)+1result['Label']=result_labelsresult_frame=pd.DataFrame(result,index=ImageId)#导出结果result_frame.to_csv('D:\Program files\JetBrains\digit recognizer\Raw data\\result_rf.csv')end = time.clock()print('总耗时:', (end - start)/60)#1.5小时

学习笔记——Kaggle_Digit Recognizer (Random Forest算法 Python实现)相关推荐

  1. 学习笔记——Kaggle_Digit Recognizer (朴素贝叶斯 Python实现)

    本文是个人学习笔记,该篇主要学习朴素贝叶斯算法概念,并应用sklearn.naive_bayes算法包解决Kaggle入门级Digit Recognizer. 贝叶斯定理 朴素贝叶斯 Python 代 ...

  2. 学习笔记——Kaggle_Digit Recognizer (SVM算法 Python实现)

    本文是个人学习笔记,该篇主要学习SVM算法概念,并应用sklearn.svm算法包解决Kaggle入门级Digit Recognizer. SVM 简述 经典SVM思想 SVM 线性不可分 SVM 多 ...

  3. 学习笔记——Kaggle_Digit Recognizer (KNN算法 Python实现)

    本文是个人学习笔记,该篇主要学习KNN算法理论和应用范围,并应用KNN算法解决Kaggle入门级Digit Recognizer,也是个人入坑ML和Kaggle的开端,希望能够有始有终. KNN算法 ...

  4. 随机森林算法(Random Forest)Python实现

    目录 前言 一.什么是Random Forest ? 1.1 什么是监督式机器学习? 1.2 什么是回归和分类? 1.3 什么是决策树? 1.4 什么是随机森林? 二.Random Forest 的构 ...

  5. OPENCV学习笔记 - SIFT 尺度不变特征变换 Python

    OPENCV学习笔记 - SIFT 尺度不变特征变换 Python 为什么我们需要SIFT尺度不变特征变换? 第一,建立高斯差分金字塔 第二,极值点的精确定位 第三,确定关键点的主方向 第四,构建关键 ...

  6. python eval 入门_Python学习笔记整理3之输入输出、python eval函数

    Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...

    机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...

  8. 深度学习笔记(10) 优化算法(二)

    深度学习笔记(10) 优化算法(二) 1. Adam 优化算法 2. 学习率衰减 3. 局部最优的问题 1. Adam 优化算法 Adam代表的是 Adaptive Moment Estimation ...

  9. 深度学习笔记(9) 优化算法(一)

    深度学习笔记(9) 优化算法(一) 1. Mini-batch 梯度下降 2. 指数加权平均数 3. 动量梯度下降法 4. 均方根反向传播 1. Mini-batch 梯度下降 把训练样本放大巨大的矩 ...

最新文章

  1. android 监控app卸载,Android应用监听自身卸载
  2. iOS 中的网络请求 (同步请求、异步请求、GET请求、POST请求)
  3. 3000+ NLP资源一网打尽,只需用这个分类检索网站 | 免费
  4. Common Lisp语言快速入门
  5. 面试中的这些坑,你踩过几个?
  6. Linux基础(存储结构和磁盘划分)
  7. C++还是Java常常无法想起数组
  8. 详解jenkins几个有用的插件如何使用(emma,findbugs)
  9. 共享单车数据集_共享单车项目数据可视化展示
  10. jdb java_JAVA初学者的JDB 尝试
  11. android textview 动态高度自适应,TextView自适应高度(解决_UITextContainerView布局问题)...
  12. 蓝桥杯2016年第七届JavaC组国赛第一题-平方末尾
  13. S01E05-专访琚[jū]致远:聊聊兴趣与成就感如何驱动他参与开源社区
  14. js实现签名功能(vue中使用电子签名)
  15. VM ESXI安装英伟达显卡驱动
  16. 密码学——常见的密码学习总结
  17. 大数据技术架构_大数据架构流程图
  18. Win10如何关闭win11自动更新?
  19. 【区间选点问题】 N个闭区间,最少需要多少个点,让每个闭区间都有一个点
  20. 推荐一款绘图神器visual-paradigm

热门文章

  1. CUDA编程: GPU与CPU之间使用全局统一内存的完整代码及编译
  2. AIOT人工智能物联网+项目实战
  3. C/C++ 项目必读:代码格式化和静态分析检查的一站式工作流 Cpp Linter
  4. 嵌入式Linux配置内核后编译过程中报未定义引用错误的解决
  5. 如何查找IBM P5、6的HMC管理地址
  6. Python编程快速入门
  7. linux 上oracle已经启动 但是客户端无法连接,Oracle 客户端连接排错
  8. 布局(左边的div随着右边div的高度变化而变化)
  9. Java Web程序设计第12章课后第2题
  10. SVM支持向量机-拉格朗日乘子与对偶问题(1)