终于来到logistic回归,logistic回归其实很简单,之前的说到的神经网络就用到了这个方法,其中最重要的就是使用了sigmoid损失函数。当然使用的方法也就最简单的梯度下降法,这里并没有使用之前神经网络的随机梯度下降法,也是为了简单起见。因为之前在神经网络里面使用过了,所以这篇文章就略微介绍下。

logistic回归是属于广义线性回归的一种,基本形式:

z=w0+w1*x1+w2*x2+...+wn*xn

s=1/(1+exp(-z))

损失函数:1/2* (s-y)^2

然后按照梯度下降方法求解参数即可

代码如下:

Python代码  
  1. # -*- coding: UTF8 -*-
  2. """
  3. author:luchi
  4. date:16/2/19
  5. desc:
  6. logistic回归,最常用的回归问题,虽然是回归但是更多的是用到了分类的问题上
  7. 其主要的函数是sigmoid,以及使用的训练参数方法也是最常使用的梯度下降法
  8. """
  9. import math
  10. import numpy as np
  11. def loadDataset():
  12. retDataset=[]
  13. retLabels=[]
  14. fr=open("testSet.txt")
  15. for str in fr.readlines():
  16. strList=str.strip().split()
  17. retDataset.append([1.0,float(strList[0]),float(strList[1])])
  18. retLabels.append(int(strList[2]))
  19. return retDataset,retLabels
  20. """
  21. 计算sigmoid函数
  22. """
  23. def sigmoid(inX):
  24. return 1.0/(1+np.exp(-inX))
  25. """
  26. 梯度下降方法训练参数
  27. """
  28. def GradientDecrease(epoch,dataset,labels,alpha):
  29. weight=np.ones((len(dataset[0]),1)) #初始化权重
  30. weightMat=np.mat(weight)
  31. datasetMat=np.mat(dataset)
  32. labelsMat=np.mat(labels).transpose()
  33. size=len(dataset)
  34. for i in range(epoch):
  35. result=datasetMat*weightMat
  36. result=sigmoid(result)
  37. error=result-labelsMat
  38. # print result
  39. # print 1-result
  40. grad=np.multiply(result,1-result)
  41. # print grad
  42. # print alpha*multiply(multiply(error,grad),datasetMat)
  43. nweightMat=np.multiply(np.multiply(error,grad),datasetMat)
  44. # print np.sum(nweightMat,axis=0)/float(size)
  45. weightMat=weightMat-alpha*(np.sum(nweightMat,axis=0)/float(size)).transpose()
  46. # print weightMat
  47. # print weightMat
  48. return weightMat
  49. def plotBestFit(weights):
  50. import matplotlib.pyplot as plt
  51. dataMat,labelMat=loadDataset()
  52. dataArr = np.array(dataMat)
  53. n = np.shape(dataArr)[0]
  54. xcord1 = []; ycord1 = []
  55. xcord2 = []; ycord2 = []
  56. for i in range(n):
  57. if int(labelMat[i])== 1:
  58. xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2])
  59. else:
  60. xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2])
  61. fig = plt.figure()
  62. ax = fig.add_subplot(111)
  63. ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
  64. ax.scatter(xcord2, ycord2, s=30, c='green')
  65. x = np.arange(-3.0, 3.0, 0.1)
  66. y = (-weights[0]-weights[1]*x)/weights[2]
  67. print len(y)
  68. ax.plot(x, y)
  69. plt.xlabel('X1'); plt.ylabel('X2');
  70. plt.show()
  71. dataset,labels=loadDataset()
  72. # dataset=np.array([[1,1,2],[1,2,3]])
  73. # labels=np.array([0,1])
  74. weights=GradientDecrease(500,dataset,labels,alpha=0.25)
  75. print weights
  76. plotBestFit(np.array(weights))

结果如下:

从图中可以看出效果还不错。

logistic回归是一种比较简单的方法,与其说是回归,其实更多的可以将其列为二元分类问题,因为sigmoid函数的特点,而且据说logistic回归在现实工作中还运用的比较多,可见并不是都是要高大上的东西才有运用空间,只要实用,也是不错的

最后说一说在Python里面有自带的sum函数,例如计算a=[1,2,3] sum(a)即为6,但是程序中使用到的是numpy里面的sum函数,numpy里面的sum函数还可以设置第二个参数,sum(a,axis),其中a就是array数组或者矩阵,axis=0表示按列求和,axis=1表示按行求和,这点需要注意。另外如果涉及到array或者矩阵的math运算,需要使用numpy里面的相对应的math函数,因此程序中是import numpy as np,然后使用np.log()等等,这点需要注意的

MLA Review之四:logistic回归相关推荐

  1. MLA Review之五:回归

    回到回归的正题,回归问题是机器学习领域中应用的比较广的一种方法,不过我觉得大部分的回归模型都是广义线性模型,在Andrew NG的课程中,对广义线性模型做了比较详细的推导,这篇文章的内容是,线性回归. ...

  2. 二值logit模型的适用条件_一文读懂条件Logistic回归

    在医学研究中,为了控制一些重要的混杂因素,经常会把病例和对照按年龄,性别等条件进行配对,形成多个匹配组.各匹配组的病例数和对照人数是任意的,比如一个病例和若干个对照匹配即1:1,在医学上称作" ...

  3. logistic回归 如何_第七章:利用Python实现Logistic回归分类模型

    免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...

  4. 第七课.Logistic回归算法

    Logistic 回归,又名逻辑回归,它从线性回归发展而来,是一种广义的线性回归模型:该模型预测输出的是样本类别的条件概率分布,因而可以取概率值最大的类别作为分类结果,实质上是一个分类模型. 目录 算 ...

  5. R语言广义线性模型函数GLM、R中有几种logistic回归扩展和变异、robust包中的glmRob函数鲁棒logistic回归、ms包中的lrm函数拟合序数逻辑回归

    R语言广义线性模型函数GLM.glm函数构建逻辑回归模型(Logistic regression).R中有几种logistic回归扩展和变异.robust包中的glmRob函数鲁棒logistic回归 ...

  6. R语言构建logistic回归模型:构建模型公式、拟合logistic回归模型、模型评估,通过混淆矩阵计算precision、enrichment、recall指标

    R语言构建logistic回归模型:构建模型公式.拟合logistic回归模型.模型评估,通过混淆矩阵计算precision.enrichment.recall指标 目录

  7. R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析、每个预测因子对响应变量的贡献

    R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析.每个预测因子对响应变量的贡献 目录

  8. R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图、混淆矩阵、准确率、精确度、召回率、ROC、AUC)、PRTPlot函数获取logistic模型最优阈值(改变阈值以优化)

    R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图.混淆矩阵.Accuray.Precision.Recall.ROC.AUC).PRTPlot函数可视化获取logistic ...

  9. R语言广义加性模型(generalized additive models,GAMs):使用广义线性加性模型GAMs构建logistic回归

    R语言广义加性模型(generalized additive models,GAMs):使用广义线性加性模型GAMs构建logistic回归 目录

最新文章

  1. return true Java_[Java教程]js中return,return true,return false的用法及区别
  2. (转)测测你是否有搜索引擎依赖症
  3. 重写系统中的UINavigationController返回按钮的事件
  4. mysql的ps.setmaxrows_mysql自定义函数实现表的指定列进行数据脱敏(PS:来自mysql小白的提问)...
  5. APPLE苹果电子设备模型样机|展示你的专业设计最佳选择
  6. 科学家之殁,竟是区块链之过?
  7. php处理管道文件流
  8. 每天一道剑指offer-二叉搜索数的后序遍历序列
  9. 装箱拆箱的意义 java_Java中的装箱和拆箱深入理解
  10. 写一个含数字,拼音,汉字的验证码生成类
  11. 如何向github上传代码
  12. 实现自己选取歌曲制作手机铃声
  13. 金蝶K3案例教程存货核算后台配置
  14. Sublime Text 2 设置文件详解转
  15. linux命令之 whatis
  16. 苹果系统java小游戏_Mac自带小游戏怎么玩?
  17. 2019年最新中科院人工智能领域JCR期刊分区(附2019-2020人工智能领域顶级会议分类表)
  18. 项目管理之中高级管理(成本管理)
  19. 疫情面试:社招斩获阿里P7offer,只因六刷这些面试题
  20. 图结构练习——最短路径 (Dijkstra算法版)

热门文章

  1. Xcode与C++之游戏开发: 2D图形
  2. 电脑全屏闪回桌面问题
  3. 一个简单的CS系统打包过程图文版
  4. 211计算机考研院校排名6,计算机考研学校排名:比较稳的211有哪些?
  5. 钛媒体乌镇咖荟 | 平衡前沿科技与伦理的同时,我们也要给新生事物更多的生存空间...
  6. wordcloud红楼梦词云图出现单字怎么办?
  7. 微信定位the permission value is offline verifying
  8. 电脑端b站调节视频速度
  9. 教你如何制作APP 赚钱
  10. Ubuntu最新版本(Ubuntu22.04LTS)安装Tftp服务及其使用教程