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

news2024/11/24 11:44:08

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.coloradmin.cn/o/1826865.html

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

相关文章

模型量化 剪枝bevfusion

量化 剪枝 shared mem 只在block内共享,device glob mem能够所有线程共享

ChatGPT真实的上下文长度是多少?不是128K!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之…

(Java微服务项目实战)dtpay聚合支付系统对账管理模块系统设计

1 聚合支付系统对账流程 dtpay聚合支付系统对账模块主要涵盖商户侧对账和渠道侧对账、平台侧对账,本文主要分析渠道侧对账。dtpay聚合支付系统通过支付渠道微信、支付宝等产生的支付退款交易数据需要和平台侧产生的数据进行交易数据比对。接下来我们具体分析对账流…

【Redis进阶】RDB持久化策略

1. 浅谈持久化 持久化:能够在重启主机/进程的时候,将数据从硬盘中恢复到内存的特性。 持久化相信大家都是不陌生的,毕竟MySQL中事务ACID四大特性中就包含持续性这样的特点,所谓持久化,本质上就是将数据保存在硬盘上&a…

PFA 反应罐内衬特氟龙 润滑绝缘行业加工 匠心工艺

PFA反应罐别名也叫反应瓶,储样罐,清洗罐等。可作为样品前处理实验中消解样品和中低压溶样的反应容器,广泛应用于半导体分析、新材料、新能源、同位素分析等。 PFA反应罐规格参考:250ml、300ml、350ml、500ml、1L等。 产品特点&…

python爬虫爬电影数据

使用python 爬了下豆瓣电影,仅供学习。 目标链接主页 获取div内容 保存爬出来的数据

【网络编程】多进程服务器端

并发服务器的实现 多进程服务器:通过创建多个进程提供服务多路复用服务器:通过捆绑并统一管理IO对象提供服务。多线程服务器:通过生成与客户端等量的线程提供服务。、 理解进程process 定义:占用内存空间的正在运行的程序。 CPU核和进程数:1个CPU 中…

甘肃这款饼子很火 你是否有吃过呢

白吉饼那独特的外形,圆圆的十分可爱。👏它的表皮酥脆,内里绵软,麦香四溢。😋拿在手里沉甸甸的,就知道用料十足。 无论是直接吃,感受那纯粹的面香,还是夹上腊汁肉,变成美味…

【日记】常去的那家饭馆转让了……(399 字)

正文 晚上吃饭,常去的那家饭馆门市转让了,不做了。sad。 不久之前,临近下班了,我忘了报一个表给副行长,那时候系统已经进不去了,查不了数据。于是我随便转发了一张以前的日报表给他,日期都没改。…

面试官考我Object类中的所有方法及场景使用?我...

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java 知识点啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯&a…

Mac M3 Pro 部署Spark-2.3.2 On Hive-3.1.3

mac的配置如下 1、下载安装包 官网 Apache Projects Releases 在search中搜索hadoop、hive spark : Index of /dist/spark/spark-2.3.2 网盘 Hadoop https://pan.baidu.com/s/1p4BXq2mvby2B76lmpiEjnA?pwdr62r 提取码: r62r Hive https://pan.baidu.com/s/…

c++的lamda表达式

作用: 弥补了main函数里面不可以定义函数的缺陷&#xff0c;减少了全局变量的声明 可以在main里面搭建小的构件&#xff0c;如下&#xff1a; #include<bits/stdc.h> #define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define int long long #define loop…

rsa加签验签C#和js、java、微信小程序互通

js实现rsa加签验签 https://github.com/kjur/jsrsasign 11.1.0版本 解压选择需要的版本&#xff0c;这里选择all版本了 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>JS RSA加签验签</title&g…

Java——变量作用域和生命周期

一、作用域 1、作用域简介 在Java中&#xff0c;作用域&#xff08;Scope&#xff09;指的是变量、方法和类在代码中的可见性和生命周期。理解作用域有助于编写更清晰、更高效的代码。 2、作用域 块作用域&#xff08;Block Scope&#xff09;&#xff1a; 块作用域是指在…

SQLserver前五讲课堂笔记

第一讲 基本内容 为什么要学习数据库系统?什么是数据库?什么是数据库系统?什么是数据库管理系统&#xff1f;本课程学什么以及学到什么程度? 重点难点 一组概念的区分&#xff1a;数据库、数据库系统和数据库管理系统熟悉表 的相关要素及术语熟悉数据库系统的构成(工作…

Springboot项目ES报异常query_shard_exception

详细异常信息如下&#xff1a; {"error": {"root_cause": [{"type": "query_shard_exception","reason": "failed to create query: {\n \"bool\" : {\n \"filter\" : [\n {\n \…

【docker hub镜像源失效】2024年6月6日 docker 国内镜像源失效

文章目录 概述中科大镜像源阿里镜像源其他镜像源可用的镜像源写在最后 之前违反社区规定了&#xff0c;做了和谐 概述 大家都知道使用docker hub官方镜像需要魔法&#xff0c;虽然大部人有魔法&#xff0c;但是网速也是很慢&#xff0c;还有部分同学没有&#xff0c;全靠国内各…

Linux-Https协议

文章目录 前言一、Https协议二、常见的加密方式对称加密非对称加密数据摘要&&数据指纹中间人攻击 三、Https的加密历程方案1-只使用对称加密方案2-只使用非对称加密方案3-双方都使用非对称加密方案4-非对称加密对称加密 前言 之前我们学习了Http协议&#xff0c;也试着…

Bug:SSH Failed Permission Denied(完美解决)

Bug&#xff1a;SSH Failed Permission Denied&#xff08;完美解决&#xff09; 今天我本机mac通过ssh访问linux服务器时报错&#xff1a;SSH Failed Permission Denied 思路&#xff1a; linux服务器sshd是否开启linux /etc/ssh/sshd_config配置是否正确&#xff08;是否开启…

YouTube583美元账户做到一千多万美元,125万粉的顶级交易员

油管125万粉丝的Ross Cameron,一位把583美元账户做到一千多万美元。他说他曾经也是像无头苍蝇一样交易,最终凄惨爆仓,也就是在爆仓之后,他终于开始沉下心来研究交易策略,终于终于,他有一天找到了交易模型,并用它执行至今。 Ross Cameron无疑是最成功的日内交易员之一,而…