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

2023-11-03

准备条件

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

参考资料

我的相关文章

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 随机打乱 C++ 数组(每次都不同)

    我想在C 中对数组进行洗牌 并且每次运行程序时 我想要进行不同的随机洗牌 我有myArray的长度 目前我正在使用 random shuffle myArray myArray N 但这每次都会产生相同的洗牌 为了包含随机数 我尝试过 ra
  • 为什么随机不那么随机?

    有人可以解释一下现代编程语言 java c python javascript 如何应对随机性的限制以及这些限制 例如基于时间的种子 的起源 即 如果它们是由底层操作系统和基于英特尔的硬件强加的 基本上我想了解为什么没有适当的硬件就没有真正
  • 测试随机值 - 对这种方法的想法?

    好的 我一直在研究随机图像选择器和队列系统 因此您不会经常看到相同的图像 一切都很顺利 就我蹩脚的代码而言 until我到了随机位 我想测试一下 但是如何测试呢 没有Debug Assert i IsRandom 可悲的是 D 所以 我在用
  • shell中如何从数组中随机选择一个项目

    我正在 Shell 脚本中创建一个机器人 Array with expressions expressions Ploink Poink I Need Oil Some Bytes are Missing Poink Poink Piiii
  • Javascript:生成具有固定平均值和标准差的随机数

    我的问题 如何在 Javascript 中创建具有给定平均值和标准差 sd 的随机数列表 Example 我想创建一个包含 5 个范围在 1 到 10 之间的随机数的列表 生成的平均值应为 5 标准差应为 2 到目前为止我所做的 我的想法是
  • 生成总和恒定的随机数

    我在想是否有办法生成一组随机数 其总和始终是一个常数 例如 20 可以分为 5 个数字 1 2 3 4 10 我不在乎这 5 个数字分别是什么 只要它们的总和等于 20 有没有办法以编程方式执行此操作 为了获得均匀分布 技巧是将总和视为一条
  • 是否可以证明序列是否是随机的?

    考虑以下输入 1 1 2 3 5 8 这不是随机的 2 4 8 16 32 这都不是 4 1 2 11 5 9 这个看起来像随机序列 我想问是否有这样的算法来证明输入是否是随机的 不 没有这样的证明 如果你有完全随机的数字 则每个长度为 n
  • 在 Golang 中生成固定长度的随机十六进制字符串的有效方法?

    我需要生成很多固定长度的随机十六进制字符串 我找到这个解决方案golang中如何生成固定长度的随机字符串 https stackoverflow com a 31832326 710955 我正在做这样的事情 const letterByt
  • 如何在 Swift 中生成随机数?

    我意识到 Swift 书提供了随机数生成器的实现 最佳实践是复制并粘贴此实现吗 或者有一个库可以做到这一点 我们现在可以使用吗 斯威夫特 4 2 Xcode 10 附带的 Swift 4 2 为许多数据类型引入了新的易于使用的随机函数 您只
  • 如何生成泊松过程?

    原问题 我想生成一个泊松过程 如果按时间到达的人数t is N t 我有一个带有参数的泊松分布 我如何生成N t 我将如何在 C 中做到这一点 澄清 我最初想使用泊松分布生成过程 但是 我对我需要的过程参数感到困惑 我以为我可以用N t 但
  • 使用 MySQL 生成唯一且随机的代码数字

    初始目标 我想在表中生成随机且唯一的代码 6 位数字 我使用像这样的 SQL 查询来做到这一点 SELECT SUBSTRING CRC32 RAND 1 6 as myCode FROM codes HAVING myCode NOT I
  • 从文件夹中选择随机图像以显示在 picturebox、vb.net 中

    我有一个图片框 它从文件夹中读取图像进行显示 而不是通常的无聊图像 我认为在文件夹中包含许多图像并让我的 vb net 程序随机挑选一个来显示可能会更好使用 我怎样才能做到这一点 尝试这个 Public Function GetRandom
  • 在iOS中生成范围内的随机数? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试让随机数生成器在 iPho
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 在 JavaScript 中生成 UUID 时发生冲突

    这涉及到这个问题 https stackoverflow com questions 105034 how to create a guid uuid in javascript 我正在使用下面的代码这个答案 https stackover
  • 创建一个具有相同定义域和值域的随机双射函数

    创建一个具有相同定义域和值域的随机双射函数 我所说的随机双射函数是指使用随机算法 或至少是伪随机算法 将元素从域映射到范围的函数 而不是像 x y 这样的函数 域和范围有时可能是一个非常小的集合 例如 1 2 3 4 5 因此配对函数将不起
  • 设置种子增强::随机

    我想通过使用不同的种子数来重置随机序列 运行此测试代码时 boost mt19937 gener 1 boost normal distribution lt gt normal 0 1 boost variate generator
  • 我可以有效地从 HashSet 中随机采样吗?

    我有一个std collections HashSet 我想采样并删除一个均匀随机的元素 目前 我正在做的是使用随机抽样索引rand gen range 然后迭代HashSet到该索引来获取元素 然后我删除选定的元素 这可行 但效率不高 有
  • 在 Excel 中生成随机 -1 和 +1 值

    The Rand 函数会生成一个 0 到 1 之间的实数 这Randbetween 1 1 将生成 1 0 或 1 我想要的只是 1或1 那么 1 到 1 之间的实数呢 Easy IF RAND lt 0 5 1 1 要获得实数 请使用 R
  • 获取N个随机数,其总和为M

    我想得到N个随机数 其总和是一个值 例如 假设我想要 5 个总和为 1 的随机数 那么 一个有效的可能性是 0 2 0 2 0 2 0 2 0 2 另一种可能性是 0 8 0 1 0 03 0 03 0 04 等等 我需要这个来创建模糊 C

随机推荐

  • python装饰器原理

    装饰器作用 装饰器在实际开发中应用广发 如 1 引入日志 2 函数执行时间统计 3 执行函数前预备处理 4 执行函数后清理功能 5 权限校验等场景 6 缓存 装饰器可以实现在不修改之前已经写好并且封装好的代码的前提下对之前的代码进行功能上的
  • LASlib/LAStools:Win10 + VS2017 编译LASlib/LAStools

    一 下载解压 下载地址 http lastools github io download LAStools zip 解压地址 G LAStools 二 编译 2 1 打开 用VS2017打开lastools dsw 历史原因 一直点确定就可
  • Linux shell 从文件中随机选择内容

    如果需要从文件中随机选择一定行的内容 可以借助sort 命令 如下 使用sort 命令将文件随机排序 选择前100行 sort random sort file head n 100
  • 《自然语言处理》第二次作业:语言模型和文本分类

    文章目录 作业要求 代码 读取数据集 建立二元语法模型 朴素贝叶斯分类 分类和评估 计算困惑度 完整代码 运行结果 作业要求 题目 语言模型和文本分类 数据集 text classification data用户评论 包括训练集 开发测试集
  • 三位数除以两位数怎么算竖式_四年级数学上册三位数除以两位数竖式笔算专项练习(10套)...

    四年级数学上册三位数除以两位数竖式笔算专项练习 一 三位数除以两位数的除法 包括以下两部分 一 三位数除以整十数 如 二 三位数除以两位数 二 除数是两位数的除法法则 从被除数左边的高位起 先用除数试除被除数的前两位数 如果它比除数小 再试
  • 深入浅出讲解 NAT 和 UDP/TCP 点对点通讯

    深入浅出讲解 NAT 和 UDP TCP 点对点通讯 转自 http blog csdn net g brightboy article details 12704933 一 什么是NAT 为什么要使用NAT NAT是将私有地址转换为合法I
  • Java面向对象(基础总结)

    Java面向对象 基础总结 面向对象是一种编程思想 面向对象的三大基本特征 封装 继承 多态 面向对象的编程思想就是把事物看作一个整体 从事物的特征 属性 和行为 方法 两个方面进行描述 面向对象的过程就是找对象 建立对象 使用对象 维护对
  • angular中涉及rxjs请求beego接口跨域问题解决

    今天遇到一个调用服务端接口跨域问题 我用本地的angular运行项目 访问本地的beego接口 发现请求接口状态404 并且接口方法还是OPTIONS 一查知道是跨域了 在网上搜索一些跨域访问的方法 发现跨域时访问可以了 但正常post接口
  • Java中的代理(二)--JDK动态代理

    JDK动态代理借助接口实现 目标类需是接口形式 代理类继承InvocationHandler类 通过反射方式动态创建目标类 1 目标对象 public interface ByShoot void byShoot String size p
  • LWN 翻译:Atomic Mode Setting 设计简介(下)

    译者注 紧接上篇文章 本篇翻译起来有难度 同时对读者的技术背景有一定要求 适合深入研究 DRM 驱动的开发人员阅读 通过阅读本文 你将了解如下内容 DRM MODE ATOMIC ALLOW MODESET 标志位的由来及其作用 驱动中随处
  • 常见CMS系统总结

    一 CMS系统是什么 CMS系统指的是内容管理系统 CMS可以理解为CMS帮你把一个网站的程序部分的事全做完了 你要做的只是一个网站里面美工的部份 只要搞几个静态网页模板 一个门户级的网站就出来了 二 CMS系统的分类 企业建站系统 Met
  • MYSQL:ER_NOT_SUPPORTED_AUTH_MODE:Client does not support authentication protocol

    今天新建一个koa项目 启动调用mysql驱动的时候报该错误 solution 在系统mysql终端输入下面命令 重启koa进程即可 yourpassword 是你的数据库账户密码 root和host也是 ALTER USER root l
  • 印刷MES管理系统等数字化系统,应用发展如此迅速

    作为印刷企业最基本的数字化管理系统 印刷MES管理系统与印刷ERP管理系统在最近两年普遍受到印刷企业的关注并得到迅速发展 市场需求旺盛 1 ERP逐渐普及到中小企业 ERP管理系统延续了前两年的发展趋势 市场正在从普及阶段转入升级阶段 一方
  • 构建微服务开源生态,TARS项目将成立基金会

    导语 在20世纪60至70年代 软件开发人员通常在大型机和小型机上使用单体架构进行软件开发 没有一个应用程序能够满足大多数最终用户的需求 垂直行业使用的软件代码量更小 与其他应用程序的接口更简单 而可伸缩性在当时并不是优先考虑的 随着互联网
  • -day11--函数进阶

    day11 函数进阶 目标 掌握函数相关易错点 项目开发必备技能 概要 参数的补充 函数名 函数名到底是什么 区分返回值和print 函数的作用域 1 参数的补充 函数进阶 在特定情况下可以让代码更加简洁 提升开发效率 1 1 参数内存地址
  • 一、Nginx源码安装与yum安装

    目录标题 源码安装 yum安装 源码安装 wget http nginx org download nginx 1 15 8 tar gz tar zxvf nginx 1 15 8 tar gz cd nginx 1 15 8 confi
  • 关于Vue中element按需引入

    在项目中使用elementui确实是很方便的一件事 但是如果我只需要用到其中的某一些元素来简化代码的话 全局引入就显得有点臃肿了 这就有了按需引入的概念 需要什么就引入什么 方便 一 安装element ui npm i element u
  • 基于卷积神经网络的手写数字识别(自建模型)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 卷积神经网络是一种多层的监督学习神经网络 隐含层的卷积层和池采样层是实现卷积神经网络特征提取功能的核心模块 该网络模型通过采用梯度下降法最小化损失函数对网络中
  • JavaScript——为什么静态方法不能调用非静态方法

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 正逐渐往全干发展 个人状态 研发工程师 现效力于中国工业软件事业 人生格言 积跬步至千里 积小流成江海 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 3项目实战 Node js
  • 【机器学习】Random Forest(随机森林)入门和实战(一)先写个项目

    准备条件 seaborn 一个可视化工具 不会用参见 数据可视化工具seaborn matplotlib pyplot 也是一个可视化工具 sklearn pandas numpy jupyter notebook 实践项目 项目地址 Ka