基于心电图的心脏病诊断

  • 案例背景
  • 数据预处理
  • 决策树
    • 要求
    • 模型参数
    • 格子搜索确定最优参数
    • 用最优参数训练模型
    • 利用产生的决策树确定属性重要性
  • AdaBoost、随机森林、 GBDT、xgboost、lightGBM
    • 要求
    • 代码
  • 神经网络模型
    • 要求
    • 模型(200,200)
    • 模型参数(50,40,20)

案例背景

数据集 mitbih_train 中给出了心电图数据,其中每一行表示采集到一个人的心电图片段,并且将其转化为 187 个属性特征(记为 x1,x2,…x187),每一行最后一列给出了分类标签(记为 y),其中 0 表示健康病人,1~4 分别对应着存在四种类型心脏异常的病人。请根据要求建立分类模型,并将建立的模型在数据集 mitbih_test 中进行测试。

数据预处理

  • 导入库
import numpy as np
import pandas as pd
import os
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
  • 读取数据
train=pd.read_csv('mitbih_train.csv',header=None)
test=pd.read_csv('mitbih_test.csv',header=None)
cols=['x' + str(i+1) for i in range(187)]
cols.append('y')
train.columns=cols
test.columns=cols
  • 处理训练集和测试集
train_x=train.drop('y',axis=1)
test_x=test.drop('y',axis=1)
train_y=train['y']
test_y=test['y']

决策树

要求

请建立决策树模型并进行调优,分别评价模型在训练集和测试集的预测效果;利用产生的决策树确定属性重要性。

模型参数

DecisionTreeClassifier().get_params()

{‘class_weight’: None,
‘criterion’: ‘gini’,
‘max_depth’: None,
‘max_features’: None,
‘max_leaf_nodes’: None,
‘min_impurity_decrease’: 0.0,
‘min_impurity_split’: None,
‘min_samples_leaf’: 1,
‘min_samples_split’: 2,
‘min_weight_fraction_leaf’: 0.0,
‘presort’: False,
‘random_state’: None,
‘splitter’: ‘best’}

格子搜索确定最优参数

tree=DecisionTreeClassifier()
parameters={'max_depth':np.arange(5,20,1)}
tree_grid=GridSearchCV(tree,parameters,cv=5)
tree_grid.fit(train_x,train_y)
print(tree_grid.best_params_)
print(tree_grid.best_score_)

best_params_:{‘max_depth’: 17}
best_score:0.96

用最优参数训练模型

tree=DecisionTreeClassifier(max_depth=17)
tree.fit(train_x,train_y)
tree.score(train_x,train_y)
tree.score(test_x,test_y)

训练精度:0.9846
测试精度:0.9605

利用产生的决策树确定属性重要性

stat=pd.DataFrame(columns=['importance','feature'])
stat['importance']=tree.feature_importances_
stat['feature']=train_x.columns
stat.sort_values(by='importance',ascending=False,inplace=True)
stat.to_excel('eample4.xls',index=False)

AdaBoost、随机森林、 GBDT、xgboost、lightGBM

要求

分别建立 AdaBoost、随机森林以、 GBDT 、xgboost 和lightGBM 对训练集数据进行训练,分别评价模型在训练集和测试集的预测效果并计算算法的执行时间。

代码

  1. 导入库
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import GradientBoostingClassifier
import lightgbm as lgb
from xgboost import XGBClassifier
  1. 构建模型
rf=RandomForestClassifier()
ada=AdaBoostClassifier()
gbdt=GradientBoostingClassifier()
mdl_lgb=lgb.LGBMClassifier(num_leaves=127,n_estimators=200,max_depth=6,learning_rate=0.3,reg_alpha=0.05)
mdl_xgb=XGBClassifier(n_estimators=200,max_depth=6,learning_rate=0.3)
  1. 训练模型
model_strlist=['RandomForest','AdaBoost','GBDT',‘XGboost’,‘,'lightGBM ’]
train_=[]
test_=[]
time_=[]for num,model in enumerate([rf,ada,gbdt,mdl_xgb,mdl_lgb]):a=time.time()model.fit(train_x,train_y)train_acc=model.score(train_x,train_y)test_acc=model.score(test_x,test_y)b=time.time()-aprint("{}  train/test accuracies : {}/{}  time: {} ".format(model_strlist[num],str(train_acc)[:5],str(test_acc)[:5],b))train_.append(train_acc)test_.append(test_acc)time_.append(b)
  1. 保存结果
stat={}
stat['trian']=train_
stat['test']=test_
stat['time']=time_
stat=pd.DataFrame(stat,index=['RandomForest','AdaBoost','GBDT'])
stat.to_excel('example4-2.xls')

在训练集和测试集上表现最好的是xgboost,但是用的时间是最长的,是时长排名第二为的GBDT的三倍还多,模型的训练成本较高。用是最短的是随机深林,仅用了18秒,而且训练效果也很好,训练效果在五个模型中排名第二位。

神经网络模型

要求

分别建立具有两个隐藏层和三个隐藏层的神经网络模型,要求使二者的参数规模接近并且激活函数、损失函数以及最优化算法设定方面均相同,在对训练集数据进行训练的基础上分别评价模型在训练集和测试集的预测效果。

模型(200,200)

from sklearn import neural_network as nn
from sklearn.metrics import accuracy_scorea=time.time()
mdl_nn=nn.MLPClassifier(solver='adam', momentum=0.9,    #solver为sgd时使用activation='relu',learning_rate_init=0.001, #可选,默认0.001,初始学习率,控制更新权重的补偿,只有当solver=’sgd’ 或’adam’时使用learning_rate='constant',  #学习率的变化策略,根据loss的变化来调整alpha=0.0001,hidden_layer_sizes=(200,200)verbose=True,             #是否将过程打印batch_size=20000,       #更新一次网络结构的参数所需要的样本量max_iter=200,shuffle=True, )
mdl_nn.fit(train_x,train_y)
yhat=mdl_nn.predict(train_x)
ypred=mdl_nn.predict(test_x)
print(accuracy_score(train_y,yhat))
print(accuracy_score(test_y,ypred))
print(time.time()-a)

训练集:0.9849
测试集:0.97629

模型参数(50,40,20)

a=time.time()
mdl_nn=nn.MLPClassifier(solver='adam', momentum=0.9,    #solver为sgd时使用activation='relu',learning_rate_init=0.001, #可选,默认0.001,初始学习率,控制更新权重的补偿,只有当solver=’sgd’ 或’adam’时使用learning_rate='constant',  #学习率的变化策略,根据loss的变化来调整alpha=0.0001,hidden_layer_sizes=(50,40,20)verbose=True,             #是否将过程打印batch_size=20000,       #更新一次网络结构的参数所需要的样本量max_iter=200,shuffle=True, )
mdl_nn.fit(train_x,train_y)
yhat=mdl_nn.predict(train_x)
ypred=mdl_nn.predict(test_x)
print(accuracy_score(train_y,yhat))
print(accuracy_score(test_y,ypred))
print(time.time()-a)

训练集:0.9737
测试集:0.9693
在参数数量差不多的情况下,两层的神经网络在训练集和测试集上都优于三层的神经网络,但并不显著。

【机器学习案例四】基于心电图的心脏病诊断(分类)相关推荐

  1. 机器学习案例丨基于广泛和深入的推荐 - 餐厅评级预测

    点击上方蓝字 关注我们 (本文阅读时间:18分钟) Microsoft Azure Machine Learning Studio 是微软强大的机器学习平台,在设计器中,微软内置了15个场景案例,但网 ...

  2. 机器学习(一):基于Logistic回归模型的分类预测(算法实践)——阿里云天池

    文章目录 前言 一.逻辑回归的介绍和应用 1.1 逻辑回归的应用 二.逻辑回归案例 2.1.引入库 2.2读入数据 2.3.调用函数拟合数据 2.4.设置边界 2.5.预测数据 2.6.预测数据值 总 ...

  3. 吴恩达机器学习(四)逻辑回归(二分类与多分类)

    目录 0. 前言 1. 假设函数(Hypothesis) 2. 决策边界(Decision Boundary) 3. 代价函数(Cost Funciton) 4. 梯度下降(Gradient Desc ...

  4. 基于KNN的电影题材分类

    我们主要来实践 KNN 分类算法的案例:基于KNN的电影题材分类 代码分析 导入工具包 import numpy as np import pandas as pd from collections ...

  5. 机器学习实战 基于_机器学习实战:基于Scikit-Learn和TensorFlow—第四章笔记

    机器学习实战:基于Scikit-Learn和TensorFlow---第四章笔记 一.学习目标 之前用了那么多的机器学习的模型,但是它们各自的训练算法在很大程度上还是一个黑匣子,我们对对系统内部的实现 ...

  6. 【机器学习】多项式回归案例四:员工职位与薪回归模型分析

    员工职位与薪资多项式回归模型 3 多项式回归 案例四:员工职位与薪资多项式回归模型 3.1.1 模块加载与数据读入 3.1.2 数据可视化 3.1.3 模型创建与应用 3.1.4 模型对比 3.1.5 ...

  7. 机器学习(三):基于线性回归对波士顿房价预测

    文章目录 专栏导读 1.线性回归原理 2.实战案例 2.1数据说明 2.2导入必要的库并加载数据集 2.3划分训练集和测试集 2.4创建线性回归模型 2.5模型预测评价 专栏导读 ✍ 作者简介:i阿极 ...

  8. 【机器学习】逻辑回归-基础认识与鸢尾花分类实操案例

    文章目录 前言 一.基本理解 二.数学原理 三.简单二元分类算法实现 四.实战案例 总结 前言 本文将会对逻辑回归的基础理解,数学原理,简单算法实现,鸢尾花分类问题实操案例去学习我们的逻辑回归. 一. ...

  9. Shiro 核心功能案例讲解 基于SpringBoot 有源码

    Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...

最新文章

  1. torch yolov3 minibatch 失败
  2. 阿里凑单算法首次公开!打包购商品挖掘系统解析
  3. 使用高级管理控制台获得对Windows Home Server的扩展访问
  4. Aleri –复杂事件处理
  5. python实验报告_20193102 实验一 《python程序设计》实验报告
  6. bzoj 2957: 楼房重建(线段树+递归)
  7. JavaScript 省市县数据
  8. Spoiler Alert – 实现内容模糊隐藏效果的 jQuery 插件
  9. 如何将数据库中的表导入到PowerDesigner
  10. python爬取拉勾网给定关键词职位信息存入数据库_python爬取拉勾网职位数据的方法...
  11. CommandName 与 CommandArgument
  12. h264格式视频转mp4
  13. 虚拟仿真实验室管理系统
  14. 微信扫一扫二维码直接打开手机外部浏览器
  15. js压缩图片到指定大小
  16. python群发邮件 不进垃圾箱_邮件群发不进垃圾箱
  17. java实现手机扫描二维码下载功能
  18. Android Retrofit Put请求
  19. 你对计算机有什么看法英语作文,关于电脑优点英语作文
  20. 查询起止时间为同一天,需要查到当天数据

热门文章

  1. Java-可重入锁(ReentrantLock)
  2. #150. 魔法书密码
  3. JVM常用参数(-Xms/-Xmx/-Xss/-Xmn)
  4. 李炎恢的bootstrap项目实战首页内容下思路解析
  5. 基于max30102的物联网病房监测系统(中断处理和主题逻辑)
  6. Word处理控件Aspose.Words功能演示:使用 C# 在 Word 文档中创建和修改 VBA 宏
  7. NOI 2005 聪聪与可可 题解
  8. Skew数(二进制数)-C语言
  9. 数字信号处理matlab相关基础例题分析
  10. CRC在线校验工具计算器