大家好,我是菜鸟君,之前跟大家聊过R语言的随机森林建模,指路 R语言 | 随机森林建模实战(代码+详解),作为刚过完1024节日的码农算法工程师来说,怎么可能只会用一种语言呢?今天就来说说Python怎么进行随机森林的模型构建。

首先,加载一些我们需要的库。需要注意的是,我们想进行分类预测,所以加载的是随机森林分类功能。如果想进行回归预测,需要加载随机森林回归功能哦(RandomForestRegression)。

# -*- coding: utf-8 -*-from sklearn.datasets import load_iris   #iris数据集from sklearn.ensemble import RandomForestClassifier  #随机森林分类from sklearn import metrics  #模型结果指标库import pandas as pd import numpy as npimport matplotlib.pyplot as plt #画图

然后,我们加载数据集。今天用到的是自带的鸢尾花数据集。

# 还是用鸢尾花数据集吧iris=load_iris()#iris的4个属性,标签是花的种类print (iris['target'].shape)

建模这就来了!这一步,我们一共构建了两个模型,rf1采用默认参数,也就是括号里为空。rf2指定了一些参数。都是用前130个数据作为训练集。我们可以对比下两者的结果有啥差异。

## 随机森林分类器rf1 = RandomForestClassifier()rf2 = RandomForestClassifier(n_estimators=10, max_depth=None,min_samples_split=3, random_state=0)rf1.fit(iris.data[:130],iris.target[:130]) #用前130个数据作为训练集rf2.fit(iris.data[:130],iris.target[:130]) #用前130个数据作为训练集

模型构建结束以后,就轮到测试集了。测试集与训练集一定是分开、独立的。不然就没法客观衡量模型的预测效果啦。在这里,我们的测试集是从131行到150行的鸢尾花数据集。

testset=iris.data[131:150]y_true = iris.target[131:150]

接下来就是把两个随机森林模型在同一个测试集上进行预测,分别打印出预测的结果。

y_pre1 = rf1.predict(testset)y_pre2 = rf2.predict(testset)print ('rf1 prediction;',y_pre1)print ('rf2 prediction;',y_pre2)

接下来就是结果部分啦。

# Calculate metricsmse1 = metrics.mean_squared_error(y_true, y_pre1)mse2 = metrics.mean_squared_error(y_true, y_pre2)print("MSE1: %.4f" % mse1)print("MSE2: %.2f" % mse2)

从MSE结果看出,第一个模型rf1的均方误差比第二个模型rf2的均方误差要更大一点。说明rf1的结果比rf2要差。

Python sklearn的metrics库十分强大,这里只是用MSE这个指标做个示范,还有准确率、灵敏度、特异度等指标,只要你需要,基本都能从这个库里找到。

这是文档,给你们看一部分指标

最后,随机森林可以显示各特征对分类的贡献,即重要性评分。我们可以打印出重要性的分数,也可以基于这个分数来进行可视化展示。

feature_importance = rf2.feature_importances_# make importances relative to max importancefeature_importance = 100.0 * (feature_importance / feature_importance.max())print(feature_importance) #use inbuilt class feature_importances #plot graph of feature importances for better visualizationfeat_importances = pd.Series(rf1.feature_importances_, index=pd.DataFrame(iris.data).columns)feat_importances.nlargest(5).plot(kind='barh')plt.title('Variable Importance')plt.xlabel('Relative Importance')plt.show()

天气变冷了,只要代码不报错,内心就不会觉得冷,加油打工人!下个周末咱们再约,嗷~

交流QQ群:83837564

B站视频:谁说菜鸟不会数据分析

别忘了点“在看

基于python的随机森林回归实现_PYTHON | 随机森林实战(代码+详解)相关推荐

  1. python绘制条形图用什么函数_python绘制条形图方法代码详解

    1.首先要绘制一个简单的条形图 import numpy as np import matplotlib.pyplot as plt from matplotlib import mlab from ...

  2. python语法错误概述_Python 错误和异常代码详解

    程序中的错误一般被称为 Bug,无可否认,这几乎总是程序员的错... 程序员的一生,始终伴随着一件事 - 调试(错误检测.异常处理).反反复复,最可怕的是:不仅自己的要改,别人的也要改...一万头草泥 ...

  3. python 制作抽奖_python制作抽奖程序代码详解

    实现制作抽奖程序,需要认知到我们可以看到一般抽奖程序界面上是有很多按钮的,比如中奖区域,按键开始区域等等,所以我们先要设置界面,然后把这些按钮添加到界面中去,想必这对于学过tkinter的同学应该不难 ...

  4. python如何设置画布开始位置_Python绘图篇——Turtle库详解(一)

    交流学习python编程技术及行业动态,点击上方"蓝字"关注我们 Python绘图篇--Turtle库详解(一) 写在前面 ↓ 注:本教程基于64位windows系统(鼠标右键点击 ...

  5. 用python写一个简单的爬虫_Python实现简易Web爬虫详解

    编辑推荐: 本文主要介绍了Python实现简易Web爬虫详解,希望对大家有帮助. 本文来自于脚本之家 ,由火龙果软件Alice编辑,推荐. 简介: 网络爬虫(又被称为网页蜘蛛),网络机器人,是一种按照 ...

  6. python中的面向对象编程讲解_Python中的面向对象编程详解(上)

    创建类 Python 类使用 class 关键字来创建.简单的类的声明可以是关键字后紧跟类名: 代码如下: class ClassName(bases): 'class documentation s ...

  7. python三维图能画地图_Python地图绘制实操详解

    网上有很多地图绘制的教程,更多趋向于全国地图或者省级地图,但有时我们需要到县级.闲得慌,今天以贵州省毕节市为例,分享一篇Python县级地图的绘制(遥想当时差点把百度翻了个底朝天),希望对需要的你能有 ...

  8. python编写一个登陆验证程序_Python实现简单登录验证详解

    本文实例为大家分享了简单的Python登录验证,供大家参考,具体内容如下 编写登录接口 要求:1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 #coding=utf-8 __aut ...

  9. python strptime函数转时间数组_python time.strptime格式化实例详解

    在python的时间使用时,我们无非就是输出字符串的形式,又或者是其他的形式跟字符串之间的来回转换.时间数组对于我们获取具体的年或是天数,都是常用的首段.本篇需要讲到的time.strptime函数, ...

最新文章

  1. TVMNN编译Compiler栈
  2. Eclipse最新插件的下载地址大全[收集整理] zt
  3. 九宫格 java_java输出九宫格的程序问题
  4. error: The following untracked working tree files would be overwritten by merge:
  5. java爬取html过快,需要输入验证码
  6. Jetson 系列——nvidia jetson nano设置声卡
  7. php 读取rtf文件,rtf是什么格式?
  8. APP推广运营小技巧:可复制的APP推广渠道
  9. 计算机考研404是什么意思,研路分享:我的404分考研高分心得体会
  10. Oracle 12c 数据库可插拔体系结构
  11. 【小游戏】2D游戏黄金矿工GoldMiner(关卡模式)
  12. 【超强干货】蘑菇街App的组件化之路
  13. Win10注册表无法保存对权限所作的更改拒绝访问
  14. 微信小程序内嵌H5页面实现微信支付
  15. 音频剪辑合成 php,教你如何剪辑多个视频合并成一个 视频剪辑合并软件
  16. word 上标快捷方式ctrl+shift++不起作用的可能原因
  17. GBDT,XGBoost和LightBoost对比
  18. 批次级别和批次库存的后台字段
  19. ps意外崩溃_Mark!小白实用PS小技巧,秒变PS达人
  20. 3. ackerman函数的递归实现算法用java语言_ackerman递归

热门文章

  1. go reflect的用法
  2. java基础--网络编程
  3. Collection和Map中易考的一些知识点
  4. leetcode 678. Valid Parenthesis String | 678. 有效的括号字符串(带缓存的暴力递归)
  5. leetcode 112. Path Sum, 113. Path Sum II | 112,113. 路径总和 I, II(Java)
  6. 【SQL Server 2017】18456错误/管道的另一端无任何进程错误 解决方法
  7. 网络协议之:socket协议详解之Socket和Stream Socket
  8. abap视图字段限制_在 Laravel 控制器中进行表单请求字段验证
  9. Netty之Channel源代码分析
  10. Mining Precision Interface From Query Logs -- 学习笔记(二)