逻辑回归

机器学习逻辑回归算法推导

六月ゝ 毕业季﹏ 提交于 2019-12-06 02:48:38
1.引自 https://www.cnblogs.com/bnuvincent/p/9695666.html 2. 基本原理 Logistic Regression和Linear Regression的原理是相似的,按照我自己的理解,可以简单的描述为这样的过程: (1)找一个合适的预测函数(Andrew Ng的公开课中称为hypothesis),一般表示为 h 函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程时非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。 (2)构造一个Cost函数(损失函数),该函数表示预测的输出( h )与训练数据类别( y )之间的偏差,可以是二者之间的差( h-y )或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为 J(θ) 函数,表示所有训练数据预测值与实际类别的偏差。 (3)显然, J(θ) 函数的值越小表示预测函数越准确(即 h 函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有的是梯度下降法(Gradient Descent)。 3. 具体过程 3.1 构造预测函数 Logistic Regression虽然名字里带“回归”

logistic回归介绍以及原理分析

女生的网名这么多〃 提交于 2019-12-05 21:59:55
1.什么是logistic回归? logistic回归虽然说是回归,但确是为了解决分类问题,是二分类任务的首选方法,简单来说,输出结果不是0就是1 举个简单的例子: 癌症检测:这种算法输入病理图片并且应该辨别患者是患有癌症(1)或没有癌症(0) 2.logistic回归和线性回归的关系 逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。 逻辑回归假设因变量 y 服从二项分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。 可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题。 换种说法: 线性回归,直接可以分为两类, 但是对于图二来说,在角落加上一块蓝色点之后,线性回归的线会向下倾斜,参考紫色的线, 但是logistic回归(参考绿色的线)分类的还是很准确,logistic回归在解决分类问题上还是不错的 3.logistic回归的原理 Sigmoid函数: 曲线: 我们希望随机数据点被正确分类的概率最大化,这就是最大似然估计。 最大似然估计是统计模型中估计参数的通用方法。 你可以使用不同的方法(如优化算法

逻辑回归与最大熵模型

匆匆过客 提交于 2019-12-05 11:23:51
逻辑回归 sigmoid函数= \(\sigma(x)=\frac{1}{1+e^{-x}}=\frac{e^{x}}{1+e^{x}}\) 二项逻辑回归模型 有如下条件概率分布, \(w\) 内已经包含了偏置 \(b\) : \[P(Y=1|x)=\frac{\exp(w\cdot x)}{1+\exp(w\cdot x)}\] \[P(Y=0|x)=\frac{1}{1+\exp(w\cdot x)}\] 对数几率: \[\text{logit}(p)=\frac{P(Y=1|x)}{1-P(Y=1|x)}=\frac{p}{1-p}=w\cdot x\] 参数估计 设: \(P(Y=1|x)=\pi (x), \qquad P(Y=0|x)=1-\pi (x)\) 似然函数为 \[\prod \limits_{i=1}^N[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i}\] 对数似然函数为 \[\begin{aligned} \mathcal{L}(w) &=\sum \limits_{i=1}^N[y_i\log \pi(x_i)+(1-y_i)\log (1-\pi(x_i))] \\ & = \sum \limits_{i=1}^N[y_i(w_i \cdot x_i)-\log (1+\exp(w \cdot x_i))] \end

机器学习笔记1_逻辑回归

走远了吗. 提交于 2019-12-05 09:59:40
目录 1 Logistic Regression 1.1 LR模型 1.2 损失函数 1.3 优化方法 1.4 Regulization(正则化) 1.5多元逻辑回归 1.6 总结 @ 1 Logistic Regression Logistic Regression 逻辑回归,简称LR,适合于分类问题 1.1 LR模型 对于线性回归模型,需要拟合一个 \(Y=X\theta+b\) 的函数,回归问题适合于连续的问题,而对于分类问题,需要得到一系列离散的标签,以二分类为例,需要预测的类别为0,1.可以使用sigmoid函数将连续问题转化为离散问题: \[g(z) = \frac{1}{1+e^{-z}} \] sigmoid函数的图像为: 其中, \(z \to +\infty\) 时, \(g(z) \to 1\) , \(z \to -\infty\) 时, \(g(z) \to 0\) . Sigmoid函数的导数为: \[g'(z)=g(z)(1-g(z))\] 令 \(z=\theta x+b\) ,则有: \[h_\theta(x) = \frac{1}{1+e^{-\theta x+b}}\] 对于二分类问题,该函数的输出可以理解为分类为1的概率,如果把X记为 \([x^{(1)},x^{(2)},...,x^{(m)}]\) , \(\theta\) 记为 \([

A--利用梯度下降求解逻辑回归的python实现

旧时模样 提交于 2019-12-05 05:31:37
#导入必要的包 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline BGD求解逻辑回归 In [2]: #⾸先定义联系函数sigmoid函数 def sigmoid(inX): return 1.0/(1+np.exp(-inX)) In [7]: #自定义一个归一化函数(此函数的前提是我的数据是一个矩阵) def regularize(xMat): inMat = xMat.copy()#创建一个副本,这样对inmat进行操作不会影响到xmat inMeans = np.mean(inMat,axis = 0) #求均值 inVar = np.std(inMat,axis = 0) #求标准差 inMat = (inMat - inMeans)/inVar #归一化 return inMat In [4]: #编写批量梯度下降的自定义函数 def logisticReg_0(dataSet,eps=0.01,numIt=50000): xMat = np.mat(dataSet.iloc[:, :-1].values) yMat = np.mat(dataSet.iloc[:, -1].values).T

L0、L1、L2范数正则化

无人久伴 提交于 2019-12-04 10:46:46
参考资料(要是对于本文的理解不够透彻,必须将以下博客认知阅读,方可全面了解LR): (1). https://zhuanlan.zhihu.com/p/74874291 (2). 逻辑回归与交叉熵 (3). https://www.cnblogs.com/pinard/p/6029432.html (4). https://zhuanlan.zhihu.com/p/76563562 (5). https://www.cnblogs.com/ModifyRong/p/7739955.html 一、逻辑回归介绍   逻辑回归(Logistic Regression)是一种广义线性回归。线性回归解决的是回归问题,预测值是实数范围,逻辑回归则相反,解决的是分类问题,预测值是[0,1]范围。所以逻辑回归名为回归,实为分类。接下来让我们用一句话来概括逻辑回归(LR): 逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。 这句话包含了五点,接下来一一介绍: 逻辑回归的假设 逻辑回归的损失函数 逻辑回归的求解方法 逻辑回归的目的 逻辑回归如何分类 二、逻辑回归的假设 任何的模型都是有自己的假设,在这个假设下模型才是适用的。 逻辑回归的第一个基本假设是假设数据服从伯努利分布。 伯努利分布:是一个离散型概率分布,若成功,则随机变量取值1;若失败

通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战

天大地大妈咪最大 提交于 2019-12-04 09:04:44
前情提要: 通俗地说逻辑回归【Logistic regression】算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklearn 逻辑回归模型的参数,以及具体的实战代码。 1.逻辑回归的二分类和多分类 上次介绍的逻辑回归的内容,基本都是基于二分类的。那么有没有办法让逻辑回归实现多分类呢?那肯定是有的,还不止一种。 实际上二元逻辑回归的模型和损失函数很容易推广到多元 逻辑回归。比如总是认为某种类型为正值,其余为0值。 举个例子,要分类为A,B,C三类,那么就可以把A当作正向数据,B和C当作负向数据来处理,这样就可以用二分类的方法解决多分类的问题,这种方法就是最常用的one-vs-rest,简称OvR。而且这种方法也可以方便得推广到其他二分类模型中(当然其他算法可能有更好的多分类办法)。 另一种多元逻辑回归的方法是Many-vs-Many(MvM),它会选择一部分类别的样本和另一部分类别的样本来做逻辑回归二分类。 听起来很不可思议,但其实确实是能办到的。比如数据有A,B,C三个分类。 我们将A,B作为正向数据,C作为负向数据,训练出一个分模型。再将A,C作为正向数据,B作为负向数据,训练出一个分类模型。最后B,C作为正向数据,C作为负向数据,训练出一个模型。 通过这三个模型就能实现多分类,当然这里只是举个例子

sklearn实现逻辑回归

…衆ロ難τιáo~ 提交于 2019-12-04 03:35:48
首先我们来看下面一组数据集: 前面的x1与x2都表示的是年收入和年龄这两个因素决定的是否买车的结果。 开始代码部分,我们先输入x和y的变量,开始输入数据: from sklearn import linear_model X=[[20,3], [23,7], [31,10], [42,13], [50,7], [60,5]] Y=[0, 1, 1, 1, 0, 0] 拟合逻辑回归模型: lr=linear_model.LogisticRegression(solver='liblinear')#在新版的sklearn当中只需要指定后面的参数值就不会进行报错啦! lr.fit(X,Y) 这个时候我们的模型已经拟合好了,现在可以开始进行输出了,随便用一个数据来测试在这个模型下这个人是否买车,以及是否买车的概率: textX=[[28,8]] lable=lr.predict(textX)#看它是否有车,1表示有 输出: array([1]) 输出为一,说明这个人已经买车了,下面是输出概率: #现在输出有车的概率 predict=lr.predict_proba(textX)predict 输出为: array([[0.14694811, 0.85305189]])#前面有两个值,这是因为前面的一个概率预测为0的概率,后面的为概率预测为1的概率 得解也,逻辑回归模型的编程还是十分容易的啦

通俗地说逻辑回归【Logistic regression】算法(一)

半腔热情 提交于 2019-12-03 20:25:32
在说逻辑回归前,还是得提一提他的兄弟,线性回归。在某些地方,逻辑回归算法和线性回归算法是类似的。但它和线性回归最大的不同在于,逻辑回归是作用是分类的。 还记得之前说的吗,线性回归其实就是求出一条拟合空间中所有点的线。逻辑回归的本质其实也和线性回归一样,但它加了一个步骤,逻辑回归使用sigmoid函数转换线性回归的输出以返回概率值,然后可以将概率值映射到两个或更多个离散类。 如果给出学生的成绩,比较线性回归和逻辑回归的不同如下: 线性回归可以帮助我们以0-100的等级预测学生的测试分数。线性回归预测是连续的(某个范围内的数字)。 Logistic回归可以帮助预测学生是否通过。逻辑回归预测是离散的(仅允许特定值或类别)。我们还可以查看模型分类背后的概率值。 一.从回归到分类的核心 --Sigmoid Function 之前介绍线性回归的时候,它的函数是这样样子的: h(x)=θ0 + θ1 * x1 + θ2 * x2 + θ3 * x3 ... 但这样的函数是没办法进行分类的工作的,所以我们要借助一下其他函数,那就是Sigmoid Function。 我们先来看看这个Sigmoid Function长什么样,Sigmoid Function的数学公式是这样子的: 如果表示在平面坐标轴上呢,那它长这个样子。 这个Sigmoid Function可以将线性的值,映射到[0-1]这个范围中

逻辑回归代码demo

半腔热情 提交于 2019-12-03 07:36:21
概念 代价函数关于参数的偏导 梯度下降法最终的推导公式如下 多分类问题可以转为2分类问题 正则化处理可以防止过拟合,下面是正则化后的代价函数和求导后的式子 正确率和召回率F1指标 我们希望自己预测的结果希望更准确那么查准率就更高,如果希望更获得更多数量的正确结果,那么查全率更重要,综合考虑可以用F1指标 关于正则化为啥可以防止过拟合的理解 梯度下降法实现线性逻辑回归 1 import matplotlib.pyplot as plt 2 import numpy as np 3 from sklearn.metrics import classification_report#分类 4 from sklearn import preprocessing#预测 5 # 数据是否需要标准化 6 scale = True#True是需要,False是不需要,标准化后效果更好,标准化之前可以画图看出可视化结果 7 scale = False 8 # 载入数据 9 data = np.genfromtxt("LR-testSet.csv", delimiter=",") 10 x_data = data[:, :-1] 11 y_data = data[:, -1] 12 13 def plot(): 14 x0 = [] 15 x1 = [] 16 y0 = [] 17 y1 = []