Logistic回归的牛顿法及DFP、BFGS拟牛顿法求解

牛顿法

 

  1  # coding:utf-8
  2 import matplotlib.pyplot as plt
  3 import numpy as np
  4 
  5 def dataN(length):#生成数据
  6     x = np.ones(shape = (length,3))
  7     y = np.zeros(length)
  8     for i in np.arange(0,length/100,0.02):
  9         x[100*i][0]=1
 10         x[100*i][1]=i
 11         x[100*i][2]=i + 1 + np.random.uniform(0,1.2)
 12         y[100*i]=1
 13         x[100*i+1][0]=1
 14         x[100*i+1][1]=i+0.01
 15         x[100*i+1][2]=i+0.01 + np.random.uniform(0,1.2)
 16         y[100*i+1]=0
 17     return x,y
 18 
 19 def sigmoid(x): #simoid 函数
 20     return 1.0/(1+np.exp(-x))
 21 
 22 def DFP(x,y, iter):#DFP拟牛顿法
 23     n = len(x[0])
 24     theta=np.ones((n,1))
 25     y=np.mat(y).T
 26     Gk=np.eye(n,n)
 27     grad_last = np.dot(x.T,sigmoid(np.dot(x,theta))-y)
 28     cost=[]
 29     for it in range(iter):
 30         pk = -1 * Gk.dot(grad_last)
 31         rate=alphA(x,y,theta,pk)
 32         theta = theta + rate * pk
 33         grad= np.dot(x.T,sigmoid(np.dot(x,theta))-y)
 34         delta_k = rate * pk
 35         y_k = (grad - grad_last)
 36         Pk = delta_k.dot(delta_k.T) / (delta_k.T.dot(y_k))
 37         Qk= Gk.dot(y_k).dot(y_k.T).dot(Gk) / (y_k.T.dot(Gk).dot(y_k)) * (-1)
 38         Gk += Pk + Qk
 39         grad_last = grad
 40         cost.append(np.sum(grad_last))
 41     return theta,cost
 42 
 43 def BFGS(x,y, iter):#BFGS拟牛顿法
 44     n = len(x[0])
 45     theta=np.ones((n,1))
 46     y=np.mat(y).T
 47     Bk=np.eye(n,n)
 48     grad_last = np.dot(x.T,sigmoid(np.dot(x,theta))-y)
 49     cost=[]
 50     for it in range(iter):
 51         pk = -1 * np.linalg.solve(Bk, grad_last)
 52         rate=alphA(x,y,theta,pk)
 53         theta = theta + rate * pk
 54         grad= np.dot(x.T,sigmoid(np.dot(x,theta))-y)
 55         delta_k = rate * pk
 56         y_k = (grad - grad_last)
 57         Pk = y_k.dot(y_k.T) / (y_k.T.dot(delta_k))
 58         Qk= Bk.dot(delta_k).dot(delta_k.T).dot(Bk) / (delta_k.T.dot(Bk).dot(delta_k)) * (-1)
 59         Bk += Pk + Qk
 60         grad_last = grad
 61         cost.append(np.sum(grad_last))
 62     return theta,cost
 63 
 64 def alphA(x,y,theta,pk): #选取前20次迭代cost最小的alpha
 65     c=float("inf")
 66     t=theta
 67     for k in range(1,200):
 68             a=1.0/k**2
 69             theta = t + a * pk
 70             f= np.sum(np.dot(x.T,sigmoid(np.dot(x,theta))-y))
 71             if abs(f)>c:
 72                 break
 73             c=abs(f)
 74             alpha=a
 75     return alpha
 76 
 77 def newtonMethod(x,y, iter):#牛顿法
 78     m = len(x)
 79     n = len(x[0])
 80     theta = np.zeros(n)
 81     cost=[]
 82     for it in range(iter):
 83         gradientSum = np.zeros(n)
 84         hessianMatSum = np.zeros(shape = (n,n))
 85         for i in range(m):
 86             hypothesis = sigmoid(np.dot(x[i], theta))
 87             loss =hypothesis-y[i]
 88             gradient = loss*x[i]
 89             gradientSum = gradientSum+gradient
 90             hessian=[b*x[i]*(1-hypothesis)*hypothesis for b in x[i]]
 91             hessianMatSum = np.add(hessianMatSum,hessian)
 92         hessianMatInv = np.mat(hessianMatSum).I
 93         for k in range(n):
 94             theta[k] -= np.dot(hessianMatInv[k], gradientSum)
 95         cost.append(np.sum(gradientSum))
 96     return theta,cost
 97 
 98 def tesT(theta, x, y):#准确率
 99     length=len(x)
100     count=0
101     for i in xrange(length):
102         predict = sigmoid(x[i, :] * np.reshape(theta,(3,1)))[0] > 0.5
103         if predict == bool(y[i]):
104             count+= 1
105     accuracy = float(count)/length
106     return accuracy
107 
108 def showP(x,y,theta,cost,iter):#作图
109     plt.figure(1)
110     plt.plot(range(iter),cost)
111     plt.figure(2)
112     color=['or','ob']
113     for i in xrange(length):
114         plt.plot(x[i, 1], x[i, 2],color[int(y[i])])
115     plt.plot([0,length/100],[-theta[0],-theta[0]-theta[1]*length/100]/theta[2])
116     plt.show()
117 length=200
118 iter=5
119 x,y=dataN(length)
120 
121 theta,cost=BFGS(x,y,iter)
122 print theta   #[[-18.93768161][-16.52178427][ 16.95779981]]
123 print tesT(theta, np.mat(x), y)  #0.935
124 showP(x,y,theta.getA(),cost,iter)
125 
126 theta,cost=DFP(x,y,iter)
127 print theta   #[[-18.51841028][-16.17880599][ 16.59649161]]
128 print tesT(theta, np.mat(x), y)  #0.935
129 showP(x,y,theta.getA(),cost,iter)
130 
131 theta,cost=newtonMethod(x,y,iter)
132 print theta   #[-14.49650536 -12.78692552  13.05843361]
133 print tesT(theta, np.mat(x), y)  #0.935
134 showP(x,y,theta,cost,iter)

 

转载于:https://www.cnblogs.com/qw12/p/5656765.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

memcached客户端_分布式算法真是吊炸天 – memcached - 第287篇

相关历史文章(阅读本文之前,您可能需要先看下之前的系列 )色谈Java序列化:女孩子慎入 - 第280篇烦不烦,别再问我时间复杂度了:这次不色,女孩子进来吧 - 第281篇双向链表,比西天还远&…

2018年中国人工智能100强研究报告

来源:前瞻产业研究院《崛起的超级智能》一书主要阐述当今天人类为人工智能的春天到来而兴奋,为人工智能是否超越人类而恐慌的时候,一个更为庞大、远超人类预期的智能形态正在崛起,种种迹象表明50年来,互联网正在从网状…

印度首次挑战登月告败,一步之遥≈多大差距?

来源:三体引力波(the-3body)最坏消息还是来了。今天凌晨,印度探测器首次登月尝试,只差一步之遥,距离月表不到2100米,月船2号着陆器与班加罗尔控制中心失去联系,信号中断,…

word交叉引用插入文献后更新域之后编号未更新

这篇文章不教怎么设置交叉引用,这篇文章说的是设好了交叉引用,在某一条文献后面添加了一个文献后,选中全文,右键更新域,编号项仍然没有改变!! 这是因为刚刚在插入文献时是在上一条文献的编号项…

耐能团队论文登上《自然·电子学》:集成忆阻器与CMOS以实现更好的AI

《自然电子学》杂志封面(资料图,来源:《自然》官网)来源:Kneron耐能近日,《自然》杂志子刊《自然电子学》(Nature Electronics)发表论文《集成忆阻器与CMOS以实现更好的AI》&#xf…

word交叉引用多条文献

有时候需要引用多条连续的文献,例如[1][2][3]需要把它变为[1-3],更新域后不受影响仍然正确。 4、选中这两个代码域,右键->切换域代码,再选中这两个代码域,右键->更新域,引用号码变为[13],…

pppcloud云主机内LINUX用户安全管理2

◆超级用户权限与授权 ●建立多个超级用户 不少新系统管理员认为root用户是唯一的超级用户,其实root只是系统默认的超级用户的名称,root并非因为它叫root而成为超级用户的。随便打开一个/etc/passwd文件的例子,你就会发现如下几行&#xff1a…

一份完全解读:是什么使神经网络变成图神经网络?

图1:来自(Bruna等人,ICLR,2014)的图,描绘了3D领域内的MNIST图像。虽然卷积网络很难对球面数据进行分类,但是图网络可以很自然地处理它。可以把它当做是一个处理工具,但在实际应用程序中会出现许多类似的任务…

中国芯片将靠此超车!RISC-V架构神在哪全解构【附下载】

来源: 智东西RISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),简易解释为开源软件运动相对应的一种“开源硬件”。该项目2010年始于加州大学伯克利…

sha256校验工具_使用AIDE工具做入侵检测

AIDE(Advanced Intrusion Detection Environment,高级入侵检测环境)是个入侵检测工具,主要用途是检查文档的完整性。AIDE能够构造一个指定文档的数据库,他使用aide.conf作为其配置文档。AIDE数据库能够保存文档的各种属性,包括:权…

transition过渡的趣玩

本例中将三张图&#xff08;来自网络&#xff09;进行堆叠&#xff0c;鼠标悬停触发。附有源代码 <!DOCTYPE html> <html> <head><title>照片墙</title><meta charset"utf-8"><style type"text/css">.parent{wi…

网上花店系统源码_如何创建一个花店线上商城,可以开发一个微信小程序

说起来花店&#xff0c;相信很多人都去花店买过花&#xff0c;许多花店通常都是个人开的店&#xff0c;一般位置回去选取在人口稠密的地区&#xff0c;以求争取到附近的流量。一般来说&#xff0c;人们会在有人创业或做些开心的事&#xff0c;或者情人节时买鲜花。随着城市的不…

机器的类比

来源&#xff1a;人机与认知实验室如果说机器深度学习有几个重要的边界&#xff1a;数据边界、语义边界、符号边界和因果边界。那么突破这几个边界的口子可能就是——类比&#xff0c;不仅是比例类比&#xff0c;更是跨域机器类比机理的形成可能就是一条前进的光明大道。实质上…

【深度】全球机器人产业趋势及特征分析

来源&#xff1a;工业机器人前沿当前&#xff0c;全球机器人市场规模持续扩大&#xff0c;工业机器人市场增速回落&#xff0c;服务、特种机器人增速稳定。技术创新围绕仿生结构、人工智能和人机协作不断深入&#xff0c;产品在教育陪护、医疗康复、危险环境等领域的应用持续拓…

为什么多个线程不可能同时抢到一把锁_并发基础理论:原子性问题、锁、管程...

我们再回顾一下&#xff0c;原子性问题的根源是CPU切换线程执行指令所导致的&#xff0c;当前一个对共享变量的操作没有完成之前&#xff0c;CPU又切换到另外一个线程来操作对应的共享变量&#xff0c;那么最终产生的结果就可能出现问题。比如如果现在有两个线程都在执行number…

继智能手机之后,增强现实如何再次改变我们与世界的交互方式

来源&#xff1a;资本实验室作为面向未来的新技术&#xff0c;增强现实和虚拟现实在过去几年中的发展可以用不温不火来形容。尽管创业投资和市场规模都在不断扩大&#xff0c;但硬件设备、数据传输速度、沉浸式体验效果、分辨率等因素都制约着该技术的快速发展&#xff0c;而大…

简要说明建设城市大脑三条关键标准规范

作者&#xff1a;刘锋 前言&#xff1a;简要的说&#xff0c;城市大脑不是一个城市级AI信息系统&#xff0c;也不是城市内部的信息化建设&#xff0c;而是互联网结构从网状模型向大脑模型进化时&#xff0c;与城市建设结合的产物&#xff0c;因此建设城市大脑需要拥有三个特征…

git恢复删除前的版本

有时候我们想撤销上一次提交&#xff0c;于是执行git reset --soft HEAD^&#xff0c;这样就成功的删除了你上一次的commit。但有时候发现不小心撤销错了&#xff0c;想把刚刚的撤销给撤回&#xff1a; 方法&#xff1a;首先执行git reflog 这时会显示刚刚各个操作&#xff0…

NLP模型超越人类水平?你可能碰到了大忽悠

大数据文摘出品来源&#xff1a;thegradient编译&#xff1a;张睿毅、武帅、钱天培一个军方训练的神经网络声称可以分类图像中的坦克&#xff0c;但实际上&#xff0c;它只是学会了识别不同的亮度&#xff0c;因为一种类型的坦克仅出现在明亮的图片中&#xff0c;而另一种类型仅…

伸缩杆怎么缩回去图解_没有阳台怎么晾衣服?这10个神器,让家里衣物晾晒更轻松方便...

没有阳台怎么晾衣服&#xff1f;这10个神器&#xff0c;让家里衣物晾晒更轻松方便&#xff01;衣物晾晒是居家生活的必要环节&#xff0c;每个家庭在洗完衣物后都有自己的晾晒方式&#xff0c;但多数家庭会选择在阳台里进行。然而&#xff0c;对于没有阳台的家庭来说&#xff0…