感知机

1.Minsky和Papert指出:感知机是线性模型,所以不能表示复杂的函数,如异或(XOR),验证感知机为什么不能表示异或。

异或输入输出
x(1) x(2) y
0 0 -1
0 1 1
1 0 1
1 1 -1

表格表示输入相同为负实例,输入不同为正实例,满足异或的性质。解决这个题目要证明异或操作的线性不可分性,利用反证法证明:

假设存在一个超平面ωx+b=0,满足条件y(wx+b)>0,根据表格数据可以得到四个等式:

①b<0

②ω(2)+b>0

③ω(1)+b>0

④ω(1)+ω(2)+b<0

①④合并得到ω(1)+ω(2)+2b<0,②③合并得到ω(1)+ω(2)+2b>0,矛盾,所以假设不成立,不存在超平面满足线性可分条件,因此异或操作线性不可分,感知机不能表示异或。

2.构建从训练数据集求解感知机模型的例子。(python实现)

(1)原始形式

import numpy as np

#构建感知机模型
def signfunction(w,x,b):
a=np.dot(w,x.T)+b
a[a<0] = -1
a[a>=0] = 1
return a

#学习w,b
def training(x,y,eta):
count=len(x)
feature_count=len(x[1])
#初始化w,b
#w=np.zeros(shape=feature_count)
w=np.random.randint(10,size=feature_count)
print("初始化w值为:",w)
b=0;
#统计误分类点的个数
wrong=sum(signfunction(w,x,b)!=y)
i=0
# 如果有误分类的点则更新w,b
while wrong>0:
xi = x[i]
yi = y[i]
# 选一个误分类的点更新w,b
if (yi * (np.dot(w, xi) + b) <= 0):
w = w + eta * yi * xi
b = b + eta * yi
wrong = sum(signfunction(w, x, b) != y)
# 当前点没有被误分类,则换下一个点
else:
i = (i + 1)%count
return w,b

if __name__ == '__main__':
x = np.array([[3,3],[4,3],[1,1]])
y=np.array([1,1,-1])
(w, b) = training(x,y,1)
print(w)
print(b)

输出如下:

       所以,分离超平面为x(1)+2x(2)-4=0,感知机模型为f(x)=sign(x(1)+2x(2)-4)。注意:感知机学习算法由于采用不同的初值或者选取不同的误分类点,解可以不同,本例ω采用随机初始化0—10之间的整数,初始化不同,结果不同,经过式yi(w*xi+b)>0检验,模型正确。

(2)对偶形式

import numpy as np

#构建感知机模型
def signfunction(w,x,b):
a=np.dot(w,x.T)+b
a[a<0] = -1
a[a>=0] = 1
return a

#学习a,b,w
def training(x,y,eta):
count=len(x)
feature_count=len(x[1])
#初始化a,b,w
w=np.zeros(shape=feature_count)
a=np.zeros(shape=count)
b=0;
#计算Gram矩阵
Gram=np.dot(x,x.T)
print("G矩阵为:")
print(Gram)
wrong = sum(signfunction(w, x, b) != y)
i=0
while wrong>0:
if (y[i] * (a[0] * y[0] * Gram[0, i] + a[1] * y[1] * Gram[1, i] + a[2] * y[2] * Gram[2, i] + b )<= 0):
a[i] = a[i] + eta
b = b + y[i]
w = a[0] * y[0] * x[0] + a[1] * y[1] * x[1] + a[2] * y[2] * x[2]
wrong = sum(signfunction(w, x, b) != y)
else:
i = (i + 1) % count
print("a:",a)
print("b:",b)
print("w:",w)

if __name__ == '__main__':
x = np.array([[3,3],[4,3],[1,1]])
y=np.array([1,1,-1])
training(x,y,1)

输出如下:

 


posted @ 2019-03-13 17:07  huangshansan  阅读(267)  评论(0编辑  收藏  举报