【机器学习】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% 那个运用这个不知名国外同学排到了前五。

参考资料

我的相关文章

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

相关文章推荐

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

本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest B...

Random Forests原理

Random Forests原理 分类: 机器学习2012-07-27 15:09 1085人阅读 评论(3) 收藏 举报 randomreference算法测试 转载自:http://l...
  • pi9nc
  • pi9nc
  • 2013年09月30日 15:47
  • 25402

随机森林(Random Forest)

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

机器学习算法之随机森林(Random Forest)

本文来自:BackNode 随机森林作为两大ensemble methods之一,近年来非常火热,本文试图探讨一下其背后原理,欢迎指正! Bagging Bagging方法是ense...

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

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

随机森林算法的简单总结及python实现

python实现的随机森林算法
  • lo_cima
  • lo_cima
  • 2016年01月17日 18:46
  • 12686

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

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

Random Forest 学习笔记整理

这篇文章是自己对学习random forest的整理,里面参考了很多其他博主的成果,非常感谢,他们的原文链接详见参考文献。 Random Forest,顾名思义,Random就是随机抽取,F...

Ensemble methods 之 Random Forest(随机森林)

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

R语言︱决策树族——随机森林算法

笔者寄语:有一篇《有监督学习选择深度学习还是随机森林或支持向量机?》(作者Bio:SebastianRaschka)中提到,在日常机器学习工作或学习中,当我们遇到有监督学习相关问题时,不妨考虑下先用简...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【机器学习】Random Forest(随机森林)入门和实战(一)先写个项目
举报原因:
原因补充:

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