没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
我们主要讲解一下利用Python实现感知机算法。 算法一 首选,我们利用Python,按照上一节介绍的感知机算法基本思想,实现感知算法的原始形式和对偶形式。 #利用Python实现感知机算法的原始形式 # -*- encoding:utf-8 -*- Created on 2017.6.7 @author: Ada import numpy as np import matplotlib.pyplot as plt #1、创建数据集 def createdata(): samples=np.array([[3,-3],[4,-3],[1,1],[1,2]]) labels
资源推荐
资源详情
资源评论
Python实现感知机(实现感知机(PLA)算法)算法
我们主要讲解一下利用Python实现感知机算法。
算法一算法一
首选,我们利用Python,按照上一节介绍的感知机算法基本思想,实现感知算法的原始形式和对偶形式。
#利用Python实现感知机算法的原始形式
# -*- encoding:utf-8 -*-
"""
Created on 2017.6.7
@author: Ada
"""
import numpy as np
import matplotlib.pyplot as plt
#1、创建数据集
def createdata():
samples=np.array([[3,-3],[4,-3],[1,1],[1,2]])
labels=[-1,-1,1,1] return samples,labels
#训练感知机模型
class Perceptron:
def __init__(self,x,y,a=1):
self.x=x
self.y=y
self.w=np.zeros((x.shape[1],1))#初始化权重,w1,w2均为0
self.b=0
self.a=1#学习率
self.numsamples=self.x.shape[0] self.numfeatures=self.x.shape[1]
def sign(self,w,b,x):
y=np.dot(x,w)+b
return int(y)
def update(self,label_i,data_i):
tmp=label_i*self.a*data_i
tmp=tmp.reshape(self.w.shape)
#更新w和b
self.w=tmp+self.w
self.b=self.b+label_i*self.a
def train(self):
isFind=False
while not isFind:
count=0
for i in range(self.numsamples):
tmpY=self.sign(self.w,self.b,self.x[i,:])
if tmpY*self.y[i]<=0:#如果是一个误分类实例点
print '误分类点为:',self.x[i,:],'此时的w和b为:',self.w,self.b
count+=1
self.update(self.y[i],self.x[i,:])
if count==0:
print '最终训练得到的w和b为:',self.w,self.b
isFind=True
return self.w,self.b
#画图描绘
class Picture:
def __init__(self,data,w,b):
self.b=b
self.w=w
plt.figure(1)
plt.title('Perceptron Learning Algorithm',size=14)
plt.xlabel('x0-axis',size=14)
plt.ylabel('x1-axis',size=14)
xData=np.linspace(0,5,100)
yData=self.expression(xData)
plt.plot(xData,yData,color='r',label='sample data')
plt.scatter(data[0][0],data[0][1],s=50)
plt.scatter(data[1][0],data[1][1],s=50)
plt.scatter(data[2][0],data[2][1],s=50,marker='x')
plt.scatter(data[3][0],data[3][1],s=50,marker='x')
plt.savefig('2d.png',dpi=75)
def expression(self,x):
y=(-self.b-self.w[0]*x)/self.w[1]#注意在此,把x0,x1当做两个坐标轴,把x1当做自变量,x2为因变量
return y
def Show(self):
plt.show()
if __name__ == '__main__':
samples,labels=createdata()
myperceptron=Perceptron(x=samples,y=labels)
weights,bias=myperceptron.train()
Picture=Picture(samples,weights,bias)
Picture.Show()
实验结果:
误分类点为: [ 3 -3] 此时的w和b为: [[ 0.] [ 0.]] 0
误分类点为: [1 1] 此时的w和b为: [[-3.] [ 3.]] -1
最终训练得到的w和b为: [[-2.] [ 4.]] 0
#利用Python实现感知机算法的对偶形式
# -*- encoding:utf-8 -*-
"""
Created on 2017.6.7
@author: Ada
"""
import numpy as np
import matplotlib.pyplot as plt
#1、创建数据集
def createdata():
samples=np.array([[3,-3],[4,-3],[1,1],[1,2]])
labels=np.array([-1,-1,1,1])
return samples,labels
#训练感知机模型
class Perceptron:
def __init__(self,x,y,a=1):
self.x=x
self.y=y
self.w=np.zeros((1,x.shape[0]))
self.b=0
self.a=1#学习率
self.numsamples=self.x.shape[0] self.numfeatures=self.x.shape[1] self.gMatrix=self.cal_gram(self.x)
def cal_gram(self,x):
gMatrix=np.zeros((self.numsamples,self.numsamples))
for i in xrange(self.numsamples):
for j in xrange(self.numsamples):
gMatrix[i][j]=np.dot(self.x[i,:],self.x[j,:])
return gMatrix
def sign(self,w,b,key):
y=np.dot(w*self.y,self.gMatrix[:,key])+b
return int(y)
def update(self,i):
self.w[i,]=self.w[i,]+self.a
self.b=self.b+self.y[i]*self.a
def cal_w(self):
w=np.dot(self.w*self.y,self.x)
return w
def train(self):
isFind=False
while not isFind:
count=0
for i in range(self.numsamples):
tmpY=self.sign(self.w,self.b,i)
if tmpY*self.y[i]<=0:#如果是一个误分类实例点
print '误分类点为:',self.x[i,:],'此时的w和b为:',self.cal_w(),',',self.b
count+=1
self.update(i)
if count==0:
print '最终训练得到的w和b为:',self.cal_w(),',',self.b
isFind=True
weights=self.cal_w()
return weights,self.b
#画图描绘
class Picture:
def __init__(self,data,w,b):
self.b=b
self.w=w
plt.figure(1)
plt.title('Perceptron Learning Algorithm',size=14)
plt.xlabel('x0-axis',size=14)
剩余6页未读,继续阅读
资源评论
weixin_38651786
- 粉丝: 7
- 资源: 915
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 源代码-顶踩插件代码 多功能通用版 v2.0.zip
- 源代码-电影站专业ASP留言本 v1.0.zip
- com.bishua666.luxxx1.apk
- Conan2示例工程以及mingw64编译工具链2
- exp4_2.c.sln
- [雷军]美妙的爱情......福的味道。.mp3
- 2023-04-06-项目笔记 - 第三百二十阶段 - 4.4.2.318全局变量的作用域-318 -2025.11.17
- 2023-04-06-项目笔记 - 第三百二十阶段 - 4.4.2.318全局变量的作用域-318 -2025.11.17
- java资源异步IO框架 Cindy
- java资源业务流程管理(BPM)和工作流系统 Activiti
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功