习题

Posted Paul-Huang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了习题相关的知识,希望对你有一定的参考价值。

第2章 感知机

习题2.1

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

解答:

解答思路:

  1. 列出异或函数(XOR)的输入和输出;
  2. 使用图例法证明异或问题是线性不可分的;
  3. 使用反证法证明感知机无法表示异或。

解题步骤:

第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=x1x2
00-1
011
101
11-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()
x1x2y
000-1
1011
2101
311-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 XRn,输出空间是 y = + 1 , − 1 \\mathcaly=\\+1,-1\\ y=+1,1。输入 x ∈ X x \\in \\mathcalX xX表示实例的特征向量,对应于输入空间(特征空间)的点;输出 y ∈ Y y \\in \\mathcalY yY表示实例的类别。由输入空间到输出空间的如下函数:
f ( x ) = sign ( w ⋅ x + b ) f(x)=\\textsign(w \\cdot x + b) f(x)=sign(wx+b)
称为感知机。其中, w w w b b b为感知机模型参数, w ∈ R n w \\in R^n wRn叫做权值或权值向量, b ∈ R b \\in R bR叫做偏置, w ⋅ x w \\cdot x wx表示 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,x01,x<0

  假设感知机模型可以表示异或问题,即满足异或函数(XOR)输入与输出的情况(见第1步)。假设 x x x向量只有两个维度 x 1 x_1 x1 x 2 x_2 x2

  1. 根据 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 wx+b<0,可得 b < 0 b < 0 b<0
  2. 根据 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
  3. 根据 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
  4. 根据 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,编写代码并绘制分离超平面

以上是关于习题的主要内容,如果未能解决你的问题,请参考以下文章

离散数学--2.4 命题逻辑推理理论

习题

习题

从一道常见习题的自然延伸谈起

复试面试复习——离散数学重点

-生成树的相关问题