机器学习之逻辑回归

本文介绍了逻辑回归的概念及其在分类问题中的应用,特别是针对二分类问题。逻辑回归利用Sigmoid函数将连续预测值转换为概率,并通过极大似然估计寻找最优模型参数。此外,还展示了如何使用Python的Scikit-Learn库实现逻辑回归模型,并解释了模型预测概率和阈值设定的重要性。
摘要由CSDN通过智能技术生成

机器学习之逻辑回归

一. 什么是逻辑回归

首先我们要明白什么是逻辑回归
逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏
Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),他的y尝尝是分类变量,就是0或1这种的

Logistic回归与多重线性回归实际上有很多相同之处,

最大的区别就在于它们的因变量不同,其他的基本都差不多。正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedlinear model)。
这一家族中的模型形式基本上都差不多,不同的就是因变量不同。这一家族中的模型形式基本上都差不多,不同的就是因变量不同。

如果是连续的,就是多重线性回归
如果是二项分布,就是Logistic回归
如果是Poisson分布,就是Poisson回归
如果是负二项分布,就是负二项回归

二、Sigmoid函数

首先第一步我们要构造预测函数,叫做sigmoid函数,也被成为预测函数.
在这里插入图片描述
在这里插入图片描述

解释:将任意的输入映射到[0,1]区间我们在线性回归中得到一个预测值,再将该值映射到sigmoid函数中就完成了一个值到概率的转化,也就是分类任务。

其中z=在这里插入图片描述

实际上g(z)并不是预测结果,而是预测结果为正例的概率,一般来说阈值为0.5,也就是当g(z)>0.5,我们就说他是正例,g(z)<0.5就是负例,但在实际应用中也可能不同。比如我们预测一个人是否患有新型冠状病毒,我们这时如果只设置阈值为0.5,那么一个人患有新冠的概率为0.45,我们的模型也会认为他没有新冠,所以这时我们不妨把阈值设置的小一些如0.1,如果概率大于0.1你就要去做检查隔离,这样可以减少误差防止漏放病人。
上述可知:
P(y=0|w,x) = 1 – g(z) #预测为负例
P(y=1|w,x) = g(z) #预测为正例

所以单条预测正确的概率为
P(正确) =在这里插入图片描述*在这里插入图片描述
这里解释一下,yi为某一个样本的预测值,为0或者1

那么为什么P(正确)等于这个呢,你想想,假设我们预测他为1的概率是0.8,预测他为0的概率是0.2。那么这时候如果我们说他是1,那么我们正确的概率就是0.8,如果我们说他是0,那我们正确的概率就是0.2

三、极大似然估计

因此我们要去寻找一个w的值使得g(z)正确的概率最大,而我们在上面的推理过程中已经得到每个单条样本预测正确概率的公式

若想让预测出的结果全部正确的概率最大,根据最大似然估计,也就是所有样本预测正确的概率相乘得到的P(总体正确)最大,似然函数如下:
在这里插入图片描述
我们对其取对数可得:
在这里插入图片描述
得到的这个函数越大,证明我们得到的W就越好.此时为梯度上升求最大值,引入j(θ)=(-1/m)L(θ)转化为梯度下降任务,得到公式如下:
在这里插入图片描述
这就是其代价函数,也称交叉熵函数。

四、求解W

我们对代价函数求导可得:
在这里插入图片描述

然后采用梯度下降来更新w:
在这里插入图片描述

我们随便来举个例子来看看具体是怎么实现的

import numpy as np
from sklearn.linear_model import LogisticRegression
# data数据   4,3    x1, x2, y
data = np.array([
    [1, 1, 0],
    [1, 2, 0],
    [0, 0, 1],
    [-1, 0, 1]
])

#数据集切分,  前两列特征,最后一列作为标签
x = data[:, :-1]
y = data[:, -1:]
print(x)
print(y)
[[ 1  1]
 [ 1  2]
 [ 0  0]
 [-1  0]]
[[0]
 [0]
 [1]
 [1]]

# 调用模型LogisticRegression()训练预测
model = LogisticRegression()
model.fit(x, y.ravel())  #ravel 返回连续的展平数组
y_ = model.predict(x)  #这一步的x你可以换成你想要的测试集
print(y_)
[0 0 1 1]

#打印输出的可能性, 第一列为0样本,第二列为1样本
print(model.predict_proba(x))
 [[0.67147648 0.32852352]
 [0.80685489 0.19314511]
 [0.3285313  0.6714687 ]
 [0.19314393 0.80685607]]

还可以查看w和b的值在这里插入图片描述

w = model.coef_
b = model.intercept_
print(w)
print(b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值