网站加速代码,移动网站设计心得,阿里云建立网站,私人网站设计公司公司#x1f935;♂️ 个人主页#xff1a;艾派森的个人主页 ✍#x1f3fb;作者简介#xff1a;Python学习者 #x1f40b; 希望大家多多支持#xff0c;我们一起进步#xff01;#x1f604; 如果文章对你有帮助的话#xff0c; 欢迎评论 #x1f4ac;点赞#x1f4… ♂️ 个人主页艾派森的个人主页 ✍作者简介Python学习者 希望大家多多支持我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 喜欢大数据分析项目的小伙伴希望可以多多支持该系列的其他文章
大数据分析案例合集 大数据分析案例-基于随机森林算法预测人类预期寿命大数据分析案例-基于随机森林算法的商品评价情感分析大数据分析案例-用RFM模型对客户价值分析(聚类)大数据分析案例-对电信客户流失分析预警预测大数据分析案例-基于随机森林模型对北京房价进行预测大数据分析案例-基于RFM模型对电商客户价值分析大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型大数据分析案例-基于决策树算法构建员工离职预测模型 大数据分析案例-基于KNN算法对茅台股票进行预测 大数据分析案例-基于多元线性回归算法构建广告投放收益模型大数据分析案例-基于随机森林算法构建返乡人群预测模型大数据分析案例-基于决策树算法构建金融反欺诈分类模型 目录
1.项目背景
2.项目简介
2.1项目说明
2.2数据说明
2.3技术工具
3.算法原理
4.项目实施步骤
4.1理解数据
4.2数据预处理
4.3探索性数据分析
4.3.1糖尿病确诊比例
4.3.2查看年龄和IBM的分布
4.3.3分析身体/心里健康对糖尿病的影响
4.3.4分析吸烟对糖尿病的影响
4.3.5饮食对糖尿病的影响
4.3.6喝酒对糖尿病的影响
4.3.7相关性分析
4.4特征工程
4.5模型构建
4.6模型评估
4.7模型预测
5.实验总结
源代码 1.项目背景 糖尿病是一种严重的慢性代谢性疾病其主要特征是血糖水平持续升高导致机体内多个系统和器官受损。据世界卫生组织WHO的数据全球有大约4.60亿成年人患有糖尿病这个数字在过去几十年里持续增长。糖尿病不仅对患者的生活质量造成了严重影响还会增加心血管疾病、肾脏疾病、神经系统疾病等多种并发症的风险对医疗资源和社会经济产生了巨大压力。 早期的糖尿病诊断对于控制疾病进程、减少并发症风险具有重要意义。然而糖尿病的早期症状不明显很多患者在确诊时已经存在一定的并发症。因此开发一种准确、可靠的糖尿病确诊预测模型对于早期干预和治疗至关重要。 机器学习和人工智能技术在医疗领域的应用日益广泛尤其是在疾病诊断、预测和患者管理方面。基于机器学习算法构建糖尿病确诊预测模型可以利用大量的临床数据和生物指标来辅助医生进行糖尿病的早期筛查和诊断。LightGBMLight Gradient Boosting Machine作为一种梯度提升树算法在处理高维、非线性数据方面具有出色的性能能够从复杂的数据中挖掘出潜在的模式和关联关系因此被广泛用于医疗数据分析和预测建模。
2.项目简介
2.1项目说明 本研究旨在基于LightGBM算法构建糖尿病确诊预测模型通过分析临床数据中的生物特征、生活习惯、家族病史等因素实现对患病风险的预测。通过该模型可以为医生提供更多的客观数据支持帮助其做出更准确的诊断和治疗决策同时也可以为患者提供个性化的健康管理建议从而有效降低糖尿病的发病率和并发症风险改善患者的生活质量。
2.2数据说明 本实验数据集来源于Kaggle原始数据集共有70692条数据18列特征变量具体各变量解释如下
Age:13级年龄组(1 18-24 / 2 25-29 / 3 30-34 / 4 35-39 / 5 40-44 / 6 45-49 / 7 50-54 / 8 55-59 / 9 60-64 / 10 65-69 / 11 70-74 / 12 75-79 / 13 80以上)
Sex:患者的性别(1:男性;0:女)
HighChol:0 无高胆固醇1 高胆固醇
CholCheck: 0 5年内无胆固醇检查1 5年内有胆固醇检查
BMI:身体质量指数
Smoker:你一生中抽过至少100支烟吗?[注:5包 100支]0 否1 是
HeartDiseaseorAttack:冠心病(CHD)或心肌梗死(MI) 0 否1 有
PhysActivity:过去30天内的体力活动(不包括作业0 否1 有)
Fruits:每天至少吃一次水果0 不吃1 吃
Veggies:每天吃蔬菜1次或更多0 不1 是
HvyAlcoholConsump:(成年男性每周14杯成年女性每周7杯)0 否1 是
GenHlth:你认为你的总体健康状况是:1-5级1 极好2 很好3 好4 一般5 差
MentHlth:心理健康状况差的天数1-30天
PhysHlth:过去30天内身体疾病或受伤天数1-30
DiffWalk:你走路或爬楼梯有严重困难吗?0 否1 是
Stroke:你曾经中风过。0 否1 是
HighBP: 0 不高BP 1 高BP
Diabetes:0 没有糖尿病1 有糖尿病
2.3技术工具
Python版本:3.9
代码编辑器jupyter notebook
3.算法原理 LightGBM算法基本原理 GBDT算法的基本思想是把上一轮的训练残差作为下一轮学习器训练的输入即每一次的输入数据都依赖于上一次训练的输出结果。因此这种训练迭代过程就需要多次对整个数据集进行遍历当数据集样本较多或者维数过高时会增加算法运算的时间成本并且消耗更高的内存资源。 而XGBoost算法作为GBDT的一种改进在训练时是基于一种预排序的思想来寻找特征中的最佳分割点这种训练方式同样也会导致内存空间消耗极大例如算法不仅需要保存数据的特征值还需要保存特征排序的结果在遍历每一个分割点的时候都需要进行分裂增益的计算消耗的代价大特别是当数据量级较大时这种方式会消耗过多时间。 为了对这些问题进行优化2017年微软公司提出了LightGBM算法Light Gradient Boosting Machine该算法也是基于GBDT算法的改进但相较于GBDT、XGBoost算法LightGBM算法有效地解决了处理海量数据的问题在实际应用中取得出色的效果。LightGBM算法主要包括以下几个特点直方图算法寻找最佳分裂点、直方图差加速、Leaf-wise树生长策略、GOSS、EFB、支持类别型特征、高效并行以及Cache命中率优化等。
1直方图Histogram算法减少大量计算与内存占用 XGBoost算法在进行分裂时需要预先对每一个特征的原始数据进行预排序而直方图Histogram算法则是对特征的原始数据进行“分桶#bin”把数据划分到不同的离散区域中再对离散数据进行遍历寻找最优划分点。这里针对特征值划分的每一个“桶”有两层含义一个是每个“桶”中样本的数量另一个是每个“桶”中样本的梯度和一阶梯度和的平方的均值等价于均方损失。 可以看出通过直方图算法可以让模型的复杂度变得更低并且特征“分桶”后仅保存了的离散值大大降低内存的占用率。其次这种“分桶”的方式从某种角度来看相当于对模型增加了正则化可以避免模型出现过拟合。 值得注意的是直方图算法是使用了bin代替原始数据相当于增加了正则化这也意味着有更多的细节特征会被丢弃相似的数据可能被划分到相同的桶中所以bin的数量选择决定了正则化的程度bin越少惩罚越严重过拟合的风险就越低。 另外在LightGBM直方图算法中还包括一种直方图作差优化即LightGBM在得到一个叶子的直方图后能够通过直方图作差的方式用极小的代价得到其兄弟叶子的直方图如上图所示当得到某个叶子的直方图和父节点直方图后另一个兄弟叶子直方图也能够很快得到利用这种方式LightGBM算法速度得到进一步提升。
2带深度限制的Leaf-wise的叶子生长策略减少大量计算、避免过拟合 GBDT与XGBoost模型在叶子生长策略上均采用按层level-wise分裂的方式这种方式在分裂时会针对同一层的每一个节点即每次迭代都要遍历整个数据集中的全部数据这种方式虽然可以使每一层的叶子节点并行完成并控制模型的复杂度但也会产生许多不必要搜索或分裂从而消耗更多的运行内存增加计算成本。 而LightGBM算法对其进行了改进使用了按叶子节点leaf-wise分裂的生长方式即每次是对所有叶子中分裂增益最大的叶子节点进行分裂其他叶子节点则不会分裂。这种分裂方式比按层分裂会带来更小的误差并且加快算法的学习速度但由于没有对其他叶子进行分裂会使得分裂结果不够细化并且在每层中只对一个叶子不断进行分裂将增大树的深度造成模型过拟合[25]。因此LightGBM算法在按叶子节点生长过程中会限制树的深度来避免过拟合。
3单边梯度采样技术 (减少样本角度) 在梯度提升算法中每个样本都有不同梯度值样本的梯度可以反映对模型的贡献程度通常样本的梯度越大贡献给模型的信息增益越多而样本的梯度越小在模型中表现的会越好。 举个例子来说这里的大梯度样本可以理解为“练习本中的综合性难题”小梯度样本可以理解为“练习本中的简单题”对于“简单题”平时做的再多再好而“难题”却做的很少在真正的“考试”时还是会表现不好。但并不意味着小梯度样本“简单题”就可以直接剔除不用参与训练因为若直接剔除小梯度样本数据的分布会发生改变从而影响模型的预测效果。 因此LightGBM算法引入了单边梯度采样技术Gradient-based One-Side SamplingGOSS其基本思想就是从减少样本的角度出发利用样本的梯度大小信息作为样本重要性的考量保留所有梯度大的样本点“保留所有难题”对于梯度小的样本点“简单题”按比例进行随机采样这样既学习了小梯度样本的信息也学习了大梯度样本的信息“平时难题都做简单题做一部分在面临真正的考试时才可能稳定发挥甚至超水平发挥”在不改变原始数据分布的同时减小了样本数量提升了模型的训练速度。
4互斥特征捆绑减少特征角度 高维度的数据通常是非常稀疏的并且特征之间存在互斥性例如通过one-hot编码后生成的几个特征不会同时为0这种数据对模型的效果和运行速度都有一定的影响。 通过互斥特征捆绑算法Exclusive Feature BundlingEFB可以解决高维度数据稀疏性问题如下图中设特征1、特征2以及特征3互为互斥的稀疏特征通过EFB算法将三个特征捆绑为一个稠密的新特征然后用这一个新特征替代原来的三个特征从而实现不损失信息的情况下减少特征维度避免不必要0值的计算提升梯度增强算法的速度。 总的来说LightGBM是一个性能高度优化的GBDT 算法也可以看成是针对XGBoost的优化算法可以将LightGBM的优化用公式表达如下式LightGBM XGBoost Histogram GOSS EFB 4.项目实施步骤
4.1理解数据
导入数据挖掘常用的第三方库然后加载数据集 查看数据集大小 查看数据基本信息 查看数值型变量的描述性统计 4.2数据预处理
统计缺失值情况 发现原始数据集中各变量不存在缺失值
检测原始数据集是否存在重复值 结果为True说明原始数据集存在重复值需要处理 这里我们直接删除即可
4.3探索性数据分析
4.3.1糖尿病确诊比例 可以发现数据集还是平衡的确诊和非确诊比例几乎相同。
4.3.2查看年龄和IBM的分布 年龄和BMI均为正态分布
4.3.3分析身体/心里健康对糖尿病的影响 总体健康呈正态分布中位数为3.0
Physical Health仍然很重但在30时增加
心理健康问题很严重这意味着更多人的心理健康问题更少
4.3.4分析吸烟对糖尿病的影响 男女比例相对相等但女性略占优势
吸烟者与非吸烟者的比例相对相等但非吸烟者占主导地位
更多的人拥有健康的心脏
越来越多的人进行体育锻炼
4.3.5饮食对糖尿病的影响 越来越多的人经常吃水果
越来越多的人经常吃蔬菜
4.3.6喝酒对糖尿病的影响 少量的酗酒者
更多从未经历过中风的人
高血压患者的数量很高
4.3.7相关性分析 4.4特征工程
准备建模用到的数据集然后拆分数据集为训练集和测试集 4.5模型构建 对比四个模型我们发现LightGBM算法模型准确率最高故我们最终选取其作为实验模型。
4.6模型评估 打印特征重要性评分并可视化 可以发现BMI、年龄、身心健康对糖尿病的影响最大重要性程度最大。
4.7模型预测
随机抽取10个预测结果来检测模型效果发现10个中错误一个模型效果还不错。 5.实验总结 本研究旨在基于LightGBM算法构建糖尿病确诊预测模型通过分析临床数据中的生物特征、生活习惯、家族病史等因素实现对糖尿病患病风险的预测。经过数据采集、特征工程和模型训练等一系列步骤我们得出以下总结 数据收集和预处理 我们收集了大量包括生物特征、生活习惯、家族病史等信息的临床数据。在数据预处理阶段我们进行了缺失值填充、特征标准化等操作确保数据的完整性和一致性。 特征工程 通过对数据进行特征选择和提取我们选择了对糖尿病预测具有重要影响的特征。这些特征可以包括血糖水平、体质指数、年龄、性别等因素。 模型构建和训练 我们选择了LightGBM作为预测模型这是一种基于梯度提升树的算法能够有效处理高维、非线性数据并能从复杂数据中学习出准确的模式。我们将经过特征工程处理后的数据分为训练集和测试集利用训练集对模型进行训练然后通过测试集进行模型的验证和评估。 模型评估 我们使用一系列评估指标如准确率、精确率、召回率、F1-score等来评估模型的性能。通过与其他常见的机器学习算法进行比较我们验证了LightGBM在糖尿病确诊预测上的优越性。 结果分析和应用前景 实验结果显示基于LightGBM构建的糖尿病确诊预测模型具有较高的准确率和预测性能能够在早期辅助医生进行糖尿病的诊断和风险评估。该模型在临床实际中具有重要的应用前景可以为医生提供更多的决策支持帮助患者实现早期干预和管理降低并发症风险提高生活质量。 总之本研究为糖尿病预测领域的深入探索提供了有力支持展示了机器学习在医疗领域的应用潜力。然而仍需要进一步的临床验证和数据积累以不断优化模型性能并确保其在实际应用中的稳定性和可靠性。
心得与体会
通过这次Python项目实战我学到了许多新的知识这是一个让我把书本上的理论知识运用于实践中的好机会。原先学的时候感叹学的资料太难懂此刻想来有些其实并不难关键在于理解。
在这次实战中还锻炼了我其他方面的潜力提高了我的综合素质。首先它锻炼了我做项目的潜力提高了独立思考问题、自我动手操作的潜力在工作的过程中复习了以前学习过的知识并掌握了一些应用知识的技巧等
在此次实战中我还学会了下面几点工作学习心态
1继续学习不断提升理论涵养。在信息时代学习是不断地汲取新信息获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后我会用心响应单位号召结合工作实际不断学习理论、业务知识和社会知识用先进的理论武装头脑用精良的业务知识提升潜力以广博的社会知识拓展视野。
2努力实践自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值也只有将理论付诸于实践才能使理论得以检验。同样一个人的价值也是透过实践活动来实现的也只有透过实践才能锻炼人的品质彰显人的意志。
3提高工作用心性和主动性。实习是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土也分明感受到了沉甸甸的职责。在今后的工作和生活中我将继续学习深入实践不断提升自我努力创造业绩继续创造更多的价值。
这次Python实战不仅仅使我学到了知识丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中为实现理想而努力。
源代码
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import seaborn as sns
sns.set_style(whitegrid)
plt.rcParams[font.sans-serif] [SimHei] #解决中文显示
plt.rcParams[axes.unicode_minus] False #解决符号无法显示
import warnings
warnings.filterwarnings(ignore)df pd.read_csv(diabetes_data.csv)
df.head()
df.shape
df.info()
df.describe().T
df.isnull().sum() # 统计缺失值情况
any(df.duplicated()) # 检测原始数据是否存在重复值
df.drop_duplicates(inplaceTrue)
df.shape
df[Diabetes].value_counts()
# 查看目标变量是否平衡
sns.countplot(xDiabetes, datadf, palette(mako))
plt.title(Balanced data,size12, fontstyleitalic, weight900)
plt.ylabel(Total Count, size16, familymonospace)
plt.show()
# 查看年龄和IBM的分布
fig1, ax plt.subplots(3, 2, figsize(16,12))
fig1.suptitle(Age and BMI Histograms)
fig1.delaxes(ax[2,1])
fig1.delaxes(ax[2,0])
fig1.delaxes(ax[1,1])
fig1.delaxes(ax[1,0])
ax[0,0].set_title(Age Description)
sns.histplot(data df,x Age,color navy,alpha 1,kde True, ax ax[0,0])
ax[0,1].set_title(BMI Description)
sns.histplot(data df,x BMI,color indigo,alpha 1,kde True ,ax ax[0,1])fig1.tight_layout()
年龄和BMI均为正态分布
# 分析身体/心里健康对糖尿病的影响
fig2, ax plt.subplots(3, 2, figsize(16,12))
fig2.suptitle(Health Histograms)
fig2.delaxes(ax[2,1])
fig2.delaxes(ax[2,0])
fig2.delaxes(ax[1,1])
ax[0,0].set_title(General Health Description)
sns.histplot(data df,x GenHlth,color darkslateblue,alpha 1,kde True ,ax ax[0,0])
ax[0,1].set_title(Pyshical Health Description)
sns.histplot(data df,x PhysHlth,color navy,alpha 1,kde True ,ax ax[0,1])
ax[1,0].set_title(Mental Health Description)
sns.histplot(data df,x MentHlth,color navy,alpha 1,kde True ,ax ax[1,0], bins 12)fig2.tight_layout()
总体健康呈正态分布中位数为3.0
Physical Health仍然很重但在30时增加
心理健康问题很严重这意味着更多人的心理健康问题更少
fig3, ax plt.subplots(2, 2, figsize(16,12))fig3.suptitle(General Health)
sns.countplot(xSex, datadf, palette(Blues_d), ax ax[0,0])ax[0,0].set_xlabel(Sex (0 Female 1 Male), size16, fontstyleitalic, weight500 )
ax[0,0].set_ylabel(Total Count, size16, familymonospace)
ax[0,0].set_title(Sex,size12, fontstyleitalic, weight900)sns.countplot(xSmoker, datadf, palette(Blues_d),ax ax[0,1])ax[0,1].set_title(Smokers,size12, fontstyleitalic, weight900)
ax[0,1].set_xlabel(Smoker (0 no 1 yes), size16, fontstyleitalic, weight500)
ax[0,1].set_ylabel(Total Count, size16, familymonospace)sns.countplot(xHeartDiseaseorAttack, datadf, palette(Blues_d),ax ax[1,0])ax[1,0].set_xlabel(Heart Disease (0 Healthy Heart 1 Has Heart Problem), size16, fontstyleitalic, weight500)
ax[1,0].set_ylabel(Total Count, size16, familymonospace)
ax[1,0].set_title(Heart Disease or Attack,size12, fontstyleitalic, weight900)sns.countplot(xHeartDiseaseorAttack, datadf, palette(Blues_d),ax ax[1,0])ax[1,0].set_xlabel(Heart Disease (0 Healthy Heart 1 Has Heart Problem), size16, fontstyleitalic, weight500)
ax[1,0].set_ylabel(Total Count, size16, familymonospace)
ax[1,0].set_title(Heart Disease or Attack,size12, fontstyleitalic, weight900)sns.countplot(xPhysActivity, datadf, palette(Blues_d),ax ax[1,1])ax[1,1].set_xlabel(Physical Activity (0 Non-Physically Acitve 1 Physically Active), size16, fontstyleitalic, weight500)
ax[1,1].set_ylabel(Total Count, size16, familymonospace)
ax[1,1].set_title(Physical Activity,size12, fontstyleitalic, weight900)
fig3.tight_layout()男女比例相对相等但女性略占优势
吸烟者与非吸烟者的比例相对相等但非吸烟者占主导地位
更多的人拥有健康的心脏
越来越多的人进行体育锻炼
fig4, ax plt.subplots(1, 2, figsize(10,5))fig4.suptitle(Healthy eating)
sns.countplot(xFruits, datadf, palette(Blues_d), ax ax[0])
ax[0].set_xlabel(Eats Fruits (0 Non-Regulary Acitve 1 Regularly), size9, fontstyleitalic, weight500)
ax[0].set_ylabel(Total Count, size9, familymonospace)
ax[0].set_title(Fruit Consumption,size12, fontstyleitalic, weight900)
sns.countplot(xVeggies, datadf, palette(Blues_d), ax ax[1])
ax[1].set_xlabel(Eats Vegtables (0 Non-Regulary Acitve 1 Regularly), size9, fontstyleitalic, weight500)
ax[1].set_ylabel(Total Count, size9, familymonospace)
ax[1].set_title(Vegtable Consumption,size12, fontstyleitalic, weight900)fig4.tight_layout()
越来越多的人经常吃水果
越来越多的人经常吃蔬菜
fig5, ax plt.subplots(3, 2, figsize(16,12))fig5.suptitle(Health Disorders)
fig5.delaxes(ax[2,1])
fig5.delaxes(ax[2,0])
fig5.delaxes(ax[1,1])
sns.countplot(xHvyAlcoholConsump, datadf, palette(Blues_d), ax ax[0,0])
ax[0,0].set_xlabel(Alcohol Consumption (0 Non-Heavy Active 1 Heavy), size16, fontstyleitalic, weight500)
ax[0,0].set_ylabel(Total Count, size16, familymonospace)
ax[0,0].set_title(Alcohol Consumption,size12, fontstyleitalic, weight900)
sns.countplot(xStroke, datadf, palette(Blues_d), ax ax[0,1])
ax[0,1].set_xlabel(Stroke (0 Never Experienced a Stroke 1 Has Experienced a Stroke), size16, fontstyleitalic, weight500)
ax[0,1].set_ylabel(Total Count, size16, familymonospace)
ax[0,1].set_title(Stroke,size12, fontstyleitalic, weight900)
sns.countplot(xHighBP, datadf, palette(Blues_d),ax ax[1,0])
ax[1,0].set_xlabel(Blood-Pressure(0 Normal Blood-Pressure 1 High Blood-Pressure), size16, fontstyleitalic, weight500)
ax[1,0].set_ylabel(Total Count, size16, familymonospace)
ax[1,0].set_title(Blood-Pressure,size12, fontstyleitalic, weight900)
fig5.tight_layout()
少量的酗酒者
更多从未经历过中风的人
高血压患者的数量很高
# 相关系数热力图
plt.figure(figsize(15,15))
correlation_mat df.corr()
sns.heatmap(correlation_mat, annot True)
plt.show()
from sklearn.model_selection import train_test_split
# 准备建模的数据
X df.drop(Diabetes,axis1)
y df[Diabetes]
# 划分数据集
X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state42)
print(训练集大小,X_train.shape[0])
print(测试集大小,X_test.shape[0])
# 构建逻辑回归模型
from sklearn.linear_model import LogisticRegression
lr LogisticRegression()
lr.fit(X_train,y_train)
print(逻辑回归模型准确率,lr.score(X_test,y_test))
# 构建KNN模型
from sklearn.neighbors import KNeighborsClassifier
knn KNeighborsClassifier()
knn.fit(X_train,y_train)
print(KNN模型准确率,knn.score(X_test,y_test))
# 构建决策树模型
from sklearn.tree import DecisionTreeClassifier
tree DecisionTreeClassifier()
tree.fit(X_train,y_train)
print(决策树模型准确率,tree.score(X_test,y_test))
# 构建lightgbm模型
from lightgbm import LGBMClassifier
gbm LGBMClassifier()
gbm.fit(X_train,y_train)
print(lightgbm模型准确率,gbm.score(X_test,y_test))
from sklearn.metrics import f1_score,r2_score,confusion_matrix,classification_report,auc,roc_curve
# 模型评估
y_pred gbm.predict(X_test)
print(模型的F1值,f1_score(y_test,y_pred))
print(模型混淆矩阵:,\n,confusion_matrix(y_test,y_pred))
print(模型分类报告:,\n,classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob gbm.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds roc_curve(y_test, y_prob)
roc auc(false_positive_rate, true_positive_rate)
plt.title(ROC)
plt.plot(false_positive_rate,true_positive_rate, colorred,label AUC %0.2f % roc)
plt.legend(loc lower right)
plt.plot([0, 1], [0, 1],linestyle--)
plt.axis(tight)
plt.ylabel(True Positive Rate)
plt.xlabel(False Positive Rate)
plt.show()
# 特征重要性评分
feat_labels X_train.columns[0:]
importances gbm.feature_importances_
indices np.argsort(importances)[::-1]
index_list []
value_list []
for f,j in zip(range(X_train.shape[1]),indices):index_list.append(feat_labels[j])value_list.append(importances[j])
plt.figure(figsize(10,6))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize12)
plt.title(feature importance,fontsize14)
plt.show()
# 模型预测
res pd.DataFrame()
res[真实值] y_test
res[预测值] y_pred
res.sample(10)