当前位置: 首页 > news >正文

DAY31

DAY 31 文件的规范拆分和写法

知识点回顾

  1. 规范的文件命名
  2. 规范的文件夹管理
  3. 机器学习项目的拆分
  4. 编码格式和类型注解

作业:尝试针对之前的心脏病项目,准备拆分的项目文件,思考下哪些部分可以未来复用。

导入依赖库

# 忽视警告
import warnings
warnings.simplefilter('ignore')# 数据处理
import numpy as np
import pandas as pd# 数据可视化
import matplotlib.pyplot as plt
import seaborn as sns # 随机森林
from sklearn.ensemble import RandomForestClassifier # 决策树
from sklearn.tree import DecisionTreeClassifier# 树的可视化
from sklearn.tree import export_graphviz # 模型评估方法
from sklearn.metrics import roc_curve, auc 
from sklearn.metrics import classification_report # 混淆矩阵
from sklearn.metrics import confusion_matrix # 数据切分
from sklearn.model_selection import train_test_split np.random.seed(123) 
pd.options.mode.chained_assignment = None  %matplotlib inline

数据可视化

# 设置可视化风格
sns.set(palette = 'pastel', rc = {"figure.figsize": (10,5), # 图形大小、"axes.titlesize" : 14,    # 标题文字尺寸"axes.labelsize" : 12,    # 坐标轴标签文字尺寸"xtick.labelsize" : 10,   # X轴刻度文字尺寸"ytick.labelsize" : 10 }) # Y轴刻度文字尺寸
a = sns.countplot(x = 'target', data = dt)               # 绘制计数图,其中x为target,数据为dt
a.set_title('Distribution of Presence of Heart Disease') # 设置图形标题
a.set_xticklabels(['Absent', 'Present'])                 # 将两个条形的标签分别设置为“Absent”(没有心脏病)和“Present”(有心脏病)
plt.xlabel("Presence of Heart Disease")                  # 设置X轴标签# 显示图形
plt.show()
g = sns.countplot(x = 'age', data = dt) # 绘制计数图,其中x为age,数据为dt
g.set_title('Distribution of Age')      # 设置图形标题
plt.xlabel('Age')                       # 设置X轴标签
b = sns.countplot(x = 'target', data = dt, hue = 'sex')          # 创建一个计数图,其中x为target,数据为dt,用sex作为色相(切分类别)
plt.legend(['Female', 'Male'])                                    # 以female/male作为标签,在图形中嵌入图例
b.set_title('Distribution of Presence of Heart Disease by Sex')   # 设置图形标题
b.set_xticklabels(['Absent', 'Present'])                          # 设置条形图的标签# 显示图形
plt.show()
# 可视化病患血清胆固醇浓度分布
sns.distplot(dt['chol'].dropna(), kde=True, color='darkblue', bins=40)

# 设置可视化风格
sns.set(palette = 'pastel', rc = {"figure.figsize": (10,5), # 图形大小、"axes.titlesize" : 14,    # 标题文字尺寸"axes.labelsize" : 12,    # 坐标轴标签文字尺寸"xtick.labelsize" : 10,   # X轴刻度文字尺寸"ytick.labelsize" : 10 }) # Y轴刻度文字尺寸
a = sns.countplot(x = 'target', data = dt)               # 绘制计数图,其中x为target,数据为dt
a.set_title('Distribution of Presence of Heart Disease') # 设置图形标题
a.set_xticklabels(['Absent', 'Present'])                 # 将两个条形的标签分别设置为“Absent”(没有心脏病)和“Present”(有心脏病)
plt.xlabel("Presence of Heart Disease")                  # 设置X轴标签# 显示图形
plt.show()
g = sns.countplot(x = 'age', data = dt) # 绘制计数图,其中x为age,数据为dt
g.set_title('Distribution of Age')      # 设置图形标题
plt.xlabel('Age')                       # 设置X轴标签
b = sns.countplot(x = 'target', data = dt, hue = 'sex')          # 创建一个计数图,其中x为target,数据为dt,用sex作为色相(切分类别)
plt.legend(['Female', 'Male'])                                    # 以female/male作为标签,在图形中嵌入图例
b.set_title('Distribution of Presence of Heart Disease by Sex')   # 设置图形标题
b.set_xticklabels(['Absent', 'Present'])                          # 设置条形图的标签# 显示图形
plt.show()
# 可视化病患血清胆固醇浓度分布
sns.distplot(dt['chol'].dropna(), kde=True, color='darkblue', bins=40)

数据预处理

# 对object数据类型进行编码
# 将"female"编码为0,将"male"编码为1
# 下面的编码方式类似
dt['sex'][dt['sex'] == 0] = 'female'
dt['sex'][dt['sex'] == 1] = 'male'dt['chest_pain_type'][dt['chest_pain_type'] == 1] = 'typical angina'
dt['chest_pain_type'][dt['chest_pain_type'] == 2] = 'atypical angina'
dt['chest_pain_type'][dt['chest_pain_type'] == 3] = 'non-anginal pain'
dt['chest_pain_type'][dt['chest_pain_type'] == 4] = 'asymptomatic'dt['fasting_blood_sugar'][dt['fasting_blood_sugar'] == 0] = 'lower than 120mg/ml'
dt['fasting_blood_sugar'][dt['fasting_blood_sugar'] == 1] = 'greater than 120mg/ml'dt['rest_ecg'][dt['rest_ecg'] == 0] = 'normal'
dt['rest_ecg'][dt['rest_ecg'] == 1] = 'ST-T wave abnormality'
dt['rest_ecg'][dt['rest_ecg'] == 2] = 'left ventricular hypertrophy'dt['exercise_induced_angina'][dt['exercise_induced_angina'] == 0] = 'no'
dt['exercise_induced_angina'][dt['exercise_induced_angina'] == 1] = 'yes'dt['st_slope'][dt['st_slope'] == 1] = 'upsloping'
dt['st_slope'][dt['st_slope'] == 2] = 'flat'
dt['st_slope'][dt['st_slope'] == 3] = 'downsloping'dt['thalassemia'][dt['thalassemia'] == 1] = 'normal'
dt['thalassemia'][dt['thalassemia'] == 2] = 'fixed defect'
dt['thalassemia'][dt['thalassemia'] == 3] = 'reversable defect'

创建机器学习模型

model = RandomForestClassifier(max_depth=5, n_estimators=10)    # 设置最大深度与基学习器等参数
model.fit(X_train, y_train)                                     # 使用随机森林拟合训练集

模型预测

y_predict = model.predict(X_test)
# 生成一个nxm的矩阵,第i行表示第i个样本属于各个标签的概率
y_pred_quant = model.predict_proba(X_test)[:, 1]
y_pred_bin = model.predict(X_test)

模型评估

total=sum(sum(confusion_matrix))sensitivity = confusion_matrix[0,0]/(confusion_matrix[0,0]+confusion_matrix[1,0])
print('灵敏度 : ', sensitivity )specificity = confusion_matrix[1,1]/(confusion_matrix[1,1]+confusion_matrix[0,1])
print('特异度 : ', specificity)

@浙大疏锦行

相关文章:

  • 电力设备智能化方案复盘
  • AI筑基,新质跃升|英码科技亮相华为广东新质生产力创新峰会,发布大模型一体机新品,助力产业智能化转型
  • Y1大型游乐设施修理作业包含哪些
  • win10使用nginx做简单负载均衡测试
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(25):受身形(3)
  • MySQL 8.0 OCP 英文题库解析(七)
  • 《Android 应用开发基础教程》——第十三章:权限管理机制与运行时权限请求(以拍照/存储为例)
  • 学习threejs,使用Physijs物理引擎,使用DOFConstraint自由度约束,模拟小车移动
  • 为 Jenkins添加 Windows Slave远程执行 python项目脚本
  • 建筑墙壁红外热成像裂缝潮湿检测数据集VOC+YOLO格式306张2类别
  • C#基础:yield return关键字的特点
  • ubuntu下实时检测机械硬盘和固态硬盘温度
  • 飞桨paddle ‘ParallelEnv‘ object has no attribute ‘_device_id‘【已解决】
  • java每日精进 5.20【MyBatis 联表分页查询】
  • 【每天一个MCP】【记录向】:准备工作,创建github项目
  • 初始“扣子”--九五小庞
  • MySQL 数据库迁移方法汇总
  • Trae 04.22版本深度解析:Agent能力升级与MCP市场对复杂任务执行的革新
  • ANC--Active Noise Cancellation
  • [春秋云镜] Spoofing仿真场景
  • B站一季度净亏损收窄99%:游戏营收大增76%,AI类广告收入增近4倍
  • 上海市政府党组赴全面从严治党警示教育基地参观学习,推进作风建设走深走实
  • 当文徵明“相遇”莫奈:苏博将展“从拙政园到莫奈花园”
  • 海南征集民生领域涉嫌垄断违法行为线索,包括行业协会等领域
  • 可显著提高公交出行率,山东、浙江多县常态化实施城区公交免费
  • 张核子“限高”次日即被解除,前员工的执行款3个月后仍未到账