机器学习——感知机初步

机器学习——感知机初步

    • 什么是感知机
    • 数据介绍
    • 感知机算法流程
    • 感知机的python代码实现

什么是感知机

想要了解什么是感知机,首先了解生物神经元(BN)结构,生物神经元结构如下图所示:
机器学习——感知机初步_第1张图片

从图中可以看出每一个生物神经元主要由细胞体、树突、轴突和突触4个部分构成。有一定生物学基础的人能够明白,一个神经元的输入端有多个树突,主要是用来接受输入信息。输入信息经过突触处理,将输入信息累加,当处理后的输入信息大于某一个特定的阈值,会把信息通过轴突传播出去,这时称神经元被激活,相反,当处理后的输入信息小于阈值时,神经元就处于抑制状态,它不会向其他神经元传递数据或者传递很少的信息数据。

受生物神经元的启发,1943年心理学家McCulloch与数学家Pitts提出了人工神经元模型(Artificial Neuron,AN),如图所示,人们称之为M-P模型也可以叫做“感知机”模型。

机器学习——感知机初步_第2张图片

数据介绍

我们通过判断西瓜是否成熟例子来介绍感知机的算法流程,数据介绍:

数据集一共构造了帮助预测的特征一共有 30 个:色泽、根蒂、敲声等等。类别为是好瓜与不是好瓜。部分数据如下:
机器学习——感知机初步_第3张图片
由于我们的模型只能对数字进行计算。所以,我们用x1表示色泽,x2表示根蒂,x3表示敲声 。y 表示类别。其中,x1= 0,表示青绿,x2= 2,表示稍蜷, y=-1,表示不是好瓜。具体如下图:
机器学习——感知机初步_第4张图片

感知机算法流程

将感知机模型应用于对西瓜是否成熟的分类,可以理解为下图通过确定各个特征的权重和偏置来获取判断依据:
建立数学模型:
机器学习——感知机初步_第5张图片

建立数学模型后我们介绍感知机的算法流程如图:
机器学习——感知机初步_第6张图片

文字解释:
机器学习——感知机初步_第7张图片

但是上述的更新只针对于训练集的误分类点,至于为什么呢,可以这么理解,对于误分类的点必须调整超平面,使得误分类点变成正确的分类点,而对于正确的分类点,没有必要进行调整,这样也可以缩短整个程序的运算时间。

感知机的python代码实现

根据上面的算法流程,用python代码实现,这是代码:
#encoding=utf8
import numpy as np
#构建感知机算法

class Perceptron(object):
    def __init__(self, learning_rate = 0.01, max_iter = 200):
        self.lr = learning_rate
        self.max_iter = max_iter
    def fit(self, data, label):
        '''
        input:data(ndarray):训练数据特征
              label(ndarray):训练数据标签
        output:w(ndarray):训练好的权重
               b(ndarry):训练好的偏置
        '''
        #编写感知机训练方法,w为权重,b为偏置
        self.w = np.array([1.]*data.shape[1])
        self.b = np.array([1.])
        
        for i in range(len(label)):
            while label[i]*(np.matmul(self.w,data[i])+self.b) <= 0:
                self.w = self.w + self.lr * (label[i]*data[i])
                self.b = self.b + self.lr * label[i]
       
    def predict(self, data):
        '''
        input:data(ndarray):测试数据特征
        output:predict(ndarray):预测标签
        '''
        yc = np.matmul(data,self.w) + self.b
        for i in range(len(yc)):
            if yc[i] >= 0:
                yc[i] = 1
            else:
                yc[i] = -1
        predict = yc
        return predict
代码在EduCoder平台测试得到通过,因为正确率超过0.8就可以,所以我并没有确切的知道正确率。

代码通过的截图:
机器学习——感知机初步_第8张图片

内容参考了周志华的机器学习和黄安埠的深入浅出深度学习等,感兴趣的同学也可以进入EduCoder平台的机器学习修炼指南一起学习机器学习。

你可能感兴趣的:(机器学习)