随机森林主要应用于回归和分类。
它几乎可以将任何数据填进去,下文使用鸢尾花数据进行分类和预测

环境 python3.8
数据集 鸢尾花数据集

    def dataset(self):iris = load_iris()feature = pd.DataFrame(data=iris.data, columns=iris.feature_names)target = pd.DataFrame(data=map(lambda item: iris.target_names[item],iris.target), columns={'target_names'})feature_train, feature_test, target_train, target_test = \train_test_split(feature, target, test_size=0.3)return feature_train, feature_test, target_train, target_test

实验思路:
首先训练10个基分类器,每个基分类器为一个决策树;在预测时对每个基分类器投票结果进行统计倒排,选取票数最多的结果;其中‎每棵树的生长情况如下:‎
‎如果培训集中的案例数为 N,则随机取样 N 案例 - 但从原始数据中‎‎替换‎‎。此示例将是种植树的培训集。‎
‎如果有 M 输入变量,则指定一个数字 m<<M,以便在每个节点中随机从 M 中选择 m 变量,并且这些 m 上的最佳拆分用于拆分节点。在森林生长过程中,m 值保持不变。‎
‎每棵树都尽可能的生长。没有修剪。
查看随机森林官网描述
fit训练

    def fit(self, feature=None, label=None):'''训练模型,请记得将模型保存至self.models:param feature: 训练集数据,类型为ndarray:param label: 训练集标签,类型为ndarray:return: None'''# ************* Begin ************#n = len(feature)for i in range(self.n_model):# 在训练集N随机选取n个样本  #frac=1 样本可重复取 (样本只包含特征数据)randomSamples = feature.sample(n, replace=True, axis=0)# 在所有特征M随机选取m个特征 特征无重复 0.75表示选取4*0.75=3个特征randomFeatures = randomSamples.sample(frac=0.75, replace=False, axis=1)# 标记该模型选取的特征tags = self.connect(randomFeatures.columns.tolist())# 根据样本筛选出索引与之相同的lable即target_name# 使用loc标签索引获取randomLable = label.loc[randomSamples.index.tolist(),:]# for i,j in zip(randomFeatures.index.tolist(),,randomLable.index.tolist()):#   print(i,j)model = DecisionTreeClassifier()model = model.fit(randomFeatures, randomLable)self.models.append({tags: model})# ************* End **************#

预测

    def predict(self, features, target):''':param features: 测试集数据,类型为ndarray:param target: 测试集实际lable,类型为ndarray:return: 预测结果,类型为ndarray'''# ************* Begin ************#result = []vote = []for model in self.models:# 获取模型使用的训练特征modelFeatures = list(model.keys())[0].split('000')[:-1]# 提取出模型预测需要的标签test_data = features[modelFeatures]# 基分类器进行预测r = list(model.values())[0].predict(test_data)vote.append(r)# 将数组转换为矩阵 10行45列vote = np.array(vote)# print(vote.shape) # print(vote)for i in range(len(features)):# 对每棵树的投票结果进行排序选取最大的v = sorted(Counter(vote[:, i]).items(),key=lambda x: x[1], reverse=True)# 查看投票情况和实际标签对比print(v, "---",list(target)[i])result.append(v[0][0])return result# ************* End **************#def connect(self, ls):s = ''for i in ls:s += i + '000'return s

主函数

if __name__ == '__main__':Bcf = BaggingClassifier()featureAndTarget = Bcf.dataset()Bcf.fit(featureAndTarget[0],featureAndTarget[2])res = Bcf.predict(features=featureAndTarget[1], target=featureAndTarget[3]['target_names'])right = 0for i, j in zip(featureAndTarget[3]['target_names'], res):if i == j:right += 1#print(i + '\t' + j)print('准确率为' + str(right / len(res) * 100) + "%")


可以看出准确率很高啦,可以调整特征数量m参数,准确率也会不同。

随机森林算法的Python实现相关推荐

  1. python 营销应用_随机森林算法入门(python),,它可以用于市场营销对客户

    随机森林算法入门(python),,它可以用于市场营销对客户 目录 1 什么是随机森林 1.1 集成学习 1.2 随机决策树 1.3 随机森林 1.4 投票 2 为什么要用它 3 使用方法 3.1 变 ...

  2. python随机森林库_随机森林算法入门(python)

    目录 1 什么是随机森林 1.1 集成学习 1.2 随机决策树 1.3 随机森林 1.4 投票 2 为什么要用它 3 使用方法 3.1 变量选择 3.2 分类 3.3 回归 4 一个简单的Python ...

  3. r与python做随机森林_随机森林算法入门(python)

    昨天收到yhat推送了一篇介绍随机森林算法的邮件,感觉作为介绍和入门不错,就顺手把它翻译一下. 目录 1 什么是随机森林 1.1 集成学习 1.2 随机决策树 1.3 随机森林 1.4 投票 2 为什 ...

  4. 随机森林算法demo python spark

    关键参数 最重要的,常常需要调试以提高算法效果的有两个参数:numTrees,maxDepth. numTrees(决策树的个数):增加决策树的个数会降低预测结果的方差,这样在测试时会有更高的accu ...

  5. 随机森林算法入门(python)

    向AI转型的程序员都关注了这个号

  6. matlab 随机森林算法_(六)如何利用Python从头开始实现随机森林算法

    博客地址:https://blog.csdn.net/CoderPai/article/details/96499505 点击阅读原文,更好的阅读体验 CoderPai 是一个专注于人工智能在量化交易 ...

  7. 保姆级随机森林算法Python教学

    摘要 机器学习算法是数据挖掘.数据能力分析和数学建模必不可少的一部分,而随机森林算法和决策树算法是其中较为常用的两种算法,本文将会对随机森林算法的Python实现进行保姆级教学. 0 绪论       ...

  8. gbdt 算法比随机森林容易_用Python实现随机森林算法

    CDA数据分析师 出品 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.bagging(bootstrap aggregating 的缩写)算法从训练数据 ...

  9. Python+sklearn随机森林算法使用入门

    随机森林是一种集成学习方法,基本思想是把几棵不同参数的决策树(参考:Python+sklearn决策树算法使用入门)打包到一起,每棵决策树单独进行预测,然后计算所有决策树预测结果的平均值(适用于回归分 ...

最新文章

  1. 【牛客每日一题】tokitsukaze and Soldier 题目精讲 贪心、优先队列、堆
  2. 写给Lewis的-URL处理几个关键的函数parse_url、parse_str与http_build_query
  3. 【汇编语言(第3版)王爽】第八章学习内容
  4. aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍
  5. Linux如何建立用户(组)及调整用户(组)属性(案列+详细指令)
  6. 【入门4】数组 (今天刷洛谷了嘛)
  7. 微信小程序和vue双向绑定哪里不一样_浅析Vue 和微信小程序的区别、比较
  8. win11鼠标指针如何设置 Windows11鼠标指针的设置方法
  9. 深度优先搜索-和为某数的所有组合
  10. 新增10亿元作支持 重庆将多举措提升科技创新能力
  11. Pyinstaller使用教程
  12. 高德地图如何取消订单_一文教你如何爬取高德地图
  13. c语言常用绘图软件有哪些,数学绘图软件有哪些?好用的数学绘图软件推荐
  14. C++加速代码(DAY 39)
  15. android9系统WIFI提示已连接,无法访问互联网
  16. python字典包含指定键_筛选python字典中键包含特定字符串的项
  17. MySQL错误ERROR 1045 (28000): Access denied for user 'root'@'localhos
  18. 斩波电路---视频课笔记
  19. navicat随手记
  20. windows的C盘根目錄下中文文件夾重命名

热门文章

  1. 医药企业引进APS系统的效益
  2. Windows 7 天气 小工具 无法连接到服务 解决方案
  3. 恋爱话术小程序源码-土味情话,恋爱导师支持多种流量主模式
  4. MATLAB--向量操作(1.3)
  5. 【物联网开发基础】}评估板、开发板、单板机、单片机和核心板之间有什么区别?
  6. 物联网技术:物联网技术在农业中的应用
  7. 【信息检索】链接分析
  8. mysql show 命令详解_MYSQL show 命令详解
  9. 基于pyecharts的中医药知识图谱可视化
  10. 浙大远程教育离线作业计算机2,浙大远程教育操作系统原理离线作业参考答案.doc...