引言
这篇文章主要介绍逻辑回归背后的一些概率概念,给你一些直观感觉关于它的代价函数的由来。并且我也介绍了关于最大似然估计(maximum likelihood)的概念,用这个强大的工具来导出逻辑回归的cost函数。接着,我用scikit-learn训练了感知机模型来让你熟悉scikit-learn,最后用scikit-learn来训练逻辑回归,并作出决策边界图,效果还算不错。
逻辑函数(logistic function)
为了更好地解释逻辑回归,让我们首先了解一下逻辑函数。逻辑函数由于它的S形,有时也被称为sigmoid函数。
现在我要引入比值比(odds ratio)的概念,它可以被写成 p(1−p) ,其中的 p 代表正事件(positive event)的概率,正事件并不是代表好的方面的概率,而是代表我们想要预测的事件。比如:病人患有某种疾病的概率。我们把正事件的类标签设置为1。比值比的对数称为Logit函数,它可以写成如下形式:
它的函数图像如下:
图片来源 https://en.wikipedia.org/wiki/Logit#/media/File:Logit.svg
从图像上我们可以看出,logit函数输入0到1的值并把它们转换为整个实数范围内的值。上面的 p 代表正事件的概率,因此在给定特征向量
但是在实际应用中,我们更想求的是 P(y=1|x) ,因此,我们需要找到logit函数的反函数,通过输入用权重向量 w 来参数化的
import matplotlib.pyplot as plt
import numpy as np
def sigmoid(h):
return 1.0 / (1.0 + np.exp(-h))
h = np.arange(-10, 10, 0.1) # 定义x的范围,像素为0.1
s_h = sigmoid(h) # sigmoid为上面定义的函数
plt.plot(h, s_h)
plt.axvline(0.0, color='k') # 在坐标轴上加一条竖直的线,0.0为竖直线在坐标轴上的位置
plt.axhspan(0.0, 1.0, facecolor='1.0', alpha=1.0, ls='dotted') # 加水平间距通过坐标轴
plt.axhline(y=0.5, ls='dotted', color='k') # 加水线通过坐标轴
plt.yticks([0.0, 0.5, 1.0]) # 加y轴刻度
plt.ylim(-0.1, 1.1) # 加y轴范围
plt.xlabel('h')
plt.ylabel('$S(h)$')
plt.show()
从上图我们可以看出,函数接收整个实数范围的输入,输出0到1之间的数。
因此 S(w0x0+w1x1+⋯+wnxn)=P(y=1|x;w) ,这个概率我们可以解释成:给定用权重 w 参数化后的特征