统计学习方法习题实战第二章

理论树

1.感知机模型:sign和超平面(通过对线性函数进行sign而获得的分离超平面)
2.感知机学习策略:假设(数据集线性可分)下,优化损失函数
3.感知机学习算法:
原始问题 通过对损失函数中w和b求偏导进行梯度下降
对偶问题 w可由加权所得以及gram矩阵(后面的章节有用)
收敛证明 存在最小距离定理和迭代收敛定理

习题

1.Minsky 与 Papert 指出:感知机因为是线性模型,所以不能表示复杂的函数,如异或 (XOR)。验证感知机为什么不能表示异或。
答:法一:列出异或运算表可发现,该函数下的数据点线性不可分,因此不满足感知机假设
法二:用反证法,假设感知机可以分类异或运算问题。二维条件下,遍历四种情况即可发现矛盾。

2.模仿例题 2.1,构建从训练数据求解感知机模型的例子。
答:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

class Perceptron0:
    def __init__(self, lr=0.1):
        self.lr = lr #定义超参数
    
    def fit(self, x, y):
        
        assert x.shape[1] == 2
        #初始化
        self.w = np.zeros(len(x[0]))
        self.b = 0

        is_wrong = False
        while not is_wrong:
            wrong_count = 0
            for d in range(len(x)):
                xi = x[d]
                yi = y[d]
                if yi * (np.dot(self.w, xi) + self.b) <= 0:
                    self.w = self.w + self.lr * np.dot(yi, xi)
                    self.b = self.b + self.lr * yi
                    wrong_count += 1
            if wrong_count == 0:
                is_wrong = True
        return 'Success!'

x = np.array([[3, 3], [4, 3], [1, 1]])
y = np.array([1, 1, -1])
model = Perceptron0()
model.fit(x, y)

print(model.w, model.b)

画图部分

x1 = np.linspace(1, 4, 10)
x2 = -(model.w[0] * x1 + model.b) / model.w[1]
plt.plot(x1, x2)

plt.scatter(x[:2, 0], x[:2, 1], label='1')
plt.scatter(x[2:3, 0], x[2:3, 1], label='-1')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend();

23bbe7d8-ab91-4052-8164-946ce3c9738e

浙ICP备19012682号