线性回归(Linear Regression),是所有机器学习初学者的起点。逻辑回归(Logistic Regression)是线性回归的一个推广,逻辑回归也可以说是最为经典的分类算法之一。

什么是逻辑回归?

线性回归预测是一个连续值。逻辑回归给的是“是”和“否”的回答。类似于布尔,是一个二元分类。

当我们想将线性回归应用到分类问题中该怎么办呢?比如二分类问题,将X对应的y分为类别0和类别1。我们知道,线性回归本身的输出是连续的,也就是说要将连续的值分为离散的0和1。答案很容易想到,找到一个联系函数,将X映射到y∈{0,1}。

Sigmoid函数是一个概率分布函数,给定某个输入,他将输出为一个概率值。

Sigmoid函数

逻辑回归损失函数_交叉熵

对于分类问题,最好使用交叉熵损失函数会更加有效。交叉熵会输出一个更大的损失。

交叉嫡刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉嫡的值越小,两个概率分布就越接近。假设概率分布p为期望输出,概率分布q为实际输出,H(p,q)为交叉嫡,则:

交叉熵计算公式

交叉熵会放大损失:

交叉熵会放大损失

在Keras里,我们使用binary_crossentropy来计算二元交叉熵。

keras逻辑回归实现

使用的credit-a.csv数据集,在文末下载。

通过前面的15列数据,得到最后一列是否为-1或者1。

最终的目标

import tensorflow as tf
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("credit-a.csv")

x = data.iloc[:,:-1]
y = data.iloc[:,-1].replace(-1,0)  # 把列表里的-1替换为0,因为逻辑回归的输出为0和1

model = tf.keras.Sequential()

#设置两个隐藏层
model.add(tf.keras.layers.Dense(4, input_shape=(15,),activation='relu'))
#第二层不需要设置输入的数量,自己推断即可
model.add(tf.keras.layers.Dense(4, activation='relu'))
#输出层,使用Sigmoid进行激活
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['acc']   # 输出正确率
)

# history.history.keys()
# 输出:dict_keys(['loss', 'acc'])

plt.plot(history.epoch,history.history.get("loss"))  #loss的变化,绘制图案
plt.plot(history.epoch,history.history.get("acc"))   #acc的变化,绘制图案

loss的变化以及acc的变化


credit-a.csv数据集下载

参考资料:

浅析机器学习:线性回归 & 逻辑回归


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/Regression.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 09 月 09 日
如果觉得我的文章对你有用,请随意赞赏