学习笔记——Kaggle_Digit Recognizer (Random Forest算法 Python实现)
本文是个人学习笔记,该篇主要学习随机森林算法概念,并应用sklearn.ensemble.RandomForestClassifier算法包解决Kaggle入门级Digit Recognizer。
- 随机森林概述
- 决策树
- 随机森林分类过程
- Python 代码
随机森林概述
随机森林就是用随机方式建立一个决策树森林,随机森林的决策树之间相互独立。因此随机森林可以简单理解为基于决策树算法的一种拓展与改进,主要应用于回归与分类。它也是一种数据降维手段,用于处理缺失值、异常值以及其他数据探索中的重要步骤。
其在分类问题上的基本思想是通过训练样本建立起随机森林,每当新样本进入时,让森林中每颗决策树都对该样本进行分类判断,最终通过投票方式确定其最终类别。
决策树
决策树顾名思义是一种树结构,其每个非叶节点表示一个基于特征属性的测试,每个分支代表该特征属性在某个值域上的输出,而每个叶节点存放一个类别。
决策树进行分类决策的过程就是从根节点开始,测试待分类项中对应该节点的特征属性,然后按照其值选择输出分支,到达新节点重复上述判断步骤,直到到达叶子节点,该叶节点类别即为分类判断结果。
随机森林分类过程
- 假设原始训练集共有N个样本,利用重复自抽样有放回地随机抽取出k个新的自助样本集(每个样本集中也有N个样本,由于是有放回随机抽取,因此可能会有重复样本,从而避免过拟合),由此构建k棵分类树(二叉树);
- 假设训练样本共有M个属性变量,则在每个节点处随机选取其中m个属性变量,然后在其中选择具有最大信息增益(信息增益表示特征值使得数据集不确定性的下降程度,因此信息增益越大,特征分类能力越强)或具有最小基尼指数(基尼指数表示样本集合的不确定性程度,基尼指数越小,对应的特征分类能力越强)的属性为节点分裂属性,变量分类的阈值通过检查每一个分类点确定;
- 每棵树最大限度地生长, 不做任何修剪;
- 将生成的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实现)相关推荐
- 学习笔记——Kaggle_Digit Recognizer (朴素贝叶斯 Python实现)
本文是个人学习笔记,该篇主要学习朴素贝叶斯算法概念,并应用sklearn.naive_bayes算法包解决Kaggle入门级Digit Recognizer. 贝叶斯定理 朴素贝叶斯 Python 代 ...
- 学习笔记——Kaggle_Digit Recognizer (SVM算法 Python实现)
本文是个人学习笔记,该篇主要学习SVM算法概念,并应用sklearn.svm算法包解决Kaggle入门级Digit Recognizer. SVM 简述 经典SVM思想 SVM 线性不可分 SVM 多 ...
- 学习笔记——Kaggle_Digit Recognizer (KNN算法 Python实现)
本文是个人学习笔记,该篇主要学习KNN算法理论和应用范围,并应用KNN算法解决Kaggle入门级Digit Recognizer,也是个人入坑ML和Kaggle的开端,希望能够有始有终. KNN算法 ...
- 随机森林算法(Random Forest)Python实现
目录 前言 一.什么是Random Forest ? 1.1 什么是监督式机器学习? 1.2 什么是回归和分类? 1.3 什么是决策树? 1.4 什么是随机森林? 二.Random Forest 的构 ...
- OPENCV学习笔记 - SIFT 尺度不变特征变换 Python
OPENCV学习笔记 - SIFT 尺度不变特征变换 Python 为什么我们需要SIFT尺度不变特征变换? 第一,建立高斯差分金字塔 第二,极值点的精确定位 第三,确定关键点的主方向 第四,构建关键 ...
- python eval 入门_Python学习笔记整理3之输入输出、python eval函数
Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网 浏览: 次 日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...
机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...
- 深度学习笔记(10) 优化算法(二)
深度学习笔记(10) 优化算法(二) 1. Adam 优化算法 2. 学习率衰减 3. 局部最优的问题 1. Adam 优化算法 Adam代表的是 Adaptive Moment Estimation ...
- 深度学习笔记(9) 优化算法(一)
深度学习笔记(9) 优化算法(一) 1. Mini-batch 梯度下降 2. 指数加权平均数 3. 动量梯度下降法 4. 均方根反向传播 1. Mini-batch 梯度下降 把训练样本放大巨大的矩 ...
最新文章
- android 监控app卸载,Android应用监听自身卸载
- iOS 中的网络请求 (同步请求、异步请求、GET请求、POST请求)
- 3000+ NLP资源一网打尽,只需用这个分类检索网站 | 免费
- Common Lisp语言快速入门
- 面试中的这些坑,你踩过几个?
- Linux基础(存储结构和磁盘划分)
- C++还是Java常常无法想起数组
- 详解jenkins几个有用的插件如何使用(emma,findbugs)
- 共享单车数据集_共享单车项目数据可视化展示
- jdb java_JAVA初学者的JDB 尝试
- android textview 动态高度自适应,TextView自适应高度(解决_UITextContainerView布局问题)...
- 蓝桥杯2016年第七届JavaC组国赛第一题-平方末尾
- S01E05-专访琚[jū]致远:聊聊兴趣与成就感如何驱动他参与开源社区
- js实现签名功能(vue中使用电子签名)
- VM ESXI安装英伟达显卡驱动
- 密码学——常见的密码学习总结
- 大数据技术架构_大数据架构流程图
- Win10如何关闭win11自动更新?
- 【区间选点问题】 N个闭区间,最少需要多少个点,让每个闭区间都有一个点
- 推荐一款绘图神器visual-paradigm