您的位置:首页 > 大数据 > 人工智能

统计学习方法 李航 第二章习题

2017-12-12 02:34 232 查看
推荐一下个人博客

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

明显可知异或不具有线性可分性,由感知机定义可知,感知机不能表示异或。

2.2模仿例题2.1,构建从训练数据集求感知机模型的例子

import numpy as np
import matplotlib.pyplot as plt

class showPicture:
def __init__(self,data,w,b):
self.b = b
self.w = w
plt.figure(1)
plt.title('Plot 1', size=14)
plt.xlabel('x-axis', size=14)
plt.ylabel('y-axis', size=14)

xData = np.linspace(0, 5, 100)
yData = self.expression(xData)
plt.plot(xData, yData, color='r', label='y1 data')

plt.scatter(data[0][0],data[0][1],s=50)
plt.scatter(data[1][0],data[1][1],s=50)
plt.scatter(data[2][0],data[2][1],marker='x',s=50,)
plt.savefig('2d.png',dpi=75)
def expression(self,x):
y = (-self.b - self.w[0]*x)/self.w[1]
return y
def show(self):
plt.show()
class perceptron:
def __init__(self,x,y,a=1):
self.x = x
self.y = y
self.w = np.zeros((x.shape[1],1))
self.b = 0
self.a = 1
def sign(self,w,b,x):
result = 0
y = np.dot(x,w)+b
return int(y)
def train(self):
flag = True
length = len(self.x)
while flag:
count = 0
for i in range(length):
tmpY = self.sign(self.w,self.b,self.x[i,:])
if tmpY*self.y[i]<=0:
tmp = self.y[i]*self.a*self.x[i,:]
tmp = tmp.reshape(self.w.shape)
self.w = tmp +self.w
self.b = self.b + self.y[i]
count +=1
if count == 0:
flag = False
return self.w,self.b


2.3证明:样本集线性可分的充要条件是正实例点集所构成的凸壳和负实例点集构成的凸壳不相交

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息