机器学习与python-陈强 第五章逻辑回归课后习题答案
题目
5.1 使用 Hastie etal.(2009)的南非心脏病数据 SAheart.csv 进行逻辑回归”。其中响应变量为chd(是否有冠心病,即coronary heart disease)。特征向量包括sbp(收缩压,即 systolic blood pressure)、tobacco(累计抽烟量)、ldl(低密度脂蛋白胆固醇,即 low densitylipoprotein cholesterol)、因子变量 famhist(是否有家族心脏病史)、typea(A 型行为,即type-Abehavior)、alcoho1(当前饮酒量)、age(发病时年龄),以及两个关于肥胖程度的数值型度量adiposity与obesity。
(1)计算样本中有冠心病的比例。
(2)由于数据包含分类变量,使用命令“x=pd.get_dummies(X)”将数据矩阵X中的分类变量设为虚拟变量。使用“random_state=0”,预留100个观测值作为测试集。
(3)在训练集中,使用skleamn模块的LogisticRegression类(设参数“c=1e10”与“fit intercept=False”),将chd 对其余变量进行逻辑回归。
(4)展示此逻辑回归的回归系数。
(5)计算测试集的预测概率,并展示前5个预测概率。
(6)在测试集中进行预测,计算准确率、错误率、灵敏度、特异度与召回率。
(7)画 ROC 曲线。
(8)计算 AUC。
(9)计算kappa值。
详细代码
1.引入库
代码如下(示例):
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
import statsmodels.api as sm
from patsy import dmatrices
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
from sklearn.metrics import cohen_kappa_score
from sklearn.metrics import roc_curve, RocCurveDisplay
2.读入数据
代码如下(示例):
SA = pd.read_csv('SAheart.csv')
# 查看数据
SA.head()
X = pd.DataFrame(SA)
# tips
提示:数据文件要和代码文件放在同一文件夹里面
一:计算样本中冠心病的比例
total_count = len(X) #总样本量
chd_count= np.sum(SA.chd) #患病数量
f=chd_count/total_count
print('冠心病比例为',f)
结果:
冠心病比例为 0.3463203463203463
二:将数据矩阵X中的分类变量设为虚拟变量;预留100个观测值作为测试集
X = pd.DataFrame(SA)
X_xuni=pd.get_dummies(X)
#虚拟变量会生成两列,保留一列即可(得冠心病)
X_xuni.


631

被折叠的 条评论
为什么被折叠?



