从零开始学习机器学习(二)感知器 Perceptron

上一部分我介绍了机器学习的基本知识,这一节我将介绍感知器 Perceptron。 感知器主要应用在神经网络中,是一个简单的二元线性分类器

从零开始学习机器学习(一)线性分类器(linear classifier) 监督学习 无监督学习 损失函数 梯度下降 随机梯度下降(SGD)_UnicornH!XD的博客-优快云博客
 

感知机 Perceptron

一个加上权重 \huge w​以偏项bias term及的线性函数:

                        f(x) = w^t x+w_0 = w_1x_1 + w_2x_2+....+w_px_p +w_0

感知器是一个二元分类器:

                        \\z = w^tx + w_0\\ y = \left\{\begin{matrix} & -1,\: \: z<0\\ & 1,\: \: \: \, z>0 \end{matrix}\right.

预测任务就是给定输入x​和权重w​计算预测的 y'​。 学习任务的目标是给定训练数据(x_1,y_1),(x_1,y_2),,,,(x_p,y_p)​ 来寻找合适的w​。在感知机模型中,权重w​对应的向量是决策边界,用来将两个类分离开。

关于数据的生成过程如下:

(1)计算 z = w^t +x

(2)如果 z>0​, 呢么y=1​ ; 否则y = -1

接下来需要构建loss function:

如果预测的 y'​是正确的,呢么 y * (w^tx + w_0) >0

否则 y * (w^tx + w_0) <0

由此,loss function就是:

                                        ​​​​​​​        L_w(y,y') = \sum_{i=1}^{n} l_w(y_i,y_i') = \sum_{i \in M}^{}-y_i*(w^tx_i +w_0)

M = \{​{i:y_i \neq y_i'}\}​ 是误分类的样本集合

通过SGD优化参数

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        w_j^{(t+1)} = w_j^{(t)} - \lambda g'_{j,w^{(t)}}

这里g'_{j,w^{(t)}}​是估计的梯度,即:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \frac{\sigma L_w(y,y')}{\sigma w_i}

求导后,我们得到:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \frac{\sigma L_w(y,y')}{\sigma w_j} = \sum_{i \in M}^{}-yi *x_{ij}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \frac{\sigma L_w(y,y')}{\sigma w_0} = \sum_{i \in M}^{}-yi

进一步的,参数通过下列公式更新:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \\w_j^{(t+1)} = w_j^{(t)} + \lambda_j y_i*x_{ij},\, \, \, (y_i\neq y_i'),\\ \\w_0^{(t+1)} = w_0^{(t)} + \lambda_j y_i,\, \, \, (y_i\neq y_i')\\

决策边界 Decision Boundary

决策边界指的是一个硬阈值,它将我们的输入空间划分为那些应该在一个类或另一个类中考虑的样本。在感知机中,决策边界通常定义为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​                        z = 0 = w^tx + w_0

对于两个输入:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        0 = w_1x_1+w_2x_2+w_0​                                      

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        x_2 = -\frac{1}{w_2}(w_1x_1+w_0) = -\frac{w_1}{w_2}x1 -\frac{w_0}{w_2}

这是一条直线,因为决策边界通常都是线性的。

总结

在这一部分,我介绍了

(1)感知机算法

(2)数据的生成

(3)通过SGD最优化

(4)决策边界

下一部分,我将介绍逻辑回归 Logistic Regression模型 https://blog.youkuaiyun.com/qq_42715079/article/details/120981411

最后附带代码:

#define prediction function
def predict_fn(x1, x2, w0, w1, w2):
    y_pre = np.sign(w1*x1 + w2*x2 + w0)
    return y_hat

#def loss function
def loss_fn(x1, x2, y, w0, w1, w2):
    y_pre  = predict_fn(x1, x2, w0, w1, w2)
    loss = -np.sum(y*y_pre*(y != y_pre)
    return loss

#def update function
def update_fn(x1, x2, y, y_pre, w0, w1, w2):
   if ((y == 1) & (y_pre == -1)):
        w0 = w0 + 1
        w1 = w1 + x1
        w2 = w2 + x2
    if ((y == -1) & (y_pre == 1)):
        w0 = w0 - 1
        w1 = w1 - x1
        w2 = w2 - x2
    return w0, w1, w2

#set the parameters
n_epochs = 5000 #interation times
w0_hat = 0
w1_hat = -0.5
w2_hat = 1.5

#store 
loss_vec = np.zeros(n_epochs)
w0_vec = np.zeros(n_epochs)
w1_vec = np.zeros(n_epochs)
w2_vec = np.zeros(n_epochs)

#interaction 
for epoch in range(n_epochs):
    #sample one of the training point
    i = random.randint(0, n-1)
    y_i = y[i]
    x1_i = x1[i]
    x2_i = x2[i]

    #predict
    y_pre_i = predcit_fn(x1_i, x2_i, w0_hat, w1_hat, w2_hat)
    
    #update 
    w0_hat, w1_hat, w2_hat = update_fn(x1_i, x2_i, y_i, y_pre_i, w0_hat, w1_hat, w2_hat)

    #loss
    loss = loss.fn(x1_i, x2_i, y, w0_hat, w1_hat, w2_hat)

    #store
    loss_vec[epoch] = loss
    w0_vec[epoch] = w0_hat
    w1_vec[epoch] = w1_hat
    w2_vec[epoch] = w2_hat
     
#plot the scatter
plt.scatter(np.arange(0, n_epochs), loss_vec, s = 16)
plt.xlabel("Epoch")
plt.ylabel("Loss")



    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值