#!/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()