Machine Learning——逻辑回归基础(Logistic Regression)

逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了。

一、模型介绍

logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。

logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。

Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。

Logistic 回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计。

应用场景

注:逻辑回归是解决二分类问题的利器。

广告点击率、是否是垃圾邮件、是否患病、金融诈骗、虚假账号

二、逻辑回归详解

将线性回归的式子作为该类问题的输入,最终实现对分类问题的处理。

逻辑回归问题处理的过程:线性回归式子做输入——> sigmoid函数对输入数据进行转换——> 实现分类问题的处理。

1、sigmoid函数介绍

sigmoid函数可以将一个输入项转换成[0,1]之间的任意值。

注: Z:代表线性回归的结果,作为逻辑回归的输入项

(1)sigmoid函数图像

2、逻辑回归的损失函数(当作信息熵用)

与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降方法求解。损失函数求得的结果是在0/1类的概率

对数似然损失函数图形分析:

(1)目标值是1类时:

当预测为1类的概率h越来越接近1时,y=1的损失越来越小

(2)目标值是0类时:

当判断为1类的概率h越来越大接近1时,y=0的损失越来越大

三、损失函数分析

目前接触到的损失函数有:均方误差 和 对数似然损失。

均方误差:(不存在多个局部最低点)只有一个最小值

对数似然损失:多个局部最小值(目前解决不了的问题)

多个局部最小值问题目前解决不了,但是可以通过一些办法适当处理,解决办法(尽量改善):

  • 1、多次随机初始化,多次比较最小值结果
  • 2、求解过程中调整学习率
  • 注:尽管没有全局最低点,但是使用以上方法效果都是不错的

四、逻辑回归的API

sklearn.linear_model.LogisticRegression

逻辑回归的处理过程中,也会出现过拟合现象,好在API加入了 penalty 参数,默认加入了L2正则化处理,解决了过拟合现象。C参数值含义:正则化的力度

五、逻辑回归预测癌症案例

良 / 恶性乳腺癌肿数据

This breast cancer databases was obtained from the University of Wisconsin Hospitals.

数据描述:

  • 1、699条样本,共11列数据,第一列用于检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类型的数值。
  • 2、包含16个缺失值,用“?”标出

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

1、原始数据告知:

2、数据内部属性介绍:

3、具体分析

在癌症案例的预测过程中,我们需要关注召回率,了解到真正是癌症的患者有多少没有被预测出来!

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report
import pandas as pd
import numpy as np

def logistic():
    """
    逻辑回归做二分类处理癌症预测问题(根据细胞的属性特征)
    :return: None
    """
    #构造属性列表
    column = ['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("E:/python/pyData/breast-cancer-wisconsin.data",
                       names = column)
    #缺失值进行处理(?标记)
    #to_place指定要被替换的值,value指定替换后的值
    data = data.replace(to_replace='?', value=np.nan)
    data = data.dropna()

    #进行数据分割
    x_train, x_test,y_train,y_test = train_test_split(data[column[1:10]], data[column[10]], test_size=0.25)

    #进行标准化处理(分类问题目标值不需要标准化处理)
    std = StandardScaler()
    x_train = std.fit_transform(x_train)
    x_test = std.transform(x_test)

    #逻辑回归进行预测
    lg = LogisticRegression(penalty='l2', C=1.0)
    lg.fit(x_train, y_train) #训练模型
    y_predict = lg.predict(x_test)
    print("权重值:", lg.coef_)
    print("准确率:", lg.score(x_test, y_test))

    #召回率
    print("召回率:")
    print(classification_report(y_test, y_predict,
                                        labels=[2,4],target_names=['良性', '恶性']))

    return None

if __name__ == '__main__':
    logistic()

六、逻辑回归总结

应用:广告点击率预测、是否是垃圾邮件、是否患病、金融诈骗、是否为虚假账号

优点:适合需要得到一个分类概率的场景,简单,速度快

缺点:不好处理多分类问题

1、逻辑回归在多分类问题上的应用

可以做多分类问题,但是一般不用。逻辑回归问题解决多分类问题的决绝办法:1V1,1Vall

常使用softmax方法:逻辑回归在多分类问题上的推广,将在神经网络算法中使用,多用于图像处理等方面。

2、逻辑回归和朴素贝叶斯的区别

 逻辑回归问题朴素贝叶斯
解决问题二分类多分类问题
应用场景癌症、二分类需要概率情况下文本分类
参数正则化力度

没有

模型判别模型生成模型
共同点:得出的结果都有概率解释

生成模型和判定模型:

从概率分布的角度考虑,对于一堆样本数据,每个均有特征Xi对应分类标记yi。

生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。

  • 隐马可夫模型、朴素贝叶斯

判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率。

  • k-近邻模型,决策树、随机森林、神经网络、逻辑回归问题

两者区别:有无先验概率,生成模型有先验概率,而判别模型没有

数据要求:生成模型需要的数据量比较大,能够较好地估计概率密度;而判别模型对数据样本量的要求没有那么多。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值