【LR与SVM -1】逻辑回归(logistics regression)

1、逻辑回归的应用场景

  1. 广告点击率
  2. 是否为垃圾邮件
  3. 是否患病
  4. 金融诈骗
  5. 虚假账号

看到上面的例子,我们可以发现其中的特点,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器

2、 逻辑回归的原理

2.1 输入

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

2.2 激活函数

在这里插入图片描述

  • 分析
  • 回归的结果输入到sigmoid函数当中
  • 输出结果:[0, 1]区间中的一个概率值,默认为0.5为阈值

逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别,并且这个类别默认标记为1(正例),另外的一个类别会标记为0(反例)。(方便损失计算)

2.3 输出结果解释

输出结果解释(重要):
假设有两个类别A,B,并且假设我们的概率值为属于A(1)这个类别的概率值。现在有一个样本的输入到逻辑回归输出结果0.6,那么这个概率值超过0.5,意味着我们训练或者预测的结果就是A(1)类别。那么反之,如果得出结果为0.3那么,训练或者预测结果就为B(0)类别。

2.4 损失以及优化

2.4.1 损失

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

1)分开类别的损失函数:

2)综合完整损失函数

看到这个式子,其实与决策树中的信息熵类似

为方便理解,通过下面的例子来计算一遍,就能理解意义了!
在这里插入图片描述

2.4.2 优化

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

3 癌症分类预测案例

3.1 数据介绍

在这里插入图片描述
原始数据的下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/

数据描述

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

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

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

3.2 代码实现

def logisticregression():
    """
    逻辑回归进行癌症预测
    :return: None
    """
    # 导入相关数据包
    import pandas as pd
    import numpy as np
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LogisticRegression
    
    # 读取数据,处理缺失值以及标准化
    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

在这里插入图片描述

4、总结

LR实际上就是通过回归( y = w T X + b y = w^TX+ b y=wTX+b),将 y y y放入到激活函数而映射到0,1区间(分类的概率),最后通过阙值(一般默认是0.5)判断该样本的所属类别。

注意:阙值不一定要是0.5,在癌症等情况下可以适当减低阙值!

猜你喜欢

转载自blog.csdn.net/The_dream1/article/details/113341791