关于数据挖掘:视频R语言逻辑回归Logistic回归模型分类预测病人冠心病风险数据分享附代码数据

2次阅读

共计 5166 个字符,预计需要花费 13 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=22410 

最近咱们被客户要求撰写对于逻辑回归的钻研报告,包含一些图形和统计输入。

本文介绍了逻辑回归并在 R 语言中用逻辑回归(Logistic 回归)模型分类预测病人冠心病危险数据

逻辑回归是机器学习借用的另一种统计分析办法。当咱们的因变量是二分或二元时应用它。

它只是示意一个只有 2 个输入的变量,例如,预测抛硬币(侧面 / 背面)的状况。后果是二进制的:如果硬币是侧面,则为 1,如果硬币为背面,则为 0。这种回归技术相似于线性回归,可用于预测分类问题的概率。

为什么咱们应用逻辑回归而不是线性回归?

咱们当初晓得它仅在咱们的因变量是二元的而在线性回归中该因变量是间断时应用。

当初,如果咱们应用线性回归来找到旨在最小化预测值和理论值之间间隔的最佳拟合线,这条线将是这样的:

这里的阈值为 0.5,这意味着如果 h(x) 的值大于 0.5,则咱们预测为恶性肿瘤(1),如果小于 0.5,则咱们预测为良性肿瘤(0)。

这里所有仿佛都很好,但当初让咱们略微扭转一下,咱们在数据集中增加一些异样值,当初这条最佳拟合线将挪动到该点。像这样:

你看到这里有什么问题吗?蓝线代表新阈值,此处可能为 0.2。为了放弃咱们的预测正确,咱们不得不升高咱们的阈值。因而,咱们能够说线性回归容易出现异常值。当初如果预测值大于 0.2,那么只有这个回归会给出正确的输入。

线性回归的另一个问题是预测值可能超出范围。咱们晓得概率能够在 0 和 1 之间,然而如果咱们应用线性回归,这个概率可能会超过 1 或低于 0。

Sigmoid 函数

为此,咱们最好有一个函数将任何理论值映射到 0 和 1 之间的区间内的值。您肯定想晓得逻辑回归如何将线性回归的输入压缩在 0 和 1 之间。

Sigmoid 函数是一种数学函数,用于将预测值映射到概率。该函数可能将任何理论值映射到 0 和 1 范畴内的另一个值。

规定是逻辑回归的值必须在 0 和 1 之间。因为它不能超过值 1 的限度,在图形上它会造成一条“S”形的曲线。这是辨认 Sigmoid 函数或逻辑函数的简略办法。

对于逻辑回归,应用的概念是阈值。阈值有助于定义 0 或 1 的概率。例如,高于阈值的值趋于 1,低于阈值的值趋于 0。

这就是所谓的 sigmoid 函数,它是这样定义的:

最远离 0 的 x 值 映射到靠近 0 或靠近 1 的 y 值。x 靠近 0 的值  将是咱们算法中概率的一个很好的近似值。而后咱们能够抉择一个阈值并将概率转换为 0 或 1 预测。

Sigmoid 是逻辑回归的激活函数。

 

老本函数

老本函数是用于计算误差的数学公式,它是咱们的预测值和理论值之间的差别。它只是掂量模型在预计 x 和 y 之间关系的能力方面的谬误水平。当咱们思考老本函数时,首先想到的是经典的平方误差函数。

m  – 示例数,

x(i)  – 第 i 个示例 的特征向量,

y(i)  – 第 i 个示例 的理论值,

θ   – 参数向量。

 

如果咱们有一个线性激活函数 h θ (x) 那就没问题了。然而应用咱们的新 sigmoid 函数,咱们没有平方误差的正二阶导数。这意味着它是非凸函数。咱们不想陷入部分最优,因而咱们定义了一个新的老本函数:

这称为穿插熵老本。如果您仔细观察,您可能会留神到,当预测值靠近理论值时,0 和 1 理论值的老本都将接近于零。

 

让咱们看看当 y=1 和 y=0 时老本函数的图形是什么

这里的蓝线代表 1 类(y=1),代价函数的右项会隐没。当初,如果预测概率靠近 1,那么咱们的损失会更小,当概率靠近 0 时,咱们的损失函数会达到无穷大。

红线代表 0 类(y=0),左项将在咱们的老本函数中隐没,如果预测概率靠近 0,那么咱们的损失函数会更小,但如果咱们的概率靠近 1,那么咱们的损失函数会达到无穷大。

此老本函数也称为对数损失。它还确保随着正确答案的概率最大化,谬误答案的概率最小化。此老本函数的值越低,精度越高。

如果咱们联合这两个图,咱们将失去一个只有 1 个部分最小值的凸图,当初在这里应用梯度降落很容易。

梯度降落优化

咱们将尝试理解如何利用梯度降落来计算最小老本。

梯度降落以这样一种形式扭转咱们的权重值,它总是收敛到最小点,或者咱们也能够说,它旨在找到最小化模型损失函数的最优权重。它是一种迭代办法,通过计算随机点的斜率而后沿相同方向挪动来找到函数的最小值。

R 语言逻辑回归(Logistic 回归)模型分类预测病人冠心病危险

本文的目标是实现一个逻辑回归剖析。使你对剖析步骤和思维过程有一个基本概念。

library(tidyverse)
library(broom)

这些数据来自一项正在进行的对镇居民的心血管钻研 查看文末理解数据获取形式 。其目标是预测一个病人是否有将来 10 年的冠心病危险。该数据集包含以下内容。

  • 男性:0= 女性;1= 男性
  • 年龄。
  • 教育。1 = 高中以下;2 = 高中;3 = 大学或职业学校;4 = 大学以上
  • 以后是否吸烟。0= 不吸烟;1= 吸烟者
  • cigsPerDay: 每天抽的烟数量(预计均匀)。
  • BPMeds: 0 = 不服用降压药;1 = 正在服用降压药
  • 中风。0 = 家族史中不存在中风;1 = 家族史中存在中风
  • 高血压。0 = 高血压在家族史上不风行;1 = 高血压在家族史上风行
  • 糖尿病:0 = 没有;1 = 有
  • totChol: 总胆固醇(mgdL)
  • sysBP: 收缩压(mmHg)
  • diaBP: 舒张压(mmHg)
  • BMI: 体重指数
  • 心率
  • 葡萄糖:总葡萄糖 mgdL
  • TenYearCHD: 0 = 患者没有将来 10 年冠心病的危险; 1 = 患者有将来 10 年冠心病的危险

加载并筹备数据

read_csv("fraingha") %>%
  drop_na() %>% #删除具备缺失值的察看值
  ageCent = age - mean(age), 
  totCholCent = totChol - mean(totChol),

拟合逻辑回归模型

glm(TenYearCHD ~ age +  Smoker +  CholCent, 
              data = data, family = binomial)

预测

对于新病人

 data_frame(ageCent = (60 - 49.552), 
                 totCholCent = (263 - 236.848),

预测对数几率

predict(risk_m, x0)

预测概率

依据这个概率,你是否认为这个病人在将来 10 年内有患冠心病的高风险?为什么?

risk

混同矩阵

risk_m %>%
  group_by(TenYearCHD, risk_predict) %>%
  kable(format="markdown")

mutate(predict = if_else(.fitted > threshold, "1: Yes", "0: No"))

有多大比例的察看后果被谬误分类?
依附混同矩阵来评估模型的准确性有什么毛病?

ROC 曲线

ggplot(risk_m_aug, 
  oc(n.cuts = 10, labelround = 3) + 
  geom_abline(intercept = 0) +

auc(roc)$AUC

一位医生打算应用你的模型的后果来帮忙抉择病人加入一个新的心脏病预防打算。她问你哪个阈值最适宜为这个项目选择病人。依据 ROC 曲线,你会向医生举荐哪个阈值?为什么?


点击题目查阅往期内容

R 语言逻辑回归(Logistic Regression)、回归决策树、随机森林信用卡守约剖析信贷数据集

左右滑动查看更多

01

02

03

04

假如

为什么咱们不绘制原始残差?

ggplot(data = risk aes(x = .fitted, y = .resid)) +
  labs(x = "预测值", y = "原始残差")

分级的残差图

 plot(x =  fitted, y =  resid,
                xlab = "预测概率", 
                main = "分级后的残值与预测值的比照",

## # A tibble: 2 x 2
##   currentSmoker mean_resid
##   <fct>              <dbl>
## 1 0              -2.95e-14
## 2 1              -2.42e-14

查看假如:

  • 线性?- 随机性?- 独立性?

系数的推断

currentSmoker1 的测试统计量是如何计算的?
在统计学上,totalCholCent 是否是预测一个人患冠心病高风险的重要因素?
用测验统计量和 P 值来证实你的答案。
用置信区间阐明你的答案。

偏离偏差测验

 glm(TenYearCHD ~ ageCent + currentSmoker + totChol, 
              data = heart_data, family = binomial)

anova

AIC

依据偏离偏差测验,你会抉择哪个模型?
基于 AIC,你会抉择哪个模型?

应用 step 逐步回归 抉择模型

step(full_model)

  kable(format = "markdown")


点击文末 “浏览原文”

获取全文残缺材料。

本文选自《 R 语言逻辑回归(Logistic 回归)模型分类预测病人冠心病危险》。

点击题目查阅往期内容

R 语言逻辑回归 Logistic 回归剖析预测股票涨跌
matlab 用马尔可夫链蒙特卡罗 (MCMC) 的 Logistic 逻辑回归模型剖析汽车试验数据
R 语言逻辑回归、Naive Bayes 贝叶斯、决策树、随机森林算法预测心脏病
R 语言逻辑回归 (Logistic Regression)、回归决策树、随机森林信用卡守约剖析信贷数据集 PYTHON 用户散失数据挖掘:建设逻辑回归、XGBOOST、随机森林、决策树、反对向量机、奢侈贝叶斯和 KMEANS 聚类用户画像
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
PYTHON 集成机器学习:用 ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜寻超参数优化
R 语言集成模型:晋升树 boosting、随机森林、束缚最小二乘法加权均匀模型交融剖析工夫序列数据
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化
R 语言基于树的办法:决策树,随机森林,Bagging,加强树
R 语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
spss modeler 用决策树神经网络预测 ST 的股票
R 语言中应用线性模型、回归决策树主动组合特色因子程度
R 语言中自编基尼系数的 CART 回归决策树的实现
R 语言用 rle,svm 和 rpart 决策树进行工夫序列预测
python 在 Scikit-learn 中用决策树和随机森林预测 NBA 获胜者
python 中应用 scikit-learn 和 pandas 决策树进行 iris 鸢尾花数据分类建模和穿插验证
R 语言里的非线性模型:多项式回归、部分样条、平滑样条、狭义相加模型 GAM 剖析
R 语言用规范最小二乘 OLS,狭义相加模型 GAM,样条函数进行逻辑回归 LOGISTIC 分类
R 语言 ISLR 工资数据进行多项式回归和样条回归剖析
R 语言中的多项式回归、部分回归、核平滑和平滑样条回归模型
R 语言用泊松 Poisson 回归、GAM 样条曲线模型预测骑自行车者的数量
R 语言分位数回归、GAM 样条曲线、指数平滑和 SARIMA 对电力负荷工夫序列预测 R 语言样条曲线、决策树、Adaboost、梯度晋升(GBM) 算法进行回归、分类和动静可视化
如何用 R 语言在机器学习中建设集成模型?
R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测在 python 深度学习 Keras 中计算神经网络集成模型 R 语言 ARIMA 集成模型预测工夫序列剖析 R 语言基于 Bagging 分类的逻辑回归 (Logistic Regression)、决策树、森林剖析心脏病患者
R 语言基于树的办法:决策树,随机森林,Bagging,加强树
R 语言基于 Bootstrap 的线性回归预测置信区间预计办法
R 语言应用 bootstrap 和增量法计算狭义线性模型(GLM)预测置信区间
R 语言样条曲线、决策树、Adaboost、梯度晋升(GBM) 算法进行回归、分类和动静可视化
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
R 语言随机森林 RandomForest、逻辑回归 Logisitc 预测心脏病数据和可视化剖析
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化
Matlab 建设 SVM,KNN 和奢侈贝叶斯模型分类绘制 ROC 曲线
matlab 应用分位数随机森林(QRF)回归树检测异样值

正文完
 0