逻辑回归模型(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

转载于:https://www.cnblogs.com/sumai/p/5221067.html

逻辑回归模型(Logistic Regression)及Python实现相关推荐

  1. 逻辑回归模型(Logistic Regression, LR)基础

    逻辑回归模型(Logistic Regression, LR)基础 逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数, ...

  2. 逻辑回归模型(Logistic Regression, LR)基础 - 文赛平

     逻辑回归模型(Logistic Regression, LR)基础 - 文赛平 时间 2013-11-25 11:56:00 博客园精华区 原文  http://www.cnblogs.com/ ...

  3. 机器学习--逻辑回归模型(Logistic Regression)

    1.逻辑回归 逻辑回归(Logistic Regression)是一种用于二元分类问题的机器学习算法.逻辑回归的目的是基于输入特征预测一个样本属于某个特定的类别的概率. 逻辑回归的核心思想是将线性回归 ...

  4. 逻辑回归模型(Logistic Regression)

    逻辑回归符合伯努利分布.伯努利分布就是我们常见的0-1分布,即它的随机变量只取0或者1,各自的频率分别取1−p和p,当x=0或者x=1时,我们数学定义为: 所以在常规的逻辑回归模型中,只有两个类别,0 ...

  5. Python机器学习算法 — 逻辑回归(Logistic Regression)

    逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...

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

    转载自:http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书. ...

  7. 牛顿法python代码_python 牛顿法实现逻辑回归(Logistic Regression)

    本文采用的训练方法是牛顿法(Newton Method). 代码 import numpy as np class LogisticRegression(object): ""&q ...

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

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等.主要学习资料来自Standford Andrew N ...

  9. logisticregression参数_通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战...

    前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...

  10. 逻辑回归(Logistic Regression)

    一. 逻辑回归 在前面讲述的回归模型中,处理的因变量都是数值型区间变量,建立的模型描述是因变量的期望与自变量之间的线性关系.比如常见的线性回归模型: 而在采用回归模型分析实际问题中,所研究的变量往往不 ...

最新文章

  1. centos安装nginx小记
  2. commonrpc 1.0 发布,高性能分布式 RPC 框架
  3. python值nonzero函数的解析
  4. Wince程序内存和存储内存
  5. 作为前端,你不得不知道的SEO
  6. matlab实现单纯型法解线性规划_【运筹学教程】求解线性规划问题的单纯形法
  7. java中获取时间6,Java中获取指定日为星期几及其他日期操作(2)
  8. leetcode 131. Palindrome Partitioning | 131. 分割回文串(递归解法)
  9. 【MFC系列-第23天】CMemoryDC的封装过程
  10. LeetCode 题 - 27. 移除元素 python实现
  11. [ACM]HDU Problem 2000 + Java
  12. ECCV 2020 论文大盘点-视频目标分割篇
  13. python初始化函数_当你学会了Python爬虫,网上的图片素材就开始免费了
  14. Python绘制带标记和箭头的树结构
  15. PIFA-平面倒F天线[搬运]
  16. Socket发送缓冲区接收缓冲区快问快答
  17. python 图片识别 文字
  18. 常用八大数据结构总结及应用场景-附示例截图
  19. 如何回答面试官“你为什么从上家公司离职”?
  20. 基于 Python 的地理空间绘图指南

热门文章

  1. python 爬虫论_Python网络爬虫(理论篇)
  2. php5.6 mysql被重置_php5.6连接mysql8出现错误解决方法
  3. python参数检查类型_Python类型检查
  4. easymock教程_EasyMock教程
  5. linux中设置环境变量_如何在Linux中设置环境变量
  6. c ++向量库_C ++中的2D向量–实用指南2D向量
  7. 人工智能时代职教教师能力提升的路径
  8. 为什么很多人选择前端而不选择Java?
  9. 开课吧Java课堂:如何将用户定义的类存储于Collection中
  10. zabbix (二)安装