终于来到logistic回归,logistic回归其实很简单,之前的说到的神经网络就用到了这个方法,其中最重要的就是使用了sigmoid损失函数。当然使用的方法也就最简单的梯度下降法,这里并没有使用之前神经网络的随机梯度下降法,也是为了简单起见。因为之前在神经网络里面使用过了,所以这篇文章就略微介绍下。
logistic回归是属于广义线性回归的一种,基本形式:
z=w0+w1*x1+w2*x2+...+wn*xn
s=1/(1+exp(-z))
损失函数:1/2* (s-y)^2
然后按照梯度下降方法求解参数即可
代码如下:
# -*- coding: UTF8 -*- """ author:luchi date:16/2/19 desc: logistic回归,最常用的回归问题,虽然是回归但是更多的是用到了分类的问题上 其主要的函数是sigmoid,以及使用的训练参数方法也是最常使用的梯度下降法 """ import math import numpy as np def loadDataset(): retDataset=[] retLabels=[] fr=open("testSet.txt") for str in fr.readlines(): strList=str.strip().split() retDataset.append([1.0,float(strList[0]),float(strList[1])]) retLabels.append(int(strList[2])) return retDataset,retLabels """ 计算sigmoid函数 """ def sigmoid(inX): return 1.0/(1+np.exp(-inX)) """ 梯度下降方法训练参数 """ def GradientDecrease(epoch,dataset,labels,alpha): weight=np.ones((len(dataset[0]),1)) #初始化权重 weightMat=np.mat(weight) datasetMat=np.mat(dataset) labelsMat=np.mat(labels).transpose() size=len(dataset) for i in range(epoch): result=datasetMat*weightMat result=sigmoid(result) error=result-labelsMat # print result # print 1-result grad=np.multiply(result,1-result) # print grad # print alpha*multiply(multiply(error,grad),datasetMat) nweightMat=np.multiply(np.multiply(error,grad),datasetMat) # print np.sum(nweightMat,axis=0)/float(size) weightMat=weightMat-alpha*(np.sum(nweightMat,axis=0)/float(size)).transpose() # print weightMat # print weightMat return weightMat def plotBestFit(weights): import matplotlib.pyplot as plt dataMat,labelMat=loadDataset() dataArr = np.array(dataMat) n = np.shape(dataArr)[0] xcord1 = []; ycord1 = [] xcord2 = []; ycord2 = [] for i in range(n): if int(labelMat[i])== 1: xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2]) else: xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2]) fig = plt.figure() ax = fig.add_subplot(111) ax.scatter(xcord1, ycord1, s=30, c='red', marker='s') ax.scatter(xcord2, ycord2, s=30, c='green') x = np.arange(-3.0, 3.0, 0.1) y = (-weights[0]-weights[1]*x)/weights[2] print len(y) ax.plot(x, y) plt.xlabel('X1'); plt.ylabel('X2'); plt.show() dataset,labels=loadDataset() # dataset=np.array([[1,1,2],[1,2,3]]) # labels=np.array([0,1]) weights=GradientDecrease(500,dataset,labels,alpha=0.25) print weights 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()等等,这点需要注意的
相关推荐
NULL 博文链接:https://luchi007.iteye.com/blog/2277288
matlab匹配滤波代码MLA2_Tracking 这是用于记录,跟踪和分析MLA2实验动物位置的代码。 要在新实验中使用此代码,请从Github存储库中派生或下载并从那里开始使用新数据。 工作流程大纲 盆景: Video_Acquisition....
MLA Handbook 8thEd (MLA Handbook 第8版,PDF) PDF格式适配KINDLE的版本~
乳胶-mla-模板 用于生成 mla 格式论文的基本模板。 先决条件 make 一些最新的 LaTeX 发行版(TeXLive、MacTeX、MiKTeX 等) 安装和使用 $ git clone https://github.com/trotod/latex-mla-template <project> $ cd...
pa.mla.unit.addon:mla unit addon mod
MLA JIL 文本数据 该存储库包含从 MLA 工作信息列表中挖掘的文本数据语料库。 这是一个正在进行的项目,旨在提供 (1) 供其他学者分析的纯文本数据资源,以及 (2) 分析用于修辞和写作研究的 MLA JIL 数据。 该项目的...
MLA格式说明,包含了MLA的详细格式介绍,内容非常细致。
MLA Format MLA格式.pdf
MLA格式参考文献示例.doc
创意电子关于MLA系列贴片电容选型手册pdf,创意电子关于MLA系列贴片电容选型手册
美硕 MLA 双稳态继电器 产品说明书zip,美硕 MLA 双稳态继电器 产品说明书
MLA_Citation_Series_E-book_Merge
正在进行的KKP用户群集MLA(监视日志和警报)实施。 要求 至少2个集群: 对于“种子群集”:4个CPU,16 Gi的RAM(例如T3A.xlarge ) 对于“用户群集”:1个CPU,2个Gi或RAM(例如T3A.small ) (可选地,用户群集...
mla数据重建用于解析,重建和转换MLA测量数据的库该代码库旨在承载与MLA数据重构有关的python脚本。要求脾气暴躁的Matplotlib h5py()
maher_mla hamid sirya
Simple MLA的主要功能之一是将引文设置为12pt字体大小和Time Romans字体样式。第二个关键功能是它与浏览器几乎是分开的。最后一个关键功能是没有广告!!!关于如何使用简单MLA的方法是将信息放在正确的字段中。其中...
APEX_Mla.exe
机器学习算法-简单而幼稚的实现 作为一个数学背景不强的软件工程师,我在理解ML算法方面遇到了很大的困难。 我可能只花了几分钟就知道算法是什么样的,但确实需要一些时间来了解更多细节。 作为一种学习方式,我决定...
DH2014 2014 年数字人文会议上长篇论文演示幻灯片“Z 轴奖学金:建模现代主义者如何书写城市”。