感知机(Python实现,简单)

#!/usr/bin/python
#-*-coding:utf-8 -*-
import random
from numpy import *
import numpy as np

def training():
    train_data1 = [[3, 3, 1], [4, 3, 1]]  # 正样本
    train_data2 = [[1, 1, -1]]  # 负样本
    train_datas = train_data1 + train_data2  # 样本集
    leng=len(train_datas[0])
    #选取初值
    w=[0,0]     #权值
    b=0         #偏置
    step=1
    while(judgeErrorPoint(w,b,train_datas)):
        #选取数据(xi,yi)
        ranInt=random.randint(0,2)
        data=train_datas[ranInt]
        xi,yi=selectXiYi(leng,data)
        # print(str(xi)+"----"+str(yi))
        if yi[0]*((calculate(w,xi)+b))<=0:
            w=mat(w)+mat(step*yi[0]*xi)
            b=b+step*yi[0]
    print(w)
    print (b)
    return w,b
#矩阵计算
def calculate(w,xi):
    a1=w
    a1=mat(a1)
    a2=mat(xi).T  #矩阵转置
    a3=a1*a2
    val=a3[0,0]  #把矩阵变为一个数值
    # print (str(val)+"-----val")
    return val

#判断是否有误分类点
def judgeErrorPoint(w,b,train_datas):
    leng=len(train_datas[0])
    judge=False
    for data in train_datas:
        xi,yi=selectXiYi(leng,data)
        if yi[0]*((calculate(w,xi)+b))<=0:
            judge=True
            return judge
    return judge
#把数据源中的xi,yi分开
def selectXiYi(leng,data):
    ranInt=random.randint(0,2)
    # print(ranInt)
    xi=data[:leng-1]
    yi=data[-1:leng]
    return xi,yi

training()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值