逻辑回归(Logistic regression)详解-并用scikit-learn训练逻辑回归拟合Iris数据集

引言

这篇文章主要介绍逻辑回归背后的一些概率概念,给你一些直观感觉关于它的代价函数的由来。并且我也介绍了关于最大似然估计(maximum likelihood)的概念,用这个强大的工具来导出逻辑回归的cost函数。接着,我用scikit-learn训练了感知机模型来让你熟悉scikit-learn,最后用scikit-learn来训练逻辑回归,并作出决策边界图,效果还算不错。

逻辑函数(logistic function)

为了更好地解释逻辑回归,让我们首先了解一下逻辑函数。逻辑函数由于它的S形,有时也被称为sigmoid函数。

现在我要引入比值比(odds ratio)的概念,它可以被写成 p(1p) ,其中的 p 代表正事件(positive event)的概率,正事件并不是代表好的方面的概率,而是代表我们想要预测的事件。比如:病人患有某种疾病的概率。我们把正事件的类标签设置为1。比值比的对数称为Logit函数,它可以写成如下形式:

logit(p)=logp(1p)

它的函数图像如下:

Logit函数

图片来源 https://en.wikipedia.org/wiki/Logit#/media/File:Logit.svg

从图像上我们可以看出,logit函数输入0到1的值并把它们转换为整个实数范围内的值。上面的 p 代表正事件的概率,因此在给定特征向量 x 的条件下,类别 y=1 的概率可以写成 P(y=1|x) 。大家都知道概率的范围为0到1,如果我把这个概率传递给logit函数那么它的输出范围是整个实数,因此如果我用某些合适的权重向量 w 参数化特征向量 x 后,可以有如下等式:

logit(P(y=1|x))=w0x0+w1x1++wnxn=i=0nwixi

但是在实际应用中,我们更想求的是 P(y=1|x) ,因此,我们需要找到logit函数的反函数,通过输入用权重向量 w 来参数化的 x ,来输出我们想要知道的正事件的概率,即 P(y=1|x) 。而这个反函数就是我们的sigmoid函数,它可以写成 S(h)=11+eh ,公式中的 h 为样本特征和权重的线性组合,即, w0x0+w1x1++wnxn 。下面我们来画出这个函数图像的样子:

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()

sigmoid函数

从上图我们可以看出,函数接收整个实数范围的输入,输出0到1之间的数。

因此 S(w0x0+w1x1++wnxn)=P(y=1|x;w) ,这个概率我们可以解释成:给定用权重 w 参数化后的特征 x ,样本属于类别1的概率。通过阶跃函数(step function),我们可以得到如下公式:

f(n)={
  • 37
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 37
    评论
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值