标签:class numpy 性问题 nbsp pre 一个 pytho 分离 image
一.感知机概述
感知机适用于:线性可分的数据,用于二分类
目的:找到分离超平面,完全分离不同的类
感知机公式:,一元多维的函数
感知机学习策略:通过求min(所有误分类点到超平面距离),即损失函数,来确定权重和偏置
求解方法:梯度下降法
求解步骤:1.初始化权重和偏置
2.任选点(x,y)
3.若yi*(w*x+b)<=0,则更新w(new)=w(old)+eta*yi*xi,b(new)=b(old)+eta*yi ,其中0<eta<=1(这里通常我们令eta=1)
迭代收敛说明:Novikoff定理证明出误分类次数是有上界的,经有限次搜索可以找到分离超平面,感知机因初始值的选择有很多解。
下面是具体代码实现:
#感知机处理线性可分数据 import numpy as np import random import matplotlib.pyplot as plt def getdata(num):#生成间隔大些的数据,需要输入数据量 xdata=[] for i in range(num): idata=[random.randint(0,20),random.randint(0,20)] if sum(idata)>=20: idata=[i+5 for i in idata] if not idata in xdata: xdata.append(idata) ydata=[1 if sum(i)>=20 else -1 for i in xdata] return xdata,ydata def per(xdata,ydata,w,b):#求解w,b while any([ydata[i]*(w[0]*xdata[i][0]+w[1]*xdata[i][1]+b)<=0 for i in range(len(xdata))]): for i in range(len(xdata)): while ydata[i]*(w[0]*xdata[i][0]+w[1]*xdata[i][1]+b)<=0: w=[w[j]+ydata[i]*xdata[i][j] for j in range(2)] b=b+ydata[i] return w,b def pic(w=[0,0],b=0,num=100):#画图 xdata, ydata = getdata(num) xdata1 = [i[0] for i in xdata] xdata2 = [i[1] for i in xdata] plt.scatter(xdata1, xdata2, c=["r" if i == 1 else "b" for i in ydata],s=5) plot_x = [1, 25] w,b=per(xdata,ydata,w,b) plot_y = [(-1) * (b + w[0] * plot_x[0]) / w[1], (-1) * (b + w[0] * plot_x[1]) / w[1]] plt.plot(plot_x, plot_y)
效果如图所示:
二.证明感知机不能处理异或问题
对于异或问题:
首先,我们假设异或问题是线性可分的,则有:
三,利用感知机处理异或问题
虽然感知机不能直接用来处理异或问题,但是我们可以通过激活函数来实现非线性问题的分类
这里我受到adaboost的启发,即多个弱分类器组合成为一个强分类器,我们可以如下构造:
下面是代码实现:
#处理线性不可分数据,异或 import numpy as np xdata=[[0,0,0,1],[0,1,1,1],[1,0,1,1],[1,1,1,0]]#初始化数据 ydata=[-1,1,1,-1]#初始化数据 def per(xdata,ydata,w=[0,0,0,0],b=0):#求解w,b while any([ydata[i]*(w[0]*xdata[i][0]+w[1]*xdata[i][1]+w[2]*xdata[i][2]+w[3]*xdata[i][3]+b)<=0 for i in range(len(xdata))]): for i in range(len(xdata)): while ydata[i]*(w[0]*xdata[i][0]+w[1]*xdata[i][1]+w[2]*xdata[i][2]+w[3]*xdata[i][3]+b)<=0: w=[w[j]+ydata[i]*xdata[i][j] for j in range(4)] b=b+ydata[i] return w,b
结果为:
([-2, -1, 4, 3], -4)
标签:class numpy 性问题 nbsp pre 一个 pytho 分离 image
原文地址:http://www.cnblogs.com/danning13/p/7476660.html