【机器学习】Random Forest(随机森林)入门和实战(一)先写个项目

原创 2017年02月14日 00:01:22

准备条件

  • seaborn: 一个可视化工具,不会用参见:数据可视化工具seaborn
  • matplotlib.pyplot: 也是一个可视化工具
  • sklearn
  • pandas
  • numpy
  • jupyter notebook

实践项目

  • 项目地址
    Kaggle上面的一个项目:digit-recognizer
  • 项目描述
    简单说下就是train.csv训练数据里面是42000条手写数字图片的数据。
    • train.csv一共42000行*785列
    • 每个数字图片包含28*28像素点,即 一个图片784个像素点,每个像素点的明暗程度用0-255之间的数字表示,数字越高,表示越暗
    • 785列数据中,第一列就是识别正确的数字,取名为lable,后面784列即为每个像素点明暗值
    • test.csv相比于train.csv就是少了lable
  • 项目思路
    使用随机森林算法,定义为100tree, 训练模型时,用train.csv的前2/3行数据(28000行)作为训练数据,后1/3行数据(14000行)作为测试数据。
  • 项目代码
    SmileLikeYe-RandomForest
#!/usr/bin/env python
# coding=utf8

import sys
reload(sys)
sys.setdefaultencoding('utf8')

'''
Competition URL: https://www.kaggle.com/c/digit-recognizer
Solution:  Random Forest
'''


# 引入需要的包包
# 数据处理的常用包包
import numpy as np
import pandas as pd

# 随机森林的包包
import sklearn as skl
from sklearn.ensemble import RandomForestClassifier

# 画图的包包
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)

# 读取数据(请先去 https://www.kaggle.com/c/digit-recognizer/data 上下载数据)
# 读取成DataFrame的数据
train_df = pd.read_csv('train.csv')
# 将DataFrame的数据转换成Array
train_data = train_df.values

test_df = pd.read_csv('test.csv')
test_data = test_df.values

print train_df.head()
print train_data

# 画图
plt.figure(figsize=(12,8))
sns.countplot(x='label', data=train_df)
plt.title('Distribution of Numbers')
plt.xlabel('Numbers');

# 2/3的train_data作为训练数据,1/3的train_data作为测试数据来训练模型
num_features = train_data.shape[0] # 拿到train_data的行数,也就是所有数据的个数作为特征值
print("Number of all features: \t\t", num_features)
split = int(num_features * 2/3) # 这里是取2/3行也就是前28000行作为训练 后1/3也就是14000作为测试

train = train_data[:split] # 取出前28000行作为训练数据
test = train_data[split:] # 取出后14000行作为测试数据

print("Number of features used for training: \t", len(train),
      "\nNumber of features used for testing: \t", len(test))

# 开始使用随机森林分类器
clf = RandomForestClassifier(n_estimators=100) # 定义决策树的个数为100

# 开始训练,训练的X数据格式为[[]],训练的y值为[]也就是经过ravel后的数据
# 如果你问我ravel()的作用是什么,就是不管什么数据格式的数据都转成一个一维的array,这样每个元素都是一个平等且顺序的位置
model = clf.fit(train[:,1:], train[:,0].ravel())

# 然后预测
output = model.predict(test[:,1:])

# 计算准确度
acc = np.mean(output == test[:,0].ravel()) *100
print("The accuracy of the pure RandomForest classifier is: \t", acc, "%")

# 利用
clf = RandomForestClassifier(n_estimators=100) # 100 trees

# 用全部训练数据来做训练
target = train_data[:,0].ravel()
train = train_data[:,1:]
model = clf.fit(train, target)


# 用测试集数据来预测最终结果
output = model.predict(test_data)
print output

# 输出预测结果
pd.DataFrame({"ImageId": range(1, len(output)+1), "Label": output}).to_csv('out.csv', index=False, header=True)

最后 提交上去的准确路为96.793% 那个运用这个不知名国外同学排到了前五。

参考资料

我的相关文章

版权声明:本文为博主原创文章,未经博主允许不得转载。

机器学习方法(六):随机森林Random Forest,bagging

前面[机器学习方法(四)决策树](http://blog.csdn.net/xbinworld/article/details/44660339)讲了经典的决策树算法,我们讲到决策树算法很容易过拟合,...
  • xbinworld
  • xbinworld
  • 2016年01月03日 21:47
  • 11472

细说RandomForest

鉴于csdn上已经有很多优秀的博文对RandomForest做过介绍,在此重复的内容我就不再复述:如随机森林的Bootstrap,features select... 主要结合原论文谈谈RandomF...
  • qccc_dm
  • qccc_dm
  • 2017年03月24日 17:00
  • 621

【机器学习】Random Forest(随机森林)入门和实战(三)什么时候使用

一句话你不知道用什么模型的时候就用RF。优点 万金油。只要是分类,回归问题,都能一股脑的用它。 操作简单。不可否认神经网络的效果比它好,但是神经网络要疯狂调参啊,一调就是好几天,你见过像RF这么乖巧,...
  • Lin_Ting
  • Lin_Ting
  • 2017年02月14日 13:48
  • 1749

随机森林(Random Forest)

 阅读目录 •1 什么是随机森林? •2 随机森林的特点 •3 随机森林的相关基础知识 •4 随机森林的生成 •5 袋外错误率(oob error) •6 随机森林工作原理解...
  • ac540101928
  • ac540101928
  • 2016年06月16日 09:40
  • 6359

随机森林(Random Forest)入门与实战

随机森林(Random Forest)入门与实战前言集成学习(ensemble learning)是通过构建并结合多个学习器来完成学习任务,主要包含两类,一是个体学习器间存在强依赖关系、必须串行生成的...
  • sb19931201
  • sb19931201
  • 2016年09月20日 22:11
  • 6676

Random Forest算法参数解释及调优

文章介绍了如何对随机森林模型进行参数调优 原文来自:http://www.analyticsvidhya.com/blog/2015/06/tuning-random-forest-model/ 为什...
  • qq_16633405
  • qq_16633405
  • 2017年03月10日 16:58
  • 5310

Ensemble methods 之 Random Forest(随机森林)

1. 是什么 如前面所说,决策树有时候会出现过拟合(overfit)的问题,越强大的决策树越可能出现过拟合,但是如果几个模型或者一个模型的几个参数组合起来,就很容易弥补这种问题。所以,随机森林就是一种...
  • sandyzhs
  • sandyzhs
  • 2015年08月25日 14:59
  • 4681

Random Forest随机森林算法

Random Forest是加州大学伯克利分校的Breiman Leo和Adele Cutler于2001年发表的论文中提到的新的机器学习算法,可以用来做分类,聚类,回归,这里只简单介绍该算法在分类上...
  • u014568921
  • u014568921
  • 2015年04月16日 22:03
  • 8191

R —— Random Forest

1. 基本思想         用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树...
  • F_yuqi
  • F_yuqi
  • 2017年01月05日 17:21
  • 2382

统计学习方法——CART, Bagging, Random Forest, Boosting

本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest B...
  • abcjennifer
  • abcjennifer
  • 2012年11月10日 09:46
  • 72642
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【机器学习】Random Forest(随机森林)入门和实战(一)先写个项目
举报原因:
原因补充:

(最多只允许输入30个字)