逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛

1、逻辑回归的应用场景

广告点击率(广告是否点击)
是否为垃圾邮件
是否患病
金融诈骗(是否是金融诈骗)
虚假账号
看到上面的例子,我们可以发现其中的特点,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器

2、 逻辑回归的原理

2.1 输入


逻辑回归的输入就是一个线性回归的结果。

2.2 激活函数

sigmoid函数


分析:
假设函数:线性模型

回归的结果输入到sigmoid函数当中
输出结果:[0, 1]区间中的一个概率值,默认为0.5为阈值
逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别,并且这个类别默认标记为1(正例),另外的一个类别会标记为0(反例)。(方便损失计算)

输出结果解释(重要):假设有两个类别A,B,并且假设我们的概率值为属于A(1)这个类别的概率值。现在有一个样本的输入到逻辑回归输出结果0.6,那么这个概率值超过0.5,意味着我们训练或者预测的结果就是A(1)类别。那么反之,如果得出结果为0.3那么,训练或者预测结果就为B(0)类别
所以接下来我们回忆之前的线性回归预测结果我们用均方误差衡量,那如果对于逻辑回归,我们预测的结果不对该怎么去衡量这个损失呢?我们来看这样一张图

那么如何去衡量逻辑回归的预测结果与真实结果的差异呢?

优化损失,当损失函数取到最小值,就可以得到模型参数。
逻辑回归的真实值/预测值是是否属于某个类别,线性模型的真实值是一个数。根据损失函数的公式,如何确定损失函数呢?

2.3 损失以及优化

2.3.1 损失

逻辑回归的损失,称之为对数似然损失,公式如下:

分开类别:

怎么理解单个的式子呢?这个要根据log的函数图像来理解


当真实值为1,损失函数接近于0.如果预测的值接近于0,则预测的不准确。
当y=0时

综合完整损失函数


当真实值为1,即yi为1,右边为0,只有左边式子,当真实值为0同理。

看到这个式子,其实跟我们讲的信息熵类似。

接下来我们呢就带入上面那个例子来计算一遍,就能理解意义了。


我们已经知道,-log§, P值越大,结果越小,所以我们可以对着这个损失的式子去分析

2.3.2 优化

同样使用梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率。

3、逻辑回归API

sklearn.linear_model.LogisticRegression(solver='liblinear', penalty=‘l2’, C = 1.0)

solver:优化求解方式(默认开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数)

  • sag:根据数据集自动选择,随机平均梯度下降

penalty:正则化的种类
C:正则化力度
默认将类别数量少的当做正例

LogisticRegression方法相当于 SGDClassifier(loss=“log”, penalty=" "),SGDClassifier实现了一个普通的随机梯度下降学习,也支持平均随机梯度下降法(ASGD),可以通过设置average=True。而使用LogisticRegression(实现了SAG)

4、 案例:癌症分类预测-良/恶性乳腺癌肿瘤预测

数据介绍

原始数据的下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/

数据描述

(1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤

相关的医学特征,最后一列表示肿瘤类型的数值。

(2)包含16个缺失值,用”?”标出。

4.1 分析

缺失值处理
标准化处理
逻辑回归预测

4.2 代码

def logisticregression():"""逻辑回归进行癌症预测:return: None"""# 1、读取数据,处理缺失值以及标准化column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape','Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin','Normal Nucleoli', 'Mitoses', 'Class']data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",names=column_name)# 删除缺失值data = data.replace(to_replace='?', value=np.nan)data = data.dropna()# 取出特征值x = data[column_name[1:10]]y = data[column_name[10]]# 分割数据集x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)# 进行标准化std = StandardScaler()x_train = std.fit_transform(x_train)x_test = std.transform(x_test)# 使用逻辑回归lr = LogisticRegression()lr.fit(x_train, y_train)print("得出来的权重:", lr.coef_)# 预测类别print("预测的类别:", lr.predict(x_test))# 得出准确率print("预测的准确率:", lr.score(x_test, y_test))return None

5、分类的评估方法

5.1 精确率与召回率

5.1.1混淆矩阵

在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)

5.1.2 精确率(Precision)与召回率(Recall)

精确率:预测结果为正例样本中真实为正例的比例(了解)


召回率:真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)

那么怎么更好理解这个两个概念

还有其他的评估标准,F1-score,反映了模型的稳健型

5.1.3 分类评估报告API

sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None )

y_true:真实目标值
y_pred:估计器预测目标值
labels:指定类别对应的数字
target_names:目标类别名称
return:每个类别精确率与召回率

假设这样一个情况,如果99个样本癌症,1个样本非癌症,不管怎样我全都预测正例(默认癌症为正例),准确率就为99%但是这样效果并不好,这就是样本不均衡下的评估问题

问题:如何衡量样本不均衡下的评估?

5.2 ROC曲线与AUC指标

5.2.1 知道TPR与FPR

TPR = TP / (TP + FN)
所有真实类别为1的样本中,预测类别为1的比例
FPR = FP / (FP + FN)
所有真实类别为0的样本中,预测类别为1的比例

5.2.2 ROC曲线

ROC曲线的横轴就是FPRate,纵轴就是TPRate,当二者相等时,表示的意义则是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5

5.2.3AUC指标

AUC的概率意义是随机取一对正负样本,正样本得分大于负样本的概率
AUC的最小值为0.5,最大值为1,取值越高越好
AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
0.5<AUC<1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
最终AUC的范围在[0.5, 1]之间,并且越接近1越好

5.2.4 AUC计算API

from sklearn.metrics import roc_auc_score
sklearn.metrics.roc_auc_score(y_true, y_score)

计算ROC曲线面积,即AUC值
y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
y_score:每个样本预测的概率值

# 0.5~1之间,越接近于1约好
y_test = np.where(y_test > 2.5, 1, 0)print("AUC指标:", roc_auc_score(y_test, lr.predict(x_test)))

5.2.5、总结

AUC只能用来评价二分类
AUC非常适合评价样本不平衡中的分类器性能

分类算法-逻辑回归与二分类相关推荐

  1. 机器学习:理解逻辑回归及二分类、多分类代码实践

    作者 | caiyongji   责编 | 张红月 来源 | 转载自 caiyongji(ID:cai-yong-ji) 本文的概念相对简单,主要侧重于代码实践.现实生活中不止有预测的问题还有分类的问 ...

  2. 逻辑回归二分类算法python_机器学习第七周--二分类算法逻辑回归

    一.Logistic分类算法 逻辑回归(Logistic Regression, LR)是传统机器学习中的一种分类模型,由于算法的简单和高效,解释性好以及容易扩展等优点,被广泛应用于点击率预估(CTR ...

  3. 机器学习算法应用30篇(十一)-理解逻辑回归及二分类、多分类代码实践

    一.逻辑回归:二分类 1.1 理解逻辑回归 我们把连续的预测值进行人工定义,边界的一边定义为1,另一边定义为0.这样我们就把回归问题转换成了分类问题. 如上图,我们把连续的变量分布压制在0-1的范围内 ...

  4. 机器学习-分类算法-逻辑回归13

    逻辑回归是解决二分类问题的利器 数据来源:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wiscons ...

  5. 使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战

    使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战 目录

  6. 【机器学习基础】(三):理解逻辑回归及二分类、多分类代码实践

    本文是机器学习系列的第三篇,算上前置机器学习系列是第八篇.本文的概念相对简单,主要侧重于代码实践. 上一篇文章说到,我们可以用线性回归做预测,但显然现实生活中不止有预测的问题还有分类的问题.我们可以从 ...

  7. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

    吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...

  8. 机器学习(三):理解逻辑回归及二分类、多分类代码实践

    本文是机器学习系列的第三篇,算上前置机器学习系列是第八篇.本文的概念相对简单,主要侧重于代码实践. 上一篇文章说到,我们可以用线性回归做预测,但显然现实生活中不止有预测的问题还有分类的问题.我们可以从 ...

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

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

最新文章

  1. 我的ExtJS学习之路 ——4
  2. Redis学习笔记(八)——持久化
  3. bartlett方差齐性检验_基于R实现统计中的检验方法方差分析
  4. pandas python2.7_python-2.7 – Pandas Seaborn安装
  5. 排队问题解题思路_青岛版二年级数学下册8.2除加除减解决问题微课视频辅导+练习...
  6. Unity 游戏框架搭建 (九) 减少加班利器-QConsole
  7. 三包围结构的字是什么样的_男孩起名精选:搭配美观,结构合理的男宝宝名字...
  8. 解决算法问题的思路总结
  9. rx550 黑苹果_黑苹果Hackintosh显卡入手指南
  10. pandas数据处理操作大全
  11. Java底层--JVM与GC
  12. unity摄像机追踪屏幕抖动的问题
  13. HTML基本知识点——图片标记
  14. RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
  15. 我是如何通过拉勾教育学习《java高薪训练营》课程突破困境的
  16. 字、字节、位(word、byte、bit)的关系
  17. mex matlab混编,Matlab中mex与C混合编程总结
  18. 社会关系网络(SNA)如何应用于团伙欺诈识别
  19. 怎么用wps抽签_怎么用WPS做活动抽签用的PPT?有模板可以给我更好!
  20. php 批发管理系统,仓库管理系统批发零售解决方案

热门文章

  1. 腾讯百度等22家股东退出 链家注册资本缩水34%
  2. 2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小
  3. java 怎么使用同名类_java两个不同名类 在里面建立两个同名的类 怎么破
  4. linux 和 windows usb插拔侦测
  5. python变量类型之间转换_【Python】Python 变量类型(变量赋值,数据类型,数据转换)...
  6. python输出一棵松树_松树程序间距
  7. 【Flink】Direct buffer memory taskmanager.memory.task.off-heap.size
  8. 60-10-060-命令-kafka-run-class.sh
  9. 【Elasticsearch】 es include_type_name unless the include_type_name parameter is set to true
  10. 【Spring】Spring 如何解决循环依赖问题