第2关:随机森林算法流程

任务描述

本关任务:补充 python 代码,完成 RandomForestClassifier 类中的 fit 和 predict 函数。请不要修改 Begin-End 段之外的代码。

相关知识

为了完成本关任务,你需要掌握随机森林的训练与预测流程

随机森林的训练流程

随机森林是 Bagging 的一种扩展变体,随机森林的训练过程相对与 Bagging 的训练过程的改变有:

  • 基学习器: Bagging 的基学习器可以是任意学习器,而随机森林则是以决策树作为基学习器
  • 随机属性选择:假设原始训练数据集有 10 个特征,从这 10 个特征中随机选取 k 个特征构成训练数据子集,然后将这个子集作为训练集扔给决策树去训练。其中 k 的取值一般为 log2(特征数量) 。

这样的改动通常会使得随机森林具有更加强的泛化性,因为每一棵决策树的训练数据集是随机的,而且训练数据集中的特征也是随机抽取的。如果每一棵决策树模型的差异比较大,那么就很容易能够解决决策树容易过拟合的问题。

随机森林训练过程伪代码如下:

  1. #假设数据集为D,标签集为A,需要构造的决策树为tree
  2. def fit(D, A):
  3. models = []
  4. for i in range(决策树的数量):
  5. 有放回的随机采样数据,得到数据集sample_D和标签sample_A
  6. 从采样到的数据中随机抽取K个特征构成训练集sub_D
  7. 构建决策树tree
  8. tree.fit(sub_D, sample_A)
  9. models.append(tree)
  10. return models

随机森林的预测流程

随机森林的预测流程与 Bagging 的预测流程基本一致,如果是回归,就将结果基学习器的预测结果全部加起来算平均;如果是分类,就投票,票数最多的结果作为最终结果。但需要注意的是,在预测时所用到的特征必须与训练模型时所用到的特征保持一致。例如,第 3 棵决策树在训练时用到了训练集的第 2,5,8 这 3 个特征。那么在预测时也要用第 2,5,8 这 3 个特征所组成的测试集传给第 3 棵决策树进行预测。

编程要求

在 begin-end 中完成 RandomForestClassifier 类中的 fit 和 predict 函数。分类器可使用 sklearn 提供的 DecisionTreeClassifier ,要求模型保存在 self.models 中。

fit 函数用于随机森林的训练过程,其中:

  • feature :训练集数据,类型为 ndarray;

  • label :训练集标签,类型为 ndarray。

    predict 函数,实现预测功能,并将标签返回,其中:

  • feature :测试集数据,类型为 ndarray 。(PS:feature中有多条数据)

测试说明

只需完成 fit 与 predict 函数即可,程序内部会调用您所完成的 fit 函数构建模型并调用 predict 函数来对数据进行预测。预测的准确率高于 0.9 视为过关。


开始你的任务吧,祝你成功!

import numpy as np
from collections import  Counter
from sklearn.tree import DecisionTreeClassifier
class RandomForestClassifier():def __init__(self, n_model=10):'''初始化函数'''#分类器的数量,默认为10self.n_model = n_model#用于保存模型的列表,训练好分类器后将对象append进去即可self.models = []#用于保存决策树训练时随机选取的列的索引self.col_indexs = []def fit(self, feature, label):'''训练模型:param feature: 训练数据集所有特征组成的ndarray:param label:训练数据集中所有标签组成的ndarray:return: None'''#************* Begin ************#for i in range(self.n_model):m = len(feature)index = np.random.choice(m, m)col_index = np.random.permutation(len(feature[0]))[:int(np.log2(len(feature[0])))]sample_data = feature[index]sample_data = sample_data[:, col_index]sample_lable = label[index]model = DecisionTreeClassifier()model = model.fit(sample_data, sample_lable)self.models.append(model)self.col_indexs.append(col_index)#************* End **************#def predict(self, feature):''':param feature:训练数据集所有特征组成的ndarray:return:预测结果,如np.array([0, 1, 2, 2, 1, 0])'''#************* Begin ************#result = []vote = []for i, model in enumerate(self.models):f = feature[:, self.col_indexs[i]]r = model.predict(f)vote.append(r)vote = np.array(vote)for i in range(len(feature)):v = sorted(Counter(vote[:, i]).items(), key=lambda x: x[1], reverse=True)result.append(v[0][0])return np.array(result)#************* End **************#

Educoder 机器学习之随机森林算法 第2关:随机森林算法流程相关推荐

  1. 随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...

    一.什么是随机森林 前面我们已经介绍了决策树的基本原理和使用.但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样 ...

  2. 机器学习算法(6)——随机森林

    随机森林(Random Forests) 随机森林是一种重要的基于Bagging的集成学习方法,可以用来做分类.回归等问题.要学随机森林,先简单介绍一下集成学习方法和决策树算法. Bagging和Bo ...

  3. 机器学习——集成学习算法(Adaboost、随机森林)

    集成算法简述 什么是集成学习 如何得到多个个体学习器 集成学习常用算法 Bagging 自助采样 学习器结合 包外估计 随机森林 Adaboost Boosting Adaboost算法原理 注意 什 ...

  4. 【机器学习基础】(五):通俗易懂决策树与随机森林及代码实践

    与SVM一样,决策树是通用的机器学习算法.随机森林,顾名思义,将决策树分类器集成到一起就形成了更强大的机器学习算法.它们都是很基础但很强大的机器学习工具,虽然我们现在有更先进的算法工具来训练模型,但决 ...

  5. 12_信息熵,信息熵公式,信息增益,决策树、常见决策树使用的算法、决策树的流程、决策树API、决策树案例、随机森林、随机森林的构建过程、随机森林API、随机森林的优缺点、随机森林案例

    1 信息熵 以下来自:https://www.zhihu.com/question/22178202/answer/161732605 1.2 信息熵的公式 先抛出信息熵公式如下: 1.2 信息熵 信 ...

  6. 随机森林分类算法python代码_随机森林的原理及Python代码实现

    原标题:随机森林的原理及Python代码实现 最近在做kaggle的时候,发现随机森林这个算法在分类问题上效果十分的好,大多数情况下效果远要比svm,log回归,knn等算法效果好.因此想琢磨琢磨这个 ...

  7. 【机器学习实战】第7章 集成方法 随机森林(RandomForest)和 Adaboost

    第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...

  8. 机器学习预测股票收益(一)之随机森林模型

    机器学习预测股票收益(一)之随机森林模型 前言 一.导入库和数据 二.处理数据以及计算特征变量 三.使用随机森林回归预测股票收益 1.构建训练集和测试集 2.查看预测结果 四.根据预测结果构建long ...

  9. ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序

    ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序 目录 基于mpg数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特 ...

  10. Educoder 机器学习 SMO进行优化 第1关:SMO高效优化算法

    第1关:SMO高效优化算法 任务要求 参考答案 评论1 任务描述 相关知识 了解SMO的工作原理 编程要求 测试说明 任务描述 本关任务:编写一个SMO算法. 相关知识 为了完成本关任务,你需要掌握: ...

最新文章

  1. java打包要依赖maven库吗_maven-将依赖的 jar包一起打包到项目 jar 包中
  2. 文件打包成zip类型文件
  3. Spring Cloud相关项目
  4. range在c语言中的意思,“range”的含义,你get到了吗?
  5. linux远程执行本地脚本,ssh远程执行命令方法和Shell脚本实例
  6. Android获取网络状态
  7. android 配置ADB环境
  8. 解决多进程模式下引起的“惊群”效应
  9. java语言_JAVA语言
  10. oracle无效的关联运算符,菜鸟请教:关联操作符=>用法
  11. python 文本处理库_实用又好用,6 款 Python 特殊文本格式处理库推荐
  12. CodeForces - 416A Guess a number
  13. LeetCode刷题——345. 反转字符串中的元音字母
  14. java 如何执行dig 命令_linux dig 命令使用方法
  15. 动态规划之详细分析0-1背包问题
  16. cas5.2集成ldap
  17. java毕业设计鞋类秒杀商城Mybatis+系统+数据库+调试部署
  18. EBS 销售订单登记提示错误 ORA-00604 LPX-00225
  19. Unity HDRP室外场景打光流程分享(上篇)-UE4场景转Unity HDRP
  20. DCOS :私有云的物理基础架构管理引擎

热门文章

  1. 基于jsp+ssm的办公用品领用管理系统
  2. 多种玉石原石欣赏与鉴别
  3. Qt:QPainter重写mainwindows绘图事件绘制直线,弧线、设置画笔画刷
  4. 【网络通信 -- 直播】SRS 实战记录 -- SRS 部署与直播效果测试
  5. MATLAB 画颜色网格图
  6. 夸克(神马)搜索引擎网址
  7. 解决uni-app开发中刘海屏下背景不能全屏铺满的问题
  8. 【数据结构】17-二叉排序树(BST)
  9. PHP怎么设置字体走马灯效果,微信小程序怎么设置背景颜色渐变以及字体走马灯效果(高考倒计时)...
  10. unity 2d人物二段跳,多段跳 简单易懂