逻辑回归简介
发布日期:2021-07-03 20:40:23 浏览次数:2 分类:技术文章

本文共 3399 字,大约阅读时间需要 11 分钟。

机器学习(十三)逻辑回归

文章目录

一.什么是逻辑回归

我们之前学习的线性回归,主要是应用在连续型数据上,也被称作:多重线性回归。在理解了多重现行线性回归的基础上,我们才能比较容易理解逻辑回归。两者有共同点,也有不同点。

  • 相同点:二者的模型形式基本上相同,以单变量为例,二者都具有 w*x+b这种形式

  • 不同点:

    多重线性回归直接将w*x+b作为因变量,即y =w*x+b,而逻辑回归则通过函数L将w*x+b对应到另一个状态p,即:p =L(w*x+b),然后根据p 与1-p的大小决定因变量的值。

  • 某些方面讲,线性回归也有一个L,只是这个L相当于p = 1 * (w*x + b)。因此,我们可以这么理解:如果L是逻辑函数,就是逻辑回归,如果L是多项式函数就是多项式回归……

那么,这个逻辑函数是什么呢?

其实有很多种逻辑函数,但是在深度学习当中,最为常用的事Sigmoid函数:

在这里插入图片描述

Sigmoid函数的图像如下图所示:

在这里插入图片描述

于是,我们把线性回归函数的矩阵形式作为自变量代入,就得到了逻辑回归的方程式:

在这里插入图片描述

其实那里面的theta,就是我们之前说的W。只是表示的符号变了一个。

由于Sigmoid函数大致一看,最大值无限接近1。因此和概率问题有点像,毕竟概率不可能大于一。因此,逻辑回归的输出值也是在[0, 1]之间。其中取p=0.5作为一个界限,一旦输出值小于0.5, 我们干脆就直接取0。 否则,就直接取1。

正是因为这个理念,以Sigmoid函数作为逻辑函数的逻辑回归方程,经常用于二分类问题,因此逻辑回归是用来处理分类问题的。

二.什么是二分类问题

说白了就是二选一的问题。比如说:

  • 广告点击率。对于用户而言,要么点击这个广告,要么不点击,就这两个选项。不可能有第三个选项

  • 判断用户的性别。不考虑欧美那些政治正确的东西,整体而言,就是女性,男性两种性别。没有第三个选项

  • 预测用户是否会购买给定的商品类:要么买,要么不买。

三.逻辑回归的损失函数

与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解。

对数似然损失函数:

在这里插入图片描述

完整的损失函数:

在这里插入图片描述
这个损失函数是可以推导出来的,详细见:
的第三部分。

在这里,我们需要跟线性回归的损失函数做一个对比。在线性回归当中,均方误差不存在多个局部最低点。但是,对数似然损失却有多个局部最小值,就像下面这张图:

在这里插入图片描述

利用梯度下降的方式,其实你只能无限接近于那个极小值点,但是,这个极小值点是不是最小值点,你却并不好做判断,而且,很遗憾,现在也没有什么有效办法能解决这个问题。因此,经过不断的总结,人们逐渐想出了一些其他方式,比如:

  • 1、多次随机初始化,多次比比较最小小值结果
  • 2、求解过程当中,不断调整学习率

不过,以上方式都是治标不治本的方法。只能做到尽量改善

除了以上这两个,还有BGD(批量梯度下降), SGD(随机梯度下降)。具体可以见的第五部分。

四.逻辑回归的使用

4.1 相关API

在sklearn中,逻辑回归的API如下:

sklearn.linear_model.LogisticRegressionklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0) #Logistic回归分类器"""penalty:其实是指定哪种正则化,l1还是l2?c:正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数coef_:回归系数"""

4.2 相关案例

这是一个良性/恶性肿瘤的预测案例。相关数据存放在如下链接:

https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/

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

这组数据包含如下字段,在原链接当中有说明,但是却没有出现在原始数据当中,因此,在read_csv的时候,得利用里面的names参数构造出一个属性列表

'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'

相关代码如下:

from sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.metrics import classification_reportimport numpy as npimport pandas as pddef 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("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=column)    print(data)    # 缺失值进行处理,将?替换为nan,然后利用np自带的dropna方法把这些无效数据删除    data = data.replace(to_replace='?', value=np.nan)    data = data.dropna()    # 进行数据的分割,第0列为患者id,因此我们不需要。我们把1~9列设置为训练集,最后一列设置为目标值,样本取25%    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(C=1.0)    lg.fit(x_train, y_train)    print(lg.coef_)    y_predict = lg.predict(x_test)    print("准确率:", lg.score(x_test, y_test))    print("召回率:", classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"]))    return Noneif __name__ == "__main__":    logistic()

转载地址:https://blog.csdn.net/johnny_love_1968/article/details/116138620 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:k-means算法简介
下一篇:岭回归

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月09日 07时52分52秒