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

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.mzph.cn/bicheng/27577.shtml

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

相关文章

Java17 --- RabbitMQ搭建集群

目录 一、使用docker搭建集群 二、使用docker安装Haproxy 三、使用springboot进行测试 3.1、创建交换机与队列关系 四、仲裁队列替代镜像队列 4.1、创建交换机与队列关系 一、使用docker搭建集群 由于contos7环境不能装rabbitmq3.13版本的,采用docker安装避…

elment表格组件a-table属性formatter

table中列属性formatter&#xff0c;格式化表格数据->处理表格中显示的内容&#xff08;像根据状态数值去显示当前状态对应的中文&#xff0c;或者处理一些是与否相间等&#xff09; 实现代码 <template><el-table-column v-for"(item,index) in columns&quo…

判断两张图片是否相似

判断两张图片是否相似 要判断两张图片是否相似&#xff0c;你可以使用多种方法&#xff0c;其中包括结构相似性指数&#xff08;SSIM&#xff09;和 perception hash 等。以下是使用 SSIM 和 perception hash 进行判断的示例代码。 安装必要的包 确保你已经安装了 scikit-im…

自制一个Linux live固件镜像ISO可引导系统

使用母盘镜像制作两个虚拟&#xff0c;来制作一个包含基本需求的filesystem.squashfs文件&#xff0c;具体看下面的链接 使用的安装镜像 是Linux Mint 制作好的成品 https://cloud.189.cn/t/U32Mvi7FnyA3 &#xff08;访问码&#xff1a;2nbo&#xff09; 最简单制作LIVE CD…

Python编程语言学习高阶:解决在 Python 项目中跨目录导入模块的问题的多种方法教程实战及其优劣对比

Python编程语言学习高阶:解决在 Python 项目中跨目录导入模块的问题的多种方法教程实战及其优劣对比 目录 解决在 Python 项目中跨目录导入模块的问题的多种方法教程实战及其优劣对比 T1、修改 sys.path:适用于简单的脚本开发和调试,灵活但不适合大规模项目 实现代码 T2…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第十一周) - 自然语言处理扩展研究

自然语言处理扩展研究 1. 多语言研究2. 语言锚定3. 伦理问题 1. 多语言研究 多语言(Multilinguality)是NLP的一个重要研究方向&#xff0c;旨在开发能够处理多种语言的模型和算法。由于不同语言在语法、词汇和语义结构上存在差异&#xff0c;这成为一个复杂且具有挑战性的研究…

【Android】文本服务器获取内容

链接web服务器&#xff0c;打开apaquee 收到数据 public void getNewsIndexData() throws Exception{String sUrl"http://10.107.24.12:8080/newsIndex.json";URL urlnew URL(sUrl);HttpURLConnection urlConn(HttpURLConnection) url.openConnection();InputStrea…

Web前端经验:探索、挑战与成长的奇幻之旅

Web前端经验&#xff1a;探索、挑战与成长的奇幻之旅 在数字世界的广阔天地中&#xff0c;Web前端技术犹如一把神奇的钥匙&#xff0c;打开了通往无限创意与可能的大门。身为一名Web前端开发者&#xff0c;我积累了丰富的经验&#xff0c;这些经验既是我成长的见证&#xff0c…

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】 题目描述&#xff1a;解题思路一&#xff1a;滑动窗口与排序解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操…

RAG工作流在高效信息检索中的应用

介绍 RAG&#xff08;Retrieval Augmented Generation&#xff09;是一种突破知识限制、整合外部数据并增强上下文理解的方法。 由于其高效地整合外部数据而无需持续微调&#xff0c;RAG的受欢迎程度正在飙升。 让我们来探索RAG如何克服LLM的挑战&#xff01; LLM知识限制大…

【docker】如何修改已有容器的端口映射

本文首发于 ❄️慕雪的寒舍 docker修改已有容器的端口映射 参考 https://www.jb51.net/article/257510.htm 1.需求 之前我在我的绿联nas上部署了一个centos容器&#xff0c;当时脑子抽了&#xff0c;没想起来要多映射几个端口。只映射了容器的22端口&#xff08;ssh&#xff0…

Bigtable: A Distributed Storage System for Structured Data

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

【数学】【机器学习】什么是隐马尔可夫模型 (HMM)?

文章目录 隐马尔可夫模型 (HMM)背景公式示例题目详细讲解Python代码求解实际生活中的例子 什么是隐变量背景隐含变量的意义举例说明HMM的三个基本问题示例 隐马尔可夫模型 (HMM) 背景 隐马尔可夫模型&#xff08;Hidden Markov Model, HMM&#xff09;是一种统计模型&#xf…

有监督学习——梯度下降

1. 梯度下降 梯度下降&#xff08;Gradient Descent&#xff09;是计算机计算能力有限的条件下启用的逐步逼近、迭代求解方法&#xff0c;在理论上不保证下降求得最优解。 e.g. 假设有三维曲面表达函数空间&#xff0c;长(x)、宽(y)轴为子变量&#xff0c;高(z)是因变量&…

大模型企业落地:汽车行业知识大模型应用

前言 在当今这个信息爆炸的时代&#xff0c;知识管理成为了企业提升核心竞争力的关键。特别是在汽车行业这样一个技术密集、信息量庞大的领域&#xff0c;如何高效管理和利用知识资源&#xff0c;成为了每个企业必须面对的挑战。 汽车行业的知识管理痛点 汽车行业作为现代工…

10.错误处理

标题 一、概述二、panic!与不可恢复错误2.1 出错时2.2 示例2.3 panic!的 backtrace 三、Result 与可恢复的错误3.1 引入3.2 错误示例3.3 传播错误1&#xff09;概念2&#xff09;传播错误示例3&#xff09;传播错误的简写&#xff1a;&#xff1f;运算符 一、概述 Rust将错误分…

springboot网上书店管理系统-计算机毕业设计源码03780

摘 要 网上书店管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、站点管理&#xff08;轮播图&#xff09;用户管理&#xff08;管理员、注册用户&#xff09;内容管理&#x…

NXP RT1060学习总结 - fsl_flexcan 基础CAN函数说明 -2

概要 CAN测试源码&#xff1a; https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理&#xff0c;总共30个基础CAN函数&#xff1b; 该文章只梳理常规CAN&#xff0c;增强型CAN后面再单独梳理。 使用的是RT1064开发板进行测试…

深入理解ReentrantLock

深入理解ReentrantLock 在Java并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是控制多个线程对共享资源访问的重要工具。虽然Synchronized关键字是实现锁的常用方式&#xff0c;但它在功能上比较有限。ReentrantLock是java.util.concurrent.locks包中提供的一个更加灵…

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》

系列文章 FreeRTOS移植&#xff1a;STM32L476 nucleo-L476RG 开发板《01》 说明 上一篇 FreeRTOS移植&#xff1a;STM32L476 nucleo-L476RG 开发板《01》 主要讲了一下如何快速搭建一个 STM32 裸机工程&#xff0c;其实 STM32CubeMX 可以生成 FreeRTOS 的工程&#xff0c;这就…