逻辑回归

个人对逻辑回归的理解

我们两清 提交于 2020-02-26 12:58:25
概念: 一种常用于解决分类问题的机器学习方法,通俗地说就是推测一件事情发生的概率有多大。   例如判断某病人身上的肿瘤是良性还是恶性,结合肿瘤大小,厚度,位置等变量来预测,如果Y=0代表良性,Y=1代表恶性,这里的因变量Y只会是0或者1,就是最常见的二分类问题,逻辑回归也可用于多分类问题。   从之前的学习中可以知道在线性回归模型中变量常常是连续的,而逻辑回归问题中的变量一般是离散的,无序的。 公式推导:    我们希望假设函数 h (θ) (x) = Θ T X 的输出值在0到1之间,为了进行分类,需要利用 Sigmoid函数(逻辑函数)。   函数表达式为   图像大概是这样      由图可知,当 z 趋近负无穷时,g(z) 趋近于0;当 z 趋近正无穷时,g(z) 趋近于1。   现在将 z 取代为 h (θ) (x),由 h (θ) (x) = g(Θ T X) 可得公式   此时计算出的值 h (θ) 可以看做Y为0或1的概率,以0.5为界限,如果 h (θ) 大于等于 0.5,我们就可以预测Y为1;如果h (θ) 小于 0.5,Y就为0。 来源: https://www.cnblogs.com/feng-fengfeng/p/12366274.html

随机梯度下降的逻辑回归算法(SGDLR)

浪尽此生 提交于 2020-02-25 20:00:04
由于第一次实验的实验报告不在这台机器,先写这一算法吧。 SGDLR(the Stochastic Gradient Descent for Logistic Regression),要讲解这一算法,首先要把名字拆为几块。 1 随机 2 梯度下降 3逻辑回归 先贴一篇文章: http://blog.csdn.net/zouxy09/article/details/20319673 这篇文章中解释的还不错。 其实这一算法,通俗来讲是这样子的: 1、手中肯定有很多带有label标记的数据,这是训练集。 2、我们期望能够建立一个带参数的式子,来计算某种情况出现的概率,以便于后面预测测试集的类别的时候,计算它在每一类的概率,取概率大的为自己的类。 3、由于sigmoid函数的优势:连续,光滑,严格单调,关于(0,0.5)中心对称,形如下图, 公式① 利用下面这个式子变换得到: 所以我们只需要计算出参数的值,就可以用公式①计算概率。 4、所有在训练集中出现的样本,已经真实存在了,所以它们带入计算出的概率应该是最大的,理想情况为1。根据这一特征来计算参数值。 5、式子并不是一个线性可解的,需要使用极大似然,这一算法不再赘述请自行谷歌。但是后来发现求参数的偏导数的时候,导数为0线性不可解,这时候就要用到梯度下降的算法。 6、所谓梯度下降的算法,事实上是从一个起点,一步步的试探,来回震荡

细品 - 逻辑回归(LR)*

旧巷老猫 提交于 2020-02-25 16:06:03
1. LR的直观表述 1.1 直观表述   今天我们来深入了解一个工业界应用最多,虽然思想简单但也遮挡不住它NB光芒的绽放的一个 分类 预测模型,它就是LR模型。 LR模型可以被认为就是一个被Sigmoid函数(logistic方程)所归一化后的线性回归模型 !为啥这么说呢?我们来看一下它的假设函数的样子:      首先来解释一下 的表示的是啥?它表示的就是将因变量预测成1(阳性)的概率,具体来说它所要表达的是在给定x条件下事件y发生的条件概率,而 是该条件概率的参数。看到这个公式可能一脸懵逼,那我们将它分解一下:      很容易看出将(1)代入到(2)中是不是就得到了LR模型的假设函数啦。(1)式就是我们介绍的 线性回归的假设函数 ,那(2)式就是我们的Sigmoid函数啦。什么?为什么会用Sigmoid函数?因为它引入了非线性映射,将线性回归 值域映射到0-1之间,有助于直观的做出预测类型的判断:大于等于0.5表示阳性,小于0.5表示阴性。 其实,从本质来说:在分类情况下,经过学习后的LR分类器其实就是一组权值 ,当有测试样本输入时,这组权值与测试数据按照加权得到    这里的 就是每个测试样本的n个特征值。之后在按照Sigmoid函数的形式求出 ,从而去判断每个测试样本所属的类别。 由此看见, LR模型学习最关键的问题就是研究如何求解这组权值! 1.2 决策边界  

机器学习:逻辑回归

ε祈祈猫儿з 提交于 2020-02-19 00:40:15
虽然名字里带回归,但实际上是一种分类方法,主要用于两分类问题,即只有两种分类 优点:计算代价不高,易于理解和实现 缺点:容易欠拟合,分类精度可能不高 原理 线性回归函数    \(\small z = f(X) = XW\)   其中      X 是特征值      W 是回归系数    X 和 W 都是向量,可展开为      \(\small z = XW = X_{0}W_{0} + X_{1}W_{1} + ... + X_{n}W_{n}\)   线性方程其实应该是      \(\small z = XW + b\)   为此这里固定      \(\small X_{0}=1\)      \(\small W_{0}=b\)   其他 X 值才是用户输入,这样变成两个向量相乘方便计算 逻辑回归函数 (Sigmoid 函数)    \(\small y=g(z)=\frac{1}{1+e^{-z}}\)   该函数模拟阶跃函数 (在某个跳跃点从 0 瞬间跳到 1,跳跃点两边的值固定为 0 和 1)   可以得出      \(\small y=\left\{\begin{matrix}0.12&z=-2\\0.5&z=0\\0.88&z=2\end{matrix}\right.\)   且满足      \(\small g(z) + g(-z) = 1\)   

逻辑回归分类python实现模板

落爺英雄遲暮 提交于 2020-02-14 11:55:06
算法的思路我就不说了,我就提供一个万能模板,适用于任何纬度数据集。 虽然代码类似于梯度下降,但他是个分类算法 定义sigmoid函数 def sigmoid ( x ) : return 1 / ( 1 + np . exp ( - x ) ) 进行逻辑回归的参数设置以及迭代 def weights ( x , y , alpha , thershold ) : #初始化参数 m , n = x_train . shape theta = np . random . rand ( n ) #参数 cnt = 0 # 迭代次数 max_iter = 50000 #开始迭代 while cnt < max_iter : cnt += 1 diff = np . full ( n , 0 ) for i in range ( m ) : diff = ( y [ i ] - sigmoid ( theta . T @ x [ i ] ) ) * x [ i ] theta = theta + alpha * diff if ( abs ( diff ) < thershold ) . all ( ) : break return theta 预测函数 def predict ( x_test , theta ) : if sigmoid ( theta . T @ x_test ) >

【机器学习】逻辑回归

折月煮酒 提交于 2020-02-14 01:30:46
logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。 sigmoid函数 通过sigmoid函数,可以将任何实数值转换为区间为【0,1】之间值相应的值就符合了概率对应的值域 import numpy as np from matplotlib import pyplot as plt # 定义sigmoid函数 def sigmoid ( t ) : return 1 / ( 1 + np . exp ( - t ) ) x = np . linspace ( - 10 , 10 , 1000 ) y = sigmoid ( x ) plt . plot ( x , y ) plt . show ( ) 逻辑回归损失函数:表征模型预测值与真实值的不一致程度。 损失函数为什么选择用交叉验证。原因是平方损失在训练的时候会出现一定的问题。当预测值与真实值之间的差距过大时,这时候参数的调整就需要变大,但是如果使用平方损失,训练的时候可能看到的情况是预测值和真实值之间的差距越大,参数调整的越小,训练的越慢。 from sklearn import datasets iris = datasets . load_iris ( ) x = iris .

<转>Logistic回归总结

不打扰是莪最后的温柔 提交于 2020-02-13 20:47:37
转自 http://blog.csdn.net/dongtingzhizi/article/details/15962797 当我第一遍看完台大的机器学习的视频的时候,我以为我理解了逻辑回归,可后来越看越迷糊,直到看到了这篇文章,豁然开朗 基本原理 Logistic Regression和Linear Regression的原理是相似的,按照我自己的理解,可以简单的描述为这样的过程: (1)找一个合适的预测函数(Andrew Ng的公开课中称为hypothesis),一般表示为 h 函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程时非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。 (2)构造一个Cost函数(损失函数),该函数表示预测的输出( h )与训练数据类别( y )之间的偏差,可以是二者之间的差( h-y )或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为 J(θ) 函数,表示所有训练数据预测值与实际类别的偏差。 (3)显然, J(θ) 函数的值越小表示预测函数越准确(即 h 函数越准确),所以这一步需要做的是找到 J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有的是梯度下降法(Gradient

机器学习之支持向量机

删除回忆录丶 提交于 2020-02-08 20:31:39
SVM与神经网络 支持向量机并不是神经网络,这两个完全是两条不一样的路吧。不过详细来说,线性SVM的计算部分就像一个单层的神经网络一样,而非线性SVM就完全和神经网络不一样了(是的没错,现实生活中大多问题是非线性的),详情可以参考知乎答案。 这两个冤家一直不争上下,最近基于神经网络的深度学习因为AlphaGo等热门时事,促使神经网络的热度达到了空前最高。毕竟,深度学习那样的多层隐含层的结构,犹如一个黑盒子,一个学习能力极强的潘多拉盒子。有人或许就觉得这就是我们真正的神经网络,我们不知道它那数以百千计的神经元干了什么,也不理解为何如此的结构能诞生如此美好的数据 —— 犹如复杂性科学般,处于高层的我们并不能知道底层的”愚群“为何能涌现。两者一比起来,SVM似乎也没有深度学习等那么令人狂热,连Hinton都开玩笑说SVM不过是浅度学习(来自深度学习的调侃)。 不然,个人觉得相对于热衷于隐含层的神经网络,具有深厚的数学理论的SVM更值得让我们研究。SVM背后伟大的数学理论基础可以说是现今人类的伟大数学成就,因此SVM的解释性也非神经网络可比,可以说,它的数学理论让它充满了理性,这样的理性是一个理工科生向往的。就如,你渴望知道食物的来源以确定食物是否有毒,如果有毒是什么毒,这样的毒会在人体内发生了什么反应以致于让你不适 —— 我的理性驱使我这么想,一个来路不明的食物是不能让我轻易接受的。

逻辑回归 - 欺诈检测

梦想与她 提交于 2020-02-03 11:40:02
import pandas as pd import matplotlib.pyplot as plt import numpy as np creditcard = 'C:/Users/Amber/Documents/唐宇迪-机器学习课程资料/机器学习算法配套案例实战/逻辑回归-信用卡欺诈检测/逻辑回归-信用卡欺诈检测/creditcard.csv' data = pd.read_csv(creditcard) print(data.head()) Time V1 V2 V3 ... V27 V28 Amount Class 0 0.0 -1.359807 -0.072781 2.536347 ... 0.133558 -0.021053 149.62 0 1 0.0 1.191857 0.266151 0.166480 ... -0.008983 0.014724 2.69 0 2 1.0 -1.358354 -1.340163 1.773209 ... -0.055353 -0.059752 378.66 0 3 1.0 -0.966272 -0.185226 1.792993 ... 0.062723 0.061458 123.50 0 4 2.0 -1.158233 0.877737 1.548718 ... 0.219422 0.215153 69.99 0 [5

梯度下降求解逻辑回归

你。 提交于 2020-02-02 08:47:06
1 Logistic Regression ¶ 1.1 The data 我们将建立一个逻辑回归模型来预测一个学生是否被大学录取。假设你是一个大学系的管理员,你想根据两次考试的结果来决定每个申请人的录取机会。你有以前的申请人的历史数据,你可以用它作为逻辑回归的训练集。对于每一个培训例子,你有两个考试的申请人的分数和录取决定。为了做到这一点,我们将建立一个分类模型,根据考试成绩估计入学概率。 拿到数据,首先看一下数据的样子 import numpy as np import pandas as pd import matplotlib.pyplot as plt import os path = "C:/Users/Amber/Documents/唐宇迪-机器学习课程资料/机器学习算法配套案例实战/梯度下降/data/LogiReg_data.txt" pdData = pd.read_csv(path, header=None, names=['Exam 1', 'Exam 2', 'Admitted']) print(pdData.head()) Exam 1 Exam 2 Admitted 0 34.623660 78.024693 0 1 30.286711 43.894998 0 2 35.847409 72.902198 0 3 60.182599 86.308552 1