!git clone https://github.com/kb22/Heart-Disease-Prediction!ls Heart-Disease-Prediction!cat Heart-Disease-Prediction/Heart

机器学习 - 预测心脏病

K近邻、支持向量机、决策树、随机森林

0 导入相关库

# 基础
import numpy as np # 处理数组
import pandas as pd # 读取数据&&DataFrame
import matplotlib.pyplot as plt # 制图
from matplotlib import rcParams # 定义参数
from matplotlib.cm import rainbow # 配置颜色%matplotlib inline
import warnings
warnings.filterwarnings('ignore') # 忽略警告信息# 预处理数据
from sklearn.model_selection import train_test_split # 切割数据集
from sklearn.preprocessing import StandardScaler # 特征缩放# 机器学习
from sklearn.neighbors import KNeighborsClassifier # K近邻
from sklearn.svm import SVC # 支持向量机
from sklearn.tree import DecisionTreeClassifier # 决策树
from sklearn.ensemble import RandomForestClassifier # 随机森林

1 导入数据集

dataset = pd.read_csv('Heart-Disease-Prediction/dataset.csv')
dataset.info() # 查看各列数据类型


特征:13个属性 & 1个标签

dataset.describe() # 描述统计相关信息

age(max): 77 && chol(max): 564 -> 特征缩放

dataset.head()

特征描述

2 理解数据

2.1 相关性矩阵
rcParams['figure.figsize'] = 14, 12 #图形大小
plt.matshow(dataset.corr()) # 相关矩阵
yticks = plt.yticks(np.arange(dataset.shape[1]), dataset.columns) # 将名称添加到矩阵
xticks = plt.xticks(np.arange(dataset.shape[1]), dataset.columns)
plt.colorbar()


观察发现,13个性征与标均与无明显相关性,正负相关均存在。

2.2 直方图

查看数据分布情况 -> 特征缩放

hist = dataset.hist()

2.3 target柱状图
dataset['target'].unique() #


dataset[‘target’].value_counts() #

rcParams['figure.figsize'] = 8, 6 # 图形大小
plt.bar(dataset['target'].unique(), dataset['target'].value_counts(), color=['red', 'green']) # 柱状图
plt.xticks([0, 1])
plt.ylabel('Target Classes')
plt.ylabel('Count')
plt.title('Count of each Target Class')

3 特征变换

对分类特征进行变换,将每个特征转换为用1和0的两个虚拟变量(哑变量)
age :‘男’ -> ‘1’, ‘女’ -> ‘0’

# 哑变量
dataset = pd.get_dummies(dataset, columns=['sex', 'cp', 'fbs', 'restecg', 'exang', 'slope', 'ca', 'thal'])
# 特征变换
ss = StandardScaler()
columns_to_scale = ['age', 'trestbps', 'chol', 'thalach', 'oldpeak']
dataset[columns_to_scale] = ss.fit_transform(dataset[columns_to_scale])dataset.head()

dataset.columns

4 机器学习

训练集:67% 测试集:33%

y = dataset['target']
X = dataset.drop(['target'], axis=1)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)
4.1 K近邻分类

计算参数n_neighbors从1-20的评估分数

knn_scores = []
for k in range(1, 21):knn_classifier = KNeighborsClassifier(n_neighbors=k)knn_classifier.fit(X_train, y_train)knn_scores.append(knn_classifier.score(X_test, y_test))print(knn_scores)

最近邻个数&评估分数(折线图)

plt.plot([k for k in range(1, 21)], knn_scores, color='blue')
for i in range(1, 21): plt.text(i, knn_scores[i-1], (i, knn_scores[i-1]))
xticks = plt.xticks([i for i in range(1, 21)])
plt.xlabel('Number of Neighbors (n_neighbors)')
plt.ylabel('Scores')
plt.title('K Neighbors Classifier scores for different K values')

4.2 支持向量机分类

通过调整数据点与超平面之间的距离,形成一个尽可能分离不同类别的超平面
kernel : ‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’

svc_scores = []
kernels = ['linear', 'poly', 'rbf', 'sigmoid'] # 'precomputed'
for i in range(len(kernels)):svc_classifier = SVC(kernel=kernels[i])svc_classifier.fit(X_train, y_train)svc_scores.append(svc_classifier.score(X_test, y_test))svc_scores

内核&评估分数(柱状图)

colors = rainbow(np.linspace(0, 1, len(kernels))) # 色彩
plt.bar(kernels, svc_scores, color=colors)
for i in range(len(kernels)):plt.text(i, svc_scores[i], svc_scores[i])
plt.xlabel('Kernels')
plt.ylabel('Scores')
plt.title('Support Vector Classifier scores for different kernels')

4.3 决策树分类

创建一个决策树,为每个数据点分配所属类
max_features : The number of features to consider when looking for the best split(1-30)# 特征变化后数据集特征数量

dtc_scores = []
for i in range(1, len(X.columns)+1):dtc_classifier = DecisionTreeClassifier(max_features=i, random_state=0)dtc_classifier.fit(X_train, y_train)dtc_scores.append(dtc_classifier.score(X_test, y_test))print(dtc_scores)

最大特征数&评估函数(折线图)

plt.plot([i for i in range(1, len(X.columns)+1)], dtc_scores, color='blue')
for i in range(1, len(X.columns)+1): plt.text(i, dtc_scores[i-1], (i, dtc_scores[i-1]))
xticks = plt.xticks([i for i in range(1, len(X.columns)+1)])
plt.xlabel('Max Features')
plt.ylabel('Scores')
plt.title('Decision Tree Classifier scores for different number of maximum features')

4.4 随机森林分类

决策树(从总特征中随机选择特征构成) -> 随机森林
n_estimators : The number of trees in the forest ([10, 100, 200, 500, 1000])

rfc_scores = []
estimators = [10, 100, 200, 500, 1000]
for i in estimators:rfc_classifier = RandomForestClassifier(n_estimators=i, random_state=0)rfc_classifier.fit(X_train, y_train)rfc_scores.append(rfc_classifier.score(X_test, y_test))rfc_scores

colors = rainbow(np.linspace(0, 1, len(estimators))) # 色彩
plt.bar(estimators, rfc_scores, color=colors, width=0.8)
for i in range(len(estimators)):plt.text(i, rfc_scores[i], rfc_scores[i])
plt.xlabel('Number of estimators')
plt.ylabel('Scores')
plt.title('Random Forest Classifier scores for different of estimators')

colors = rainbow(np.linspace(0, 1, len(estimators))) # 色彩
plt.bar([i for i in range(len(estimators))], rfc_scores, color=colors, width=0.8)
for i in range(len(estimators)):plt.text(i, rfc_scores[i], rfc_scores[i])
plt.xlabel('Number of estimators')
plt.ylabel('Scores')
plt.title('Random Forest Classifier scores for different of estimators')

colors = rainbow(np.linspace(0, 1, len(estimators))) # 色彩
plt.bar([i for i in range(len(estimators))], rfc_scores, color=colors, width=0.8)
for i in range(len(estimators)):plt.text(i, rfc_scores[i], rfc_scores[i])
plt.xticks(ticks=[i for i in range(len(estimators))], labels=[str(estimator) for estimator in estimators])
plt.xlabel('Number of estimators')
plt.ylabel('Scores')
plt.title('Random Forest Classifier scores for different of estimators')

5 机器学习大比拼

5.1 网格搜索
from sklearn.model_selection import GridSearchCV
tree = DecisionTreeClassifier()
parameters ={'max_depth':np.arange(5,20,1)}
tree_grid = GridSearchCV(tree,parameters,cv=5)
# tree_grid.fit(X_test, y_test)
# tree_grid.fit(X_train, y_train)
tree_grid.fit(X, y)
print(tree_grid.best_params_)
print(tree_grid.best_score_)

5.2 大比拼
!pip install lightgbm!pip install xgboost
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import GradientBoostingClassifier
from xgboost import XGBClassifier
import lightgbm as LightGBM
import timerf = RandomForestClassifier()
ada = AdaBoostClassifier()
gbdt = GradientBoostingClassifier()
mdl_xgb = XGBClassifier(n_estimators=200,max_depth=6,learning_rate=0.3)
mdl_lgb = LightGBM.LGBMClassifier(num_leaves=127,n_estimators=200,max_depth=6,learning_rate=0.3,reg_alpha=0.05)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(X_train, y_train)train_acc=model.score(X_train, y_train)test_acc=model.score(X_test, y_test)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)stat = {}
stat['trian'] = train_
stat['test'] = test_
stat['time'] = time_
stat = pd.DataFrame(stat,index=['RandomForest','AdaBoost','GBDT', 'XgBoost', 'LightGBM'])stat


Heart-Disease-Prediction
搭建心脏病预测案例
Kaggle 心脏病分类预测数据分析案例
基于心电图的心脏病诊断

机器学习 - 预测心脏病相关推荐

  1. 【ML】基于机器学习的心脏病预测研究(附代码,lightgbm模型)

      Hello,大家好,我是augustqi.今天手把手带大家做一个机器学习实战项目:基于机器学习的心脏病预测研究.多的不说,少的不唠,下面开始今天的教程.   以下内容,完全是我根据参考资料和个人理 ...

  2. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,多层感知机模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 之前创作过心脏病预测研究文章如下: [ML]基于机器学 ...

  3. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,随机森林模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 之前创作过心脏病预测研究文章如下: [ML]基于机器学 ...

  4. 使用机器学习预测天气_如何使用机器学习预测着陆

    使用机器学习预测天气 Based on every NFL play from 2009–2017 根据2009-2017年每场NFL比赛 Ah, yes. The times, they are c ...

  5. 使用机器学习预测天气_使用机器学习来预测患者是否会再次入院

    使用机器学习预测天气 We are in a age where machines are utilizing huge data and trying to create a better worl ...

  6. 每日新闻 丨新突破:AI能提前十年预测心脏病,准确率高达90%

    点击蓝字 关注我们 更多精彩,请点击上方蓝字关注我们! 每日新闻播报 第09-05期  1 趋势洞察 工信部:2025年基本建成工业大数据体系 9月4日,工信部在其网站发布<工业大数据发展指导意 ...

  7. 计算机书籍-机器学习预测分析

    书名:Python机器学习 预测分析核心算法 作者:[美] Michael Bowles(鲍尔斯) 出版社:人民邮电出版社 品牌:异步图书

  8. 机器学习预测农民是否可以得到贷款

    通过最佳实践帮助您实现上述案例效果 Step1:数据导入MaxCompute 1.1 创建需要上传的本地数据 贷款预测表:(今年申请贷款者) 字段名 含义 类型 描述 id 数据唯一标识符 strin ...

  9. ML之预测:玩转2018世界杯—采用机器学习预测小组赛、十六比赛、四决赛、半决赛、决赛以及世界杯总冠军的各个队伍

    ML之预测:玩转2018世界杯-采用机器学习预测小组赛.十六比赛.四决赛.半决赛.决赛以及世界杯总冠军的各个队伍 导读       机器学习预测.玩转2018世界杯-采用机器学习预测小组赛.十六比赛. ...

最新文章

  1. 面向对象实验一(类与对象)
  2. faster rcnn源码解读(五)之layer(网络里的input-data)
  3. 人生苦短,开发用云 | 如何优雅完成程序员的侠客梦?
  4. lan口配置 petalinux_PetaLinux安装及使用
  5. vim插件自动补齐_给VIM添加REPL
  6. THD 变量存入threads中
  7. 虚拟机安装python3_python3pip在虚拟机中全局安装
  8. 老游戏与你共渡亲子时光
  9. 2008 r2 server sql 中文版补丁_SQL Server各版本代号、补丁汇总(非官方)
  10. 网站建设开发策划书应该怎么写?
  11. 关于心理学书籍的一份书目
  12. 互联网三大巨头依靠什么武器对垒O2O?
  13. linux内核启动流程(文章最后流程图)
  14. selectpicker 清空选项_boostrap selectpicker 用法
  15. 判断手机是安卓还是苹果
  16. CTF Web方向考点总结
  17. 鼠标自动点击器及源码
  18. source insight无法识别函数定义
  19. 计算机网络fmd是什么意思,不用就亏大了!酷炫又不用花钱的Win10“黑科技”
  20. markdown文档规范练习

热门文章

  1. 计算机二级 监控,计算机二级VB辅导:用VB编写网络监控软件
  2. 黑马(9)baseline交替最小二乘优化
  3. 老司机教你如何正确地在大陆安装 BlackArch
  4. IaaS、PaaS、SaaS详解(通俗易懂)
  5. 医疗网如何发外链?获取友链?
  6. 计算机时间更改不了,电脑时间不能修改怎么办【图解】
  7. tf.data及tf.io数据解析及数据格式转换
  8. 提高学习效率的几种方法
  9. 百度之星资格赛 1003 度度熊与邪恶大魔王(二维dp)
  10. SQL注入-HTTP头部注入