习题
Posted Paul-Huang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了习题相关的知识,希望对你有一定的参考价值。
第2章 感知机
习题2.1
Minsky 与 Papert 指出:感知机因为是线性模型,所以不能表示复杂的函数,如异或 (XOR)。验证感知机为什么不能表示异或。
解答:
解答思路:
- 列出异或函数(XOR)的输入和输出;
- 使用图例法证明异或问题是线性不可分的;
- 使用反证法证明感知机无法表示异或。
解题步骤:
第1步:异或函数(XOR)的输入和输出
对于异或函数(XOR),全部的输入与对应的输出如下:
x 1 x_1 x1 | x 2 x_2 x2 | y = x 1 ⊕ x 2 y=x_1\\oplus x_2 y=x1⊕x2 |
---|---|---|
0 | 0 | -1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | -1 |
第2步:使用图例法证明异或问题是线性不可分的
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 使用Dataframe表示异或的输入与输出数据
x1 = [0, 0, 1, 1]
x2 = [0, 1, 0, 1]
y = [-1, 1, 1, -1]
x1 = np.array(x1)
x2 = np.array(x2)
y = np.array(y)
data = np.c_[x1, x2, y]
data = pd.DataFrame(data, index=None, columns=['x1', 'x2', 'y'])
data.head()
x1 | x2 | y | |
---|---|---|---|
0 | 0 | 0 | -1 |
1 | 0 | 1 | 1 |
2 | 1 | 0 | 1 |
3 | 1 | 1 | -1 |
# 获取正类别(y=1)的数据
positive = data.loc[data['y'] == 1]
# 获取负类别(y=-1)的数据
negative = data.loc[data['y'] == -1]
# 绘制数据图
# 绘制坐标轴
plt.xlim(-0.5, 1.5)
plt.ylim(-0.5, 1.5)
plt.xticks([-0.5, 0, 1, 1.5])
plt.yticks([-0.5, 0, 1, 1.5])
# 添加坐标轴文字
plt.xlabel("x1")
plt.ylabel("x2")
# 绘制正、负样本点
plt.plot(positive['x1'], positive['x2'], "ro")
plt.plot(negative['x1'], negative['x2'], "bx")
# 添加图示
plt.legend(['Positive', 'Negative'])
plt.show()
从上图可以看出,无法使用一条直线将两类样本分开,所以异或问题是线性不可分的
from sklearn.linear_model import Perceptron
import numpy as np
# 构造异或问题的训练数据集
X_train = np.array([[1, 1], [1, 0], [0, 1], [0, 0]])
y = np.array([-1, 1, 1, -1])
# 使用sklearn的Perceptron类构建感知机模型
perceptron_model = Perceptron()
# 进行模型训练
perceptron_model.fit(X_train, y)
# 打印模型参数
print("感知机模型的参数:w=", perceptron_model.coef_[
0], "b=", perceptron_model.intercept_[0])
感知机模型的参数:w= [0. 0.] b= 0.0
上述使用sklearn的Perceptron类构建感知机模型,从模型的参数上观察,感知机模型无法表示异或。
第3步:使用反证法证明感知机无法表示异或
根据书中第35页感知机模型的定义:
定义2.1(感知机) 假设输入空间(特征空间)是 X ⊆ R n \\mathcalX \\subseteq R^n X⊆Rn,输出空间是 y = + 1 , − 1 \\mathcaly=\\+1,-1\\ y=+1,−1。输入 x ∈ X x \\in \\mathcalX x∈X表示实例的特征向量,对应于输入空间(特征空间)的点;输出 y ∈ Y y \\in \\mathcalY y∈Y表示实例的类别。由输入空间到输出空间的如下函数:
f ( x ) = sign ( w ⋅ x + b ) f(x)=\\textsign(w \\cdot x + b) f(x)=sign(w⋅x+b)
称为感知机。其中, w w w和 b b b为感知机模型参数, w ∈ R n w \\in R^n w∈Rn叫做权值或权值向量, b ∈ R b \\in R b∈R叫做偏置, w ⋅ x w \\cdot x w⋅x表示 w w w和 x x x的内积。sign是符号函数,即
sign ( x ) = + 1 , x ⩾ 0 − 1 , x < 0 \\textsign(x)=\\left \\ \\beginarrayll +1, \\quad x \\geqslant 0 \\\\ -1, \\quad x < 0 \\endarray\\right. sign(x)=+1,x⩾0−1,x<0
假设感知机模型可以表示异或问题,即满足异或函数(XOR)输入与输出的情况(见第1步)。假设 x x x向量只有两个维度 x 1 x_1 x1, x 2 x_2 x2:
- 根据 x 1 = 0 , x 2 = 0 , f ( x ) = − 1 x_1=0, x_2=0, f(x)=-1 x1=0,x2=0,f(x)=−1,则 w ⋅ x + b < 0 w \\cdot x +b < 0 w⋅x+b<0,可得 b < 0 b < 0 b<0;
- 根据 x 1 = 0 , x 2 = 1 , f ( x ) = 1 x_1=0, x_2=1, f(x)=1 x1=0,x2=1,f(x)=1,则 w 2 + b > 0 w_2 + b > 0 w2+b>0,结合 b < 0 b < 0 b<0,可得 w 2 > − b > 0 w_2 > -b > 0 w2>−b>0;
- 根据 x 1 = 1 , x 2 = 0 , f ( x ) = 1 x_1=1, x_2=0, f(x)=1 x1=1,x2=0,f(x)=1,则 w 1 + b > 0 w_1 + b > 0 w1+b>0,结合 b < 0 b < 0 b<0,可得 w 1 > − b > 0 w_1 > -b > 0 w1>−b>0;
- 根据 x 1 = 1 , x 2 = 1 x_1=1, x_2=1 x1=1,x2=1,并结合 w 1 + b > 0 w_1 + b > 0 w1+b>0、 w 2 > 0 w_2 > 0 w2>0,则 w 1 + w 2 + b > 0 w_1 + w_2 + b > 0 w1+w2+b>0,可得 f ( x ) = 1 f(x)=1 f(x)=1,与异或条件中的 f ( x ) = − 1 f(x)=-1 f(x)=−1矛盾。
所以假设不成立,原命题成立,即感知机模型不能表示异或。
习题2.2
模仿例题 2.1,构建从训练数据求解感知机模型的例子。
解答:
解答思路:
按照书中第38~39页感知机学习算法2.1,编写代码并绘制分离超平面
算
以上是关于习题的主要内容,如果未能解决你的问题,请参考以下文章