背景与原理:

线性回归可以实现对连续结果的预测,但是现实生活中我们常见的另一种问题是分类问题,尤其是二分类问题,在这种情况下使用线性回归就不太合适了,我们实际上需要计算出的是一个在$[0,1]$之间的概率来告诉我们某样本属于某一类的概率,因此逻辑回归应运而生。

一般的逻辑回归就是在线性回归的基础上嵌套一个逻辑函数,把线性回归的结果转换成概率。

即我们定义$h_{\theta}(X)=P(y=1|X,\theta),1-h_{\theta}(X)=P(y=0|X,\theta)$,那么我们希望最大化预测正确的概率,即我们要最大化:

$\prod_{i=1}^{m}P(y=y_{i}|X_{i},\theta)$

那么也就是:

$\prod_{i=1}^{m}(h_{\theta}(X_{i})^{y_{i}}(1-h_{\theta}(X_{i}))^{1-y_{i}}$

这不好计算,两侧取对数再去取相反数就得到:

$J(\theta)=-\dfrac{1}{m}\sum_{i=1}^{m}y_{i}\log h_{\theta}(X_{i})+(1-y_{i})\log (1-h_{\theta}(X_{i}))$

这样我们只需最小化这个损失函数就可以了,仍然使用梯度下降法确定参数,我们有:

$\hat{\theta_{j}}=\theta_{j}-\alpha \dfrac{\partial J(\theta)}{\partial \theta_{j}}$

对上式求偏导,最后我们得到:

$\hat{\theta_{j}}=\theta_{j}-\alpha \dfrac{1}{m}\sum_{i=1}^{m}(h_{\theta}(X_{i})-y_{i})x_{ij}$

而我们的操作是在线性模型的基础上套上一个逻辑模型,也即我们的参数仍然是线性模型的参数$\theta$:

$z=\theta^{T}X$

在这个基础上套上一个逻辑函数,这里我们选择的是sigmoid函数,即:

$g(z)=\dfrac{1}{1+e^{-z}}$

于是我们最后的函数即为:

$h_{\theta}=\dfrac{1}{1+e^{-\theta^{T}X}}$

代码实现:

import numpy as np
import math
from scipy import stats
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression def sigmoid(z):
return 1/(1+math.exp(-z)) def logical_regression(X,Y,theta,siz,alpha,eps):
delt=1 while delt>eps:
new_theta=np.zeros(3)
for i in range(0,3):
r=theta[i]
for j in range(0,siz):
d=alpha/siz*(sigmoid(theta[0]*X[0][j]+theta[1]*X[1][j]+theta[2]*X[2][j])-Y[j])*X[i][j]
r-=d
new_theta[i]=r
print(new_theta[i])
delta=new_theta-theta
delt=delta[0]**2+delta[1]**2+delta[2]**2
theta=new_theta
return theta x=np.arange(0.,10.,0.02)
y=5-2*x/3+np.random.randn(500)
now=0
dataset=[]
for i in range(0,500):
typ = 0
if 2*x[i]+3*y[i] <= 15:
if abs(np.random.randn(1)[0])<2:
typ = 1
else:
typ = 0
else:
if abs(np.random.randn(1)[0]) < 2:
typ = 0
else:
typ = 1 dataset.append([x[i],y[i],typ]) X=(np.array(dataset)[:,0:2]).T
x0=np.ones(500)
X=np.vstack([x0,X])
Y=(np.array(dataset)[:,2])
theta=np.array([1,1,1]) my_theta=logical_regression(X,Y,theta,500,1e-2,1e-7) print(my_theta) for i in range(0,500):
if Y[i]==1:
plt.scatter(X[1,i],X[2,i],c='r')
else:
plt.scatter(X[1,i],X[2,i],c='b')
plt.plot(x,-my_theta[1]/my_theta[2]*x-my_theta[0]/my_theta[2],c='g',linewidth=3)
plt.show()

这个代码生成了一组以直线$2x+3y-15=0$为分界的数据,并且加入了一定的随机化,最后通过逻辑回归能够找出这条直线,当然这里的参数选取同样也很重要

小结与优化:

逻辑回归中在一定程度上存在欠拟合的问题,因为很多时候分界线并不是直线而是曲线,此时单纯的线性函数已经无法拟合边界了,一个解决方案是引入更多维度,比如把$[x_{1},x_{2}]$扩展成$[x_{1},x_{2},x_{1}^{2},x_{2}^{2}]$,这样就可以更好拟合二次曲线形成的边界,以此类推等。

而精度问题则可能是由于数据特征有缺失或数据空间太大等,遇到这种情况可以加入正则化的一项使模型缩减系数,有利于提高模型的泛化能力。

python机器学习——逻辑回归方法的更多相关文章

  1. 吴裕雄 python 机器学习——逻辑回归

    import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot ...

  2. python机器学习-逻辑回归

    1.逻辑函数 假设数据集有n个独立的特征,x1到xn为样本的n个特征.常规的回归算法的目标是拟合出一个多项式函数,使得预测值与真实值的误差最小: 而我们希望这样的f(x)能够具有很好的逻辑判断性质,最 ...

  3. python机器学习——逻辑回归

    我们知道感知器算法对于不能完全线性分割的数据是无能为力的,在这一篇将会介绍另一种非常有效的二分类模型--逻辑回归.在分类任务中,它被广泛使用 逻辑回归是一个分类模型,在实现之前我们先介绍几个概念: 几 ...

  4. 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测

    线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...

  5. 机器学习---逻辑回归(二)(Machine Learning Logistic Regression II)

    在<机器学习---逻辑回归(一)(Machine Learning Logistic Regression I)>一文中,我们讨论了如何用逻辑回归解决二分类问题以及逻辑回归算法的本质.现在 ...

  6. 机器学习/逻辑回归(logistic regression)/--附python代码

    个人分类: 机器学习 本文为吴恩达<机器学习>课程的读书笔记,并用python实现. 前一篇讲了线性回归,这一篇讲逻辑回归,有了上一篇的基础,这一篇的内容会显得比较简单. 逻辑回归(log ...

  7. 机器学习之使用Python完成逻辑回归

    一.任务基础 我们将建立一个逻辑回归模型来预测一个学生是否被大学录取.假设你是一个大学系的管理员,你想根据两次考试的结果来决定每个申请人的录取机会.你有以前的申请人的历史数据,你可以用它作为逻辑回归的 ...

  8. 机器学习——逻辑回归(Logistic Regression)

    1 前言 虽然该机器学习算法名字里面有"回归",但是它其实是个分类算法.取名逻辑回归主要是因为是从线性回归转变而来的. logistic回归,又叫对数几率回归. 2 回归模型 2. ...

  9. python机器学习《回归 一》

    唠嗑唠嗑 依旧是每一次随便讲两句生活小事.表示最近有点懒,可能是快要考试的原因,外加这两天都有笔试和各种面试,让心情变得没那么安静的敲代码,没那么安静的学习算法.搞得第一次和技术总监聊天的时候都不太懂 ...

  10. 机器学习---逻辑回归(一)(Machine Learning Logistic Regression I)

    逻辑回归(Logistic Regression)是一种经典的线性分类算法.逻辑回归虽然叫回归,但是其模型是用来分类的. 让我们先从最简单的二分类问题开始.给定特征向量x=([x1,x2,...,xn ...

随机推荐

  1. shell_Day09

    awk [单独的编程语言解释器] awk介绍 全称:Aho Weinberger Kernaighan 三个人的首字母缩写: 1970年第一次出现在Unix机器上,后来在开源领域使用它: 所以,我们在 ...

  2. Windows10使用WSL(Windows Subsystem for Linux)

    官方页面地址:https://docs.microsoft.com/zh-cn/windows/wsl/ 查看WSL的IP地址:ip addr | grep eth0 下面是一个示例 PowerShe ...

  3. mybatis中多条件模糊查询不显示数据的问题

    在写查询语句时:

  4. Jmeter学习:Jmeter函数助手

    转载地址:https://www.cnblogs.com/imyalost/p/6802173.html

  5. Didn't find class "org.apache.http.ProtocolVersion

    使用volley时报"Didn't find class "org.apache.http.ProtocolVersion" 今天在运行签名好的apk 在android9 ...

  6. 05 Java 数组

    Java 数组 一.什么是数组 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的顺序排列组合而成 其中每一个数据称为数组元素,每个数组元素可以通过下标来访问它们 二.数组的声 ...

  7. 【EBS】总账YTD\PTD等概念

    PTD 余额是指给定期间账户中的净活动.周期通常等于一个月. YTD 余额是指账户从时间开始到给定期间结束的净活动. 例如 假设您在 1 月 15 日声明了一项业务.您在 1 月 15 日从现金账户中 ...

  8. mysql修改密码报错:Your password does not satisfy the current policy requirements

    这是 mysql 初始化时,使用临时密码,修改自定义密码时,由于自定义密码比较简单,就出现了不符合密码策略的问题. 密码策略问题异常信息: ERROR 1819 (HY000): Your passw ...

  9. 输入流导致javax.crypto.BadPaddingException

    使用FileInputStream一切正常,切换为使用classpath从jar包读取getResourceAsStream一直报如下错误 javax.crypto.BadPaddingExcepti ...

  10. 《Vue.js 3.x高效前端开发(视频教学版)》源码课件同步教学视频免费下载

    <Vue.js 3.x高效前端开发(视频教学版)>源码课件同步教学视频免费下载.获得出版社和作者授权,可用于个人学习使用,禁止任何形式的商用.