逻辑回归模型(Logistic Regression)及Python实现

逻辑回归模型(Logistic Regression)及Python实现

http://www.cnblogs.com/sumai

1.模型

  在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳性,目标变量是离散的,只有两种取值,通常会编码为0和1。假设我们有一个特征X,画出散点图,结果如下所示。这时候如果我们用线性回归去拟合一条直线:hθ(X) = θ01X,若Y≥0.5则判断为1,否则为0。这样我们也可以构建出一个模型去进行分类,但是会存在很多的缺点,比如稳健性差、准确率低。而逻辑回归对于这样的问题会更加合适。

  逻辑回归假设函数如下,它对θTX作了一个函数g变换,映射至0到1的范围之内,而函数g称为sigmoid function或者logistic function,函数图像如下图所示。当我们输入特征,得到的hθ(x)其实是这个样本属于1这个分类的概率值。也就是说,逻辑回归是用来得到样本属于某个分类的概率。

2.评价

回想起之前线性回归中所用到的损失函数:

 如果在逻辑回归中也运用这种损失函数,得到的函数J是一个非凸函数,存在多个局部最小值,很难进行求解,因此需要换一个cost函数。重新定义个cost函数如下:

当实际样本属于1类别时,如果预测概率也为1,那么损失为0,预测正确。相反,如果预测为0,那么损失将是无穷大。这样构造的损失函数是合理的,并且它还是一个凸函数,十分方便求得参数θ,使得损失函数J达到最小。

3.优化

我们已经定义好了损失函数J(θ),接下来的任务就是求出参数θ。我们的目标很明确,就是找到一组θ,使得我们的损失函数J(θ)最小。最常用的求解方法有两种:批量梯度下降法(batch gradient descent), 牛顿迭代方法((Newton‘s method)。两种方法都是通过迭代求得的数值解,但是牛顿迭代方法的收敛速度更加快。

批量梯度下降法: 

牛顿迭代方法:  (H为海瑟矩阵)

4.python代码实现

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Wed Feb 24 11:04:11 2016
 4
 5 @author: SumaiWong
 6 """
 7
 8 import numpy as np
 9 import pandas as pd
10 from numpy import dot
11 from numpy.linalg import inv
12
13 iris = pd.read_csv(‘D:\iris.csv‘)
14 dummy = pd.get_dummies(iris[‘Species‘]) # 对Species生成哑变量
15 iris = pd.concat([iris, dummy], axis =1 )
16 iris = iris.iloc[0:100, :] # 截取前一百行样本
17
18 # 构建Logistic Regression , 对Species是否为setosa进行分类 setosa ~ Sepal.Length
19 # Y = g(BX) = 1/(1+exp(-BX))
20 def logit(x):
21     return 1./(1+np.exp(-x))
22
23 temp = pd.DataFrame(iris.iloc[:, 0])
24 temp[‘x0‘] = 1.
25 X = temp.iloc[:,[1,0]]
26 Y = iris[‘setosa‘].reshape(len(iris), 1) #整理出X矩阵 和 Y矩阵
27
28 # 批量梯度下降法
29 m,n = X.shape #矩阵大小
30 alpha = 0.0065 #设定学习速率
31 theta_g = np.zeros((n,1)) #初始化参数
32 maxCycles = 3000 #迭代次数
33 J = pd.Series(np.arange(maxCycles, dtype = float)) #损失函数
34
35 for i in range(maxCycles):
36     h = logit(dot(X, theta_g)) #估计值
37     J[i] = -(1/100.)*np.sum(Y*np.log(h)+(1-Y)*np.log(1-h)) #计算损失函数值
38     error = h - Y #误差
39     grad = dot(X.T, error) #梯度
40     theta_g -= alpha * grad
41 print theta_g
42 print J.plot()
43
44 # 牛顿方法
45 theta_n = np.zeros((n,1)) #初始化参数
46 maxCycles = 10 #迭代次数
47 C = pd.Series(np.arange(maxCycles, dtype = float)) #损失函数
48 for i in range(maxCycles):
49     h = logit(dot(X, theta_n)) #估计值
50     C[i] = -(1/100.)*np.sum(Y*np.log(h)+(1-Y)*np.log(1-h)) #计算损失函数值
51     error = h - Y #误差
52     grad = dot(X.T, error) #梯度
53     A =  h*(1-h)* np.eye(len(X))
54     H = np.mat(X.T)* A * np.mat(X) #海瑟矩阵, H = X`AX
55     theta_n -= inv(H)*grad
56 print theta_n
57 print C.plot()   

代码所用的数据下载地址:http://files.cnblogs.com/files/sumai/iris.rar

时间: 2024-08-08 05:20:20

逻辑回归模型(Logistic Regression)及Python实现的相关文章

机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 这节学习的是逻辑回归(Logistic Regression),也算进入了比较正统的机器学习算法.啥叫正统呢?我概念里面机器学习算法一般是这样一个步骤: 1)对于一个问题,我们用数学语言来描述它,然后建立一个模型,例如回归模型或者分类模型等

[机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)

引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自Standford Andrew Ng老师在Coursera的教程以及UFLDL Tutorial,Stanford CS231n等在线课程和Tutorial,同时也参考了大量网上的相关资料(在后面列出). 前言 本文主要介绍逻辑回归的基础知识,文章小节安排如下: 1)逻辑回归定义 2)假设函数(Hypothesis function

分类算法之逻辑回归(Logistic Regression

分类算法之逻辑回归(Logistic Regression) 1.二分类问题 现在有一家医院,想要对病人的病情进行分析,其中有一项就是关于良性\恶性肿瘤的判断,现在有一批数据集是关于肿瘤大小的,任务就是根据肿瘤的大小来判定是良性还是恶性.这就是一个很典型的二分类问题,即输出的结果只有两个值----良性和恶性(通常用数字0和1表示).如图1所示,我们可以做一个直观的判定肿瘤大小大于5,即为恶心肿瘤(输出为1):小于等于5,即为良性肿瘤(输出为0). 2.分类问题的本质 分类问题本质上属于有监督学习

【机器学习】逻辑回归(Logistic Regression)

注:最近开始学习<人工智能>选修课,老师提纲挈领的介绍了一番,听完课只了解了个大概,剩下的细节只能自己继续摸索. 从本质上讲:机器学习就是一个模型对外界的刺激(训练样本)做出反应,趋利避害(评价标准). 1. 什么是逻辑回归? 许多人对线性回归都比较熟悉,但知道逻辑回归的人可能就要少的多.从大的类别上来说,逻辑回归是一种有监督的统计学习方法,主要用于对样本进行分类. 在线性回归模型中,输出一般是连续的,例如$$y = f(x) = ax + b$$,对于每一个输入的x,都有一个对应的y输出.模

逻辑回归分类器(Logistic Regression Classifier)

Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性,也用来进行分类. 在分类的情形下,经过学习之后的LR分类器其实就是一组权值w0,w1,...,wm. 当输入测试样本集中的测试数据时,这一组权值按照与测试数据线性加和的方式,求出一个z值: z = w0+w1*x1+w2*x2+...+wm*xm. ① (其中x1,x2,...,xm是某样本数据的各个特征,维度为m) 之后按照sigmoid函数的形式求出: σ(z) = 1 / (1+

机器学习之逻辑回归(Logistic Regression)

1. Classification 这篇文章我们来讨论分类问题(classification problems),也就是说你想预测的变量 y 是一个离散的值.我们会使用逻辑回归算法来解决分类问题. 之前的文章中,我们讨论的垃圾邮件分类实际上就是一个分类问题.类似的例子还有很多,例如一个在线交易网站判断一次交易是否带有欺诈性(有些人可以使用偷来的信用卡,你懂的).再如,之前判断一个肿瘤是良性的还是恶性的,也是一个分类问题. 在以上的这些例子中,我们想预测的是一个二值的变量,或者为0,或者为1:或者

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

在说逻辑回归前,还是得提一提他的兄弟,线性回归.在某些地方,逻辑回归算法和线性回归算法是类似的.但它和线性回归最大的不同在于,逻辑回归是作用是分类的. 还记得之前说的吗,线性回归其实就是求出一条拟合空间中所有点的线.逻辑回归的本质其实也和线性回归一样,但它加了一个步骤,逻辑回归使用sigmoid函数转换线性回归的输出以返回概率值,然后可以将概率值映射到两个或更多个离散类. 如果给出学生的成绩,比较线性回归和逻辑回归的不同如下: 线性回归可以帮助我们以0-100的等级预测学生的测试分数.线性回归预

逻辑回归(Logistic Regression, LR)

1.什么是逻辑回归: 2.逻辑回归的流程及推导: 3.逻辑回归的多分类 4.逻辑回归VS线性回归 5.逻辑回归 VS SVM 1.什么使逻辑回归: 名为回归,实际是分类,通过计算$P(y=0|x;\theta )$的大小来预测分类类别,预测的是类别0,1,而不是概率,但计算的是概率:$0\leq P(y=0|x;\theta )\leq 1$,是个概率值,本身并没有非0即1的概念: 二项逻辑回归:x是输入,y是输出: $P(y=0|x)=\frac{1}{1+e^{-z}}$ $P(y=0|x)

逻辑回归(Logistic Regression)

import numpy as np import random def genData(numPoints,bias,variance):#实例 偏好 方差 x = np.zeros(shape=(numPoints,2))#行列 y = np.zeros(shape=(numPoints))#行 for i in range(0,numPoints):#0->numPoints-1 x[i][0]=1 x[i][1]=i y[i]=(i+bias)+random.uniform(0,1)+v

机器学习之——判定边界和逻辑回归模型的代价函数

判定边界(Decision Boundary) 上一次我们讨论了一个新的模型--逻辑回归模型(Logistic Regression),在逻辑回归中,我们预测: 当h?大于等于0.5时,预测y=1 当h?小于0.5时,预测y=0 根据上面的预测,我们绘制出一条S形函数,如下: 根据函数图像,我们知道,当 z=0时,g(z)=0.5 z>0时,g(z)>0.5 z<0时,g(z)<0.5 又有: 所以 以上,为我们预知的逻辑回归的部分内容.好,现在假设我们有一个模型: 并且参数?是向