对数几率回归原理和代码实现--机器学习

对数几率回归Logistic Regression

原理

对数几率回归,有的也叫逻辑回归,虽然带有回归二字,但本质是做分类任务的,也是线性模型的一种。

之前介绍过线性回归,就是用最简单的线性方程对数据进行拟合。线性回归模型可简写为 z = ω T x + b z=\omega^{T} x+b z=ωTx+b是连续的,且只能完成回归任务,而无法完成分类任务。对数几率回归就是在线性模型的基础上构建出一个模型完成分类任务。

利用线性模型进行回归学习时预测到的实值是(- ∞ \infty ,+ ∞ \infty )的数。而二分类问题预测的值是{0,1},二分类结果预测到的结果不是0,就是1。如果要做的是这种分类任务,那该怎么办?

这时只需要找到一个单调可微的函数将分类任务的真实值y与线性回归模型的预测值z联系起来。

如上所说,考虑到二分类任务输出的结果y ∈ \in {0,1},而线性回归模型产生的预测值 z = ω T x + b z=\omega^{T} x+b z=ωTx+b是实值,于是我们可以找到一个函数介入将线性模型预测出来的值z转化为二分类任务中的0/1值。

最理想的一个转化函数就是“单位阶跃函数”,它作为一个分段函数,将预测值z大于0的就判为1,z小于0的判为0,预测值z处于临界值的就可以随意判别。下图中红色的线段表示单位阶跃函数的图像。

在这里插入图片描述
第二段说过,线性模型是连续的,所以这个介入进行值转化的函数必须为连续的且要尽可能单调可微。但在图中我们可以看到单位阶跃函数是不连续的,所以这个函数不能用用于线性模型预测值的转化。

这时就可以用到对数几率函数: y = 1 1 + e − z y=\dfrac{1}{1+e^{-z}} y=1+ez1

就是上图中黑色线代表的函数。

对数几率函数是一种“Sigmoid函数”,从图像上看可以也叫做S型函数。对数几率函数是Sigmoid函数最重要的代表,在后面的神经网络中有着重要作用。它不是仅预测出类别,而是可得到近似概率预测,这对许多需要辅助决策的任务很有用。在这里它可以将z值转化为一个接近0/1的值,其输出值在z=0附近变化很陡。

对数几率回归模型就是在拟合 z = ω T x + b z=\omega^{T} x+b z=ωTx+b 这条直线,使得这条直线尽可能地将原始数据中的两个类别按照0或1值正确的划分开。
将z带入得到最终对数几率回归模型如下:

y = 1 1 + e − ( ω T x + b ) y=\dfrac{1}{1+e^{-(\omega^{T}x+b)}} y=1+e(ωTx+b)1

上述模型的实现关键还是对于 ω \omega ω b b b的求解,可采用极大似然估计来估计 ω \omega ω b b b

通过对数几率回归模型中的损失函数(对数损失)来获取到 ω \omega ω b b b的更新公式进行代码实现

代码实现

这里只使用python代码用sklearn实现对数几率回归模型的 ω \omega ω b b b求解和简单数据预测

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
#数据集是西瓜数据,判断是否为好瓜,好为1,坏为0;特征为二维矩阵,

#读数据
data=np.loadtxt("F:\comdata\watermelon3_0a.csv",delimiter=",",dtype=np.float32)
#分割
x=data[:,1:3]
y=data[:,-1]
#训练集,预测集数据分割
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.4)

#获取对数几率回归对象,进行模型训练,求解参数w和偏置b
log_model=LogisticRegression(solver="liblinear")
log_model.fit(x_train,y_train)
y_predict=log_model.predict(x_test)

print(log_model.coef_)#求解参数w
print(log_model.intercept_) #偏置b
print(y_predict)#分类结果预测


求解结果如下:
在这里插入图片描述

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值