Python实现PLA(感知机)
Python实现PLA(感知机)
运行环境
- Pyhton3
- numpy(科学计算包)
- matplotlib(画图所需,不画图可不必)
计算过程
st=>start: 开始
e=>end
op1=>operation: 读入数据
op2=>operation: 格式化数据
cond=>condition: 权重是否不变
op3=>operation: 更新权重
op4=>operation: 输出结果
st->op1->op2->cond
cond(yes)->op4->e
cond(no)->op3->cond
输入样例
/* Dataset.txt */
训练集:
vector(第一项是截距项) label
------------------------------------------
[1, 1, 4] 1
[1, 2, 3] 1
[1, -2, 3] 1
[1, -2, 2] 0
[1, 0, 1] 0
[1, 1, 2] 0
测试集:
vector(第一项是截距项) label
------------------------------------------
[1, 1, 1] ?
[1, 2, 0] ?
[1, 2, 4] ?
[1, 1, 3] ?
代码实现
# -*- coding: utf-8 -*-
__author__ = 'Wsine'
from numpy import *
import matplotlib.pyplot as plt
import operator
import time
LINE_OF_DATA = 6
LINE_OF_TEST = 4
def createTrainDataSet():
trainDataMat = [[1, 1, 4],
[1, 2, 3],
[1, -2, 3],
[1, -2, 2],
[1, 0, 1],
[1, 1, 2]]
trainShares = [1, 1, 1, -1, -1, -1]
return trainDataMat, trainShares
def createTestDataSet():
testDataMat = [[1, 1, 1],
[1, 2, 0],
[1, 2, 4],
[1, 1, 3]]
return testDataMat
def autoNorm(dataSet):
minVals = dataSet.min(0)
maxVals = dataSet.max(0)
ranges = maxVals - minVals
normDataSet = zeros(shape(dataSet))
m = dataSet.shape[0]
normDataSet = dataSet - tile(minVals, (m, 1))
normDataSet = normDataSet / tile(ranges, (m, 1))
return normDataSet[:LINE_OF_DATA], normDataSet[LINE_OF_DATA:]
def sigmoid(inX):
inX = float(inX)
if inX > 0:
return 1
elif inX < 0:
return -1
else:
return 0
def pla(dataMatIn, classLabels):
dataMatrix = mat(dataMatIn)
labelMat = mat(classLabels).transpose()
m, n = shape(dataMatrix)
weights = ones((n, 1))
while True:
isCompleted = True
for i in range(m):
if (sigmoid(dot(dataMatrix[i], weights)) == labelMat[i]):
continue
else:
isCompleted = False
weights += (labelMat[i] * dataMatrix[i]).transpose()
if isCompleted:
break
return weights
def plotBestFit(weights):
dataMat, labelMat = createTrainDataSet()
dataArr = array(dataMat)
n = 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 = arange(-3.0, 3.0, 0.1)
y = (-weights[0] - weights[1] * x) / weights[2]
ax.plot(x, y)
plt.xlabel('X1'); plt.ylabel('X2')
plt.show()
def classifyVector(inX, weights):
prob = sigmoid(sum(inX * weights))
if prob > 0:
return 1
else:
return 0
def classifyAll(dataSet, weights):
predict = []
for vector in dataSet:
predict.append(classifyVector(vector, weights))
return predict
def main():
trainDataSet, trainShares = createTrainDataSet()
testDataSet = createTestDataSet()
#trainDataSet, testDataSet = autoNorm(vstack((mat(trainDataSet), mat(testDataSet))))
regMatrix = pla(trainDataSet, trainShares)
print("regMatrix = \n", regMatrix)
plotBestFit(regMatrix)
predictShares = classifyAll(testDataSet, regMatrix)
print("predictResult: \n", predictShares)
if __name__ == '__main__':
start = time.clock()
main()
end = time.clock()
print('finish all in %s' % str(end - start))
输出样例
regMatrix =
[[-16.]
[ 1.]
[ 7.]]
predictResult:
[0, 0, 0, 0]
finish all in 1.213873749436057

Python实现PLA(感知机)的更多相关文章
- 利用Python实现一个感知机学习算法
本文主要参考英文教材Python Machine Learning第二章.pdf文档下载链接: https://pan.baidu.com/s/1nuS07Qp 密码: gcb9. 本文主要内容包括利 ...
- 基于结构化平均感知机的分词器Java实现
基于结构化平均感知机的分词器Java实现 作者:hankcs 最近高产似母猪,写了个基于AP的中文分词器,在Bakeoff-05的MSR语料上F值有96.11%.最重要的是,只训练了5个迭代:包含语料 ...
- 神经网络的Python实现(一)了解神经网络
网络上深度学习相关博客教程质量参差不齐,很多细节很少有文章提到,所以本着夯实深度学习基础的想法写下此系列博文. 本文会从神经网络的概述.不同框架的公式推导和对应的基于numpy的Python代码实现等 ...
- 机器学习---用python实现感知机算法和口袋算法(Machine Learning PLA Pocket Algorithm Application)
之前在<机器学习---感知机(Machine Learning Perceptron)>一文中介绍了感知机算法的理论知识,现在让我们来实践一下. 有两个数据文件:data1和data2,分 ...
- 感知机-Python实现
如图3所示的训练数据集,其正实例点是(3,3),(3,4),负实例点是(1,1),试用感知机学习算法的原始形式求感知机模型,即求出w和b.这里, 图3 这里我们取初值,取.具体问题解释不写了,求解的方 ...
- 感知机(python实现)
感知机(perceptron)是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别(取+1和-1).感知机对应于输入空间中将实例划分为两类的分离超平面.感知机旨在求出该超平面,为求得超平面导 ...
- python 实现简单的感知机
最近在自学机器学习,记录下一些学习记录 如何用python实现一个简单的感知机 需要安装numpy库,即下面用到的np 简单的说就是 通过计算权重向量w和输入向量x的线性组合,判断该线性组合是否大于某 ...
- (数据科学学习手札34)多层感知机原理详解&Python与R实现
一.简介 机器学习分为很多个领域,其中的连接主义指的就是以神经元(neuron)为基本结构的各式各样的神经网络,规范的定义是:由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系 ...
- 感知机学习算法(PLA)
Perception Learning Algorithm, PLA 1.感知机 感知机是一种线性分类模型,属于判别模型. 感知机模型给出了由输入空间到输出空间的映射: f(X) = sign(WTX ...
随机推荐
- android从资源文件中读取文件流显示
在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样:代码区: private void doRaw(){ InputStream is = this ...
- CSS3新增伪类
p:last-of-type 选择其父元素的最后的一个P元素 p:last-child 选择其父元素的最后子元素(一定是P才行) p:first-of-type ...
- windwos异地备份Mysql数据库
@echo off@title Mysqlbackup echo MySQL数据库备份 echo ***********************echo Today %date%echo Time % ...
- 在peopletools里面测试文件上传
Using the PeopleTools Test Utilities Page Select selectPeopleTools, then selectUtilities, then selec ...
- C#winform设置DateTimePicker的时间格式
在对DateTimePicker进行时间格式设置时候,要先对属性Format设置为"Custom"自定义格式,然后再CustomFormat里面进行格式设置 比如"yyy ...
- spark-submit工具参数说明
执行时需要传入的参数说明 Usage: spark-submit [options] <app jar | python file> [app options] 参数名称 含义 --mas ...
- web.xml中的url-pattern映射规则
Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单.servlet和filter中的url-pattern有一些文章在里面的,总结了一些东西,以免遇到问题又要浪费时间. 一,s ...
- yii 计划任务
Yii框架自动生成的Web应用骨架的目录里面有连个脚步文件,yiic和yiic.bat. yiic是Unix/Linux平台用的,yiic.bat是windows平台用的.如果要查看脚本的帮助可以进入 ...
- PHP+MYSQL会员系统的开发实例教程
本文通过一个简单的实例完成了完整的PHP+MySQL会员系统功能.是非常实用的一个应用.具体实现步骤如下: 一.会员系统的原理: 登陆-->判断-->保持状态(Cookie或Session ...
- char型变量理解
char c = 128; printf("%d", c); 问输出是多少? 正确答案应该是-128. 如下几种情况: char c=128;printf("%u\n& ...