1. Minsky与Papert指出:感知机是线性模型,所以不能表示复杂的函数,如异或(XOR).验证感知机为什么不能表示异或。
首先写出异或函数对应的输入输出:
| y | ||
| 1 | 1 | -1 |
| 1 | -1 | +1 |
| -1 | 1 | +1 |
| -1 | -1 | -1 |
我们可以可视化上述实例及其标签:
import numpy as np
import matplotlib.pyplot as plt
x = np.array([[1,1],[1,-1],[-1,1],[-1,-1]])
y = np.array([-1,1,1,-1])
plt.scatter(x[:,0],x[:,1],c=y)
plt.xlabel('x1')
plt.ylabel('x2')
plt.ylim(-2,2)
plt.xlim(-2,2)
plt.xticks([-2,-1,0,1,2])
plt.yticks([-2,-1,0,1,2])
plt.title('XOR')
plt.show()

显然异或问题是线性不可分的,感知机算法无法用一条直线把两类样本点完全分开。
2. 模仿上一节中的例题,构建从训练数据集求解感知机模型的例子。
import numpy as np
from sklearn.linear_model import Perceptron
X_train = np.array([[3,3],[4,3],[1,1]])
y_train = np.array([1,1,-1])
#初始化感知机模型
perceptron_model = Perceptron()
#训练
perceptron_model.fit(X_train,y_train)
#打印学好的参数
print("w:",perceptron_model.coef_,"\nb:",perceptron_model.intercept_,"\n")
#在训练集上进行预测
res = perceptron_model.predict(X_train)
print(res)

3. 证明以下定理:样本集线性可分的充要条件是正实例点集所构成的凸壳与负实例点集所构成的凸壳互不相交。

2万+

被折叠的 条评论
为什么被折叠?



