Educoder 机器学习之随机森林算法 第2关:随机森林算法流程
第2关:随机森林算法流程
任务描述
本关任务:补充 python 代码,完成 RandomForestClassifier 类中的 fit 和 predict 函数。请不要修改 Begin-End 段之外的代码。
相关知识
为了完成本关任务,你需要掌握随机森林的训练与预测流程
随机森林的训练流程
随机森林是 Bagging 的一种扩展变体,随机森林的训练过程相对与 Bagging 的训练过程的改变有:
- 基学习器: Bagging 的基学习器可以是任意学习器,而随机森林则是以决策树作为基学习器。
- 随机属性选择:假设原始训练数据集有 10 个特征,从这 10 个特征中随机选取 k 个特征构成训练数据子集,然后将这个子集作为训练集扔给决策树去训练。其中 k 的取值一般为 log2(特征数量) 。
这样的改动通常会使得随机森林具有更加强的泛化性,因为每一棵决策树的训练数据集是随机的,而且训练数据集中的特征也是随机抽取的。如果每一棵决策树模型的差异比较大,那么就很容易能够解决决策树容易过拟合的问题。
随机森林训练过程伪代码如下:
#假设数据集为D,标签集为A,需要构造的决策树为tree
def fit(D, A):
models = []
for i in range(决策树的数量):
有放回的随机采样数据,得到数据集sample_D和标签sample_A
从采样到的数据中随机抽取K个特征构成训练集sub_D
构建决策树tree
tree.fit(sub_D, sample_A)
models.append(tree)
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关:随机森林算法流程相关推荐
- 随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...
一.什么是随机森林 前面我们已经介绍了决策树的基本原理和使用.但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样 ...
- 机器学习算法(6)——随机森林
随机森林(Random Forests) 随机森林是一种重要的基于Bagging的集成学习方法,可以用来做分类.回归等问题.要学随机森林,先简单介绍一下集成学习方法和决策树算法. Bagging和Bo ...
- 机器学习——集成学习算法(Adaboost、随机森林)
集成算法简述 什么是集成学习 如何得到多个个体学习器 集成学习常用算法 Bagging 自助采样 学习器结合 包外估计 随机森林 Adaboost Boosting Adaboost算法原理 注意 什 ...
- 【机器学习基础】(五):通俗易懂决策树与随机森林及代码实践
与SVM一样,决策树是通用的机器学习算法.随机森林,顾名思义,将决策树分类器集成到一起就形成了更强大的机器学习算法.它们都是很基础但很强大的机器学习工具,虽然我们现在有更先进的算法工具来训练模型,但决 ...
- 12_信息熵,信息熵公式,信息增益,决策树、常见决策树使用的算法、决策树的流程、决策树API、决策树案例、随机森林、随机森林的构建过程、随机森林API、随机森林的优缺点、随机森林案例
1 信息熵 以下来自:https://www.zhihu.com/question/22178202/answer/161732605 1.2 信息熵的公式 先抛出信息熵公式如下: 1.2 信息熵 信 ...
- 随机森林分类算法python代码_随机森林的原理及Python代码实现
原标题:随机森林的原理及Python代码实现 最近在做kaggle的时候,发现随机森林这个算法在分类问题上效果十分的好,大多数情况下效果远要比svm,log回归,knn等算法效果好.因此想琢磨琢磨这个 ...
- 【机器学习实战】第7章 集成方法 随机森林(RandomForest)和 Adaboost
第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...
- 机器学习预测股票收益(一)之随机森林模型
机器学习预测股票收益(一)之随机森林模型 前言 一.导入库和数据 二.处理数据以及计算特征变量 三.使用随机森林回归预测股票收益 1.构建训练集和测试集 2.查看预测结果 四.根据预测结果构建long ...
- ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序
ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序 目录 基于mpg数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特 ...
- Educoder 机器学习 SMO进行优化 第1关:SMO高效优化算法
第1关:SMO高效优化算法 任务要求 参考答案 评论1 任务描述 相关知识 了解SMO的工作原理 编程要求 测试说明 任务描述 本关任务:编写一个SMO算法. 相关知识 为了完成本关任务,你需要掌握: ...
最新文章
- java打包要依赖maven库吗_maven-将依赖的 jar包一起打包到项目 jar 包中
- 文件打包成zip类型文件
- Spring Cloud相关项目
- range在c语言中的意思,“range”的含义,你get到了吗?
- linux远程执行本地脚本,ssh远程执行命令方法和Shell脚本实例
- Android获取网络状态
- android 配置ADB环境
- 解决多进程模式下引起的“惊群”效应
- java语言_JAVA语言
- oracle无效的关联运算符,菜鸟请教:关联操作符=>用法
- python 文本处理库_实用又好用,6 款 Python 特殊文本格式处理库推荐
- CodeForces - 416A Guess a number
- LeetCode刷题——345. 反转字符串中的元音字母
- java 如何执行dig 命令_linux dig 命令使用方法
- 动态规划之详细分析0-1背包问题
- cas5.2集成ldap
- java毕业设计鞋类秒杀商城Mybatis+系统+数据库+调试部署
- EBS 销售订单登记提示错误 ORA-00604 LPX-00225
- Unity HDRP室外场景打光流程分享(上篇)-UE4场景转Unity HDRP
- DCOS :私有云的物理基础架构管理引擎