随机森林算法进行预测(+调参+变量重要性)--血友病计数数据

1.读取数据

        所使用的数据是血友病数据,如有需要,可在主页资源处获取,数据信息如下:

ddcdd574478b441d91e491390799e8da.png

import pandas as pd
import numpy as np
hemophilia = pd.read_csv('D:/my_files/data.csv')  #读取数据

2.数据预处理

        在使用机器学习方法时,都需要注意变量的数据类型,比如此处的hiv,其实是哑变量,但是使用1,2表示,计算机就会将其当成数值变量分析,所以对这类变量需要先进行处理,此处直接转换,也可采用one-hot编码进行处理。

print("hemophilia每个特征缺失的数目为:\n",hemophilia.isnull().sum())  #查看缺失值
print(hemophilia.dtypes)   # 查看数据类型
'''
hiv        object
factor     object
year        int64
age         int64
py        float64
deaths      int64
dtype: object
'''#数值变量化为分类变量
hemophilia['hiv']=hemophilia['hiv'].astype(object) 
hemophilia['factor']=hemophilia['factor'].astype(object)
new_hemophilia=pd.get_dummies(hemophilia,drop_first=True)   #drop_first=True--删去一列,如hiv,处理后为两列,都是01表示,但只保留一列就足够表示两种状态
new_data=new_hemophilia
new_data.describe(include='all')  #查看基本统计信息
'''year          age  ...     factor_4     factor_5
count  2144.000000  2144.000000  ...  2144.000000  2144.000000
mean     86.847481     7.236007  ...     0.217351     0.199627
std       4.899319     3.810280  ...     0.412539     0.399813
min      78.000000     1.000000  ...     0.000000     0.000000
25%      83.000000     4.000000  ...     0.000000     0.000000
50%      87.000000     7.000000  ...     0.000000     0.000000
75%      91.000000    10.000000  ...     0.000000     0.000000
max      95.000000    14.000000  ...     1.000000     1.000000
'''from sklearn.model_selection import train_test_split
x = new_data.drop(['deaths'],axis=1)   #删去标签列
X_train, X_test, y_train, y_test = train_test_split(x, new_data.deaths, test_size=0.3, random_state=0)  #区分数据集,70%训练集,30%测试集

3.随机森林预测及调参


from sklearn import metrics   #加载包用于计算评价指标
from sklearn.ensemble import RandomForestRegressor   #随机森林回归
rf = RandomForestRegressor(random_state=0)  #random_state=0是随机种子数
rf.fit(X_train, y_train)  #不调参,直接训练模型
y_pred = rf.predict(X_test)
print('MSE of RF: %.3f' %metrics.mean_squared_error(y_test, y_pred))  # %.3f保留三位小数
'''
MSE of RF: 0.306
'''

        在随机森林进行调参时,就是对一些重要参数给定各自的取值范围,再遍历所有参数取值的组合,得到最优参数。这里调整学习率'n_estimators',树深'max_depth',节点最小样本数'min_samples_split',也可以选取其他的参数调整。一次调参每个参数取值不宜太多,否则会很慢,可以找到比较好的区间后减小取值间隔,重复操作;也可以一次调节两个(或一个)参数,找到最优值再对其他参数逐二(或逐一)进行调整,最后使用调整后的参数进行建模。

from sklearn.model_selection import GridSearchCV
param_grid = {'n_estimators':np.arange(10,200,30),      'max_depth' : np.arange(2,7,1),'min_samples_split' :  np.arange(2,10,2)}
GS = GridSearchCV(rf,param_grid,scoring = 'neg_mean_squared_error',cv=5)#取值为scoring“neg_mean_squared_error”,代表使用MSE作为衡量回归树质量的指标,进行五折交叉验证
GS.fit(X_train, y_train)
GS.best_params_  #最佳参数组合
'''
{'max_depth': 4, 'min_samples_split': 8, 'n_estimators': 40}'''
rf = RandomForestRegressor(max_depth = 4, n_estimators = 40,min_samples_split = 8, random_state=0)#使用调参后的参数建立模型
rf.fit(X_train, y_train)  
y_pred = rf.predict(X_test)
print('MSE of RF: %.3f' %metrics.mean_squared_error(y_test, y_pred))
#调参效果不明显,考虑改变调参取值或参数选取,也可能是数据不适合随机森林,不同数据有不同表现
'''
MSE of RF: 0.305
'''

4.随机森林输出变量重要性

        随机森林能够在建模的同时得到变量重要性,可以通过以下方式将变量重要性表示出来。

import matplotlib.pyplot as plt
importances = list(rf.feature_importances_)  #随机森林特征重要性
feature_list = list(x.columns)   #获取变量名
feature_importances = [(feature, round(importance, 2)) for feature, importance in zip(feature_list, importances)]
#feature_importances.pop(0)
feature_importances = sorted(feature_importances, key=lambda x: x[1], reverse=True)
f_list = []
importances_list = []
for i in range(0,8):feature = feature_importances[i][0]importances_r = feature_importances[i][1]f_list.append(feature),importances_list.append(importances_r)
x_values = list(range(len(importances_list)))
plt.figure(figsize=(14, 9))
plt.bar(x_values, importances_list, orientation='vertical')
plt.xticks(x_values, f_list, rotation=25, size =18)
plt.yticks(size =18)
plt.ylabel('Importance',size = 20)
plt.xlabel('Variable',size = 20)
plt.title('RF Variable Importances',size = 22)
#plt.savefig('D:/files/rf变量重要性.png', dpi=1500)    #保存图片到指定位置 dpi--分辨率
plt.show()

​​​​​

        得到变量重要性条形图如下:

1dd1a43a80754e8ca847880903d21e3b.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/350232.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机在网状态-手机在网状态查询-手机在网站状态接口

查询手机号在网状态,返回正常使用、停机、未启用/在网但不可用、不在网(销号/未启用/异常)、预销户等多种状态 直连三大运营商,实时更新,可查询实时在网状态 高准确率-实时更新,准确率99.99% 接口地址&…

Matlab的Simulink系统仿真(simulink调用m函数)

这几天要用Simulink做一个小东西,所以在网上现学现卖,加油! 起初的入门是看这篇文章MATLAB 之 Simulink 操作基础和系统仿真模型的建立_matlab仿真模型搭建-CSDN博客 写的很不错 后面我想在simulink中调用m文件 在 Simulink 中调用 MATLA…

解决Maven依赖引入不成功的问题

解决Maven依赖引入不成功的问题 确认IntelliJ IDEA中Maven的设置是否正确。 file --> settings --> maven 清除无效的jar,进入本地仓库清除或利用bat工具 以下是bat工具内容,运行即可。【把仓库地址换成你自己的地址进行无效jar包清除】 echo o…

复制网页文字和图片到Word中-Word插件-大珩助手

问题整理: 为什么从浏览器的网页上复制文字和图片后,在Word中粘贴时图片无法显示?有没有插件可以将网页中的文字和图片复制到Office Word 中? Word大珩助手是一款功能丰富的Office Word插件,旨在提高用户在处理文档时…

Jenkins三种构建类型

目录 传送门前言一、概念二、前置处理(必做)1、赋予777权限2、让jenkins用户拥有root用户的kill权限3、要运行jar包端口号需要大于1024 三、自由风格软件项目(FreeStyle Project)(推荐)三、Maven项目&#…

Bigtable: A Distributed Storage System for Structured Data

2003年USENIX,出自谷歌,开启分布式大数据时代的三篇论文之一,底层依赖 GFS 存储,上层供 MapReduce 查询使用 Abstract 是一种分布式结构化数据存储管理系统,存储量级是PB级别。存储的数据类型和延时要求差异都很大。…

植物ATAC-seq文献集锦(三)——果实发育篇

ATAC-seq在植物研究领域的应用我们已经介绍2期了,本期我们聚焦ATAC-seq技术在果实发育方向的应用案例。 植物ATAC-seq文献集锦(一)——基因组篇 植物ATAC-seq文献集锦(二)——生长发育篇 文献一:Ident…

electron基础使用

安装以及运行 当前node版本18,按照官网提供操作,npm init进行初始化操作,将index.js修改为main.js,执行npm install --save-dev electron。(这里我挂梯子下载成功了。),添加如下代码至package.…

【AI绘画】教你一个完美的文生图方法,简单易学好上手,新手也能轻松掌握Stable Diffusion使用!

当我们还在思索, AI(人工智能)是否能替代人类的地位, 它已悄然无声, 融入我们生活的点滴细节。 在艺术创作领域, AI技术作为核心力量,展现其无尽的魅力。 AI换脸、AI影像,AI角色、A…

Nas实现软路由OpenWrt安装

文章目录 基本配置步骤 基本配置 NAS:TS-264C 宇宙魔方 步骤 1.下载软路由OpenWrt 下载地址:https://openwrt.org/ 2.下载好以后,需要下载虚拟盘转换工具(StarWind V2V Convert) 下载地址:https://…

sprintboot容器功能

容器 容器功能Spring注入组件的注解Component,Controller,Service,Repository案例演示 Configuration应用实例传统方式使用Configuration 注意事项和细节 Import应用实例 ConditionalConditional介绍应用实例 ImportResource应用实例 配置绑定…

10 SpringBoot 静态资源访问

我们在开发Web项目的时候,往往会有很多静态资源,如html、图片、css等。那如何向前端返回静态资源呢? 以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要把静态资源放在该目录下…

C#——正则表达式详情

正则表达式 正则表达式: 列如判断一个字符串是不是手机号,或者密码是否包含大小写数字等这些要求,可以把这些条件写成一个表达式 创建正则表达式 string s1 "1234adsab1KHGFJD"; // 创建正则时需要在字符串前面加上 Regex r new Regex(&q…

【安卓】在安卓中使用HTTP协议的最佳实践

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

btrace:binder_transaction+eBPF+Golang实现通用的Android APP动态行为追踪工具

一、简介: 在进行Android恶意APP检测时,需要进行自动化的行为分析,一般至少包括行为采集和行为分析两个模块。其中,行为分析有基于规则、基于机器学习、基于深度学习甚至基于大模型的方案,各有各的优缺点,不…

从零开始开发知识付费APP:在线教育系统源码详解

今天,小编将从零开始,详细讲解在线教育系统的源码开发过程,帮助你打造一款功能完善的知识付费APP。 一、需求分析与规划 1.1 市场调研 在开始开发之前,首先要进行市场调研,了解当前市场上的主要竞争对手和用户需求。…

SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细)

1.为什么要有这个需求? 一般当我们自己练习的时候,username和password直接是爆露出来的 假如别人路过你旁边时看到了你的数据库账号密码,他跑到他的电脑打开navicat直接就是一顿连接,直接疯狂删除你的数据库,那可就废…

Redis数据结构学习

Redis 关于redis相关的技术文章我一直没什么思路 直到最近的端午节,我偶然和一个程序员朋友聊到了关于redis数据结构相关的知识点, 所以我决定写一篇文章记录一下 首先我们需要知道redis支持哪些数据类型 Strings (字符串)Lists(列表)Hashes(哈希)Sets(集合)Sorted Sets(有序…

通过语言大模型来学习LLM和LMM(四)

一、大模型学习 新的东西,学习的东西就是多,而且最简单最基础的都需要学习,仿佛一点基础知识都要细嚼慢咽,刨根问底,再加上一顿云里雾里的吹嘘,迷迷糊糊的感觉高大上。其实就是那么一回事。再过一段时日&a…

Java课程设计:基于swing的学生信息管理系统

文章目录 一、项目介绍二、项目展示三、源码展示四、源码获取 一、项目介绍 这款Java swing实现的学生信息管理系统和jsp版本的功能很相似,简单的实现了班级信息的增删改查,学生信息的增删改查,数据库采用的是mysql,jdk版本不限&…