神经网络入门:感知机算法思想

什么是感知机?

        感知机是训练模型的一种,是一种线性模型:w*x + b;其中w为输入的权重,b为偏移值;感知机算法思想就是将训练集特征不断输入到上述的线性模型中,将输出结果与样本标签不断匹配,以此来更新模型中的w和b,直至使所有样本输入到模型后的输出结果能与样本真实标签匹配;

        在本文章中,我利用sklearn中的datasets模块去加载iris数据集;提供以下代码块:

from sklearn import datasets
data = datasets.load_iris()
data.feature_names

        同时,本文还提供了一段代码去显示数据集中的部分数据的散点图,代码块如下:

import matplotlib.pyplot as plt
fig = plt.subplot()
fig.set_xlim([np.amin(data.data[:100,2]),np.amax(data.data[:100,2])])
fig.set_ylim([np.amin(data.data[:100,3]),np.amax(data.data[:100,3])])
plt.scatter(data.data[:50,2],data.data[:50,3],color = 'red', marker = 'o', label = 'Versicolor')
plt.scatter(data.data[50:100,2],data.data[50:100,3],color = 'blue', marker = 'o', label = 'Versicolor')
plt.plot([np.amin(data.data[:100,2]),np.amax(data.data[:100,2])],[0.8,0.7])

         并且画了一条线性函数图形,来分隔两种iris,本次我们就是利用感知机来不断的更新这条一次函数线;

2、感知机有什么用呢

        感知机用于线性的二分类任务中,感知机是一个线性二分类器。

3、感知机如何实现?

        具体流程图如下:

        该流程图包括两个循环,大循环是我们设定的迭代次数,当迭代此时达到一定数目时结束训练,小循环是我们的训练集数目,且训练集没有一个样本与模型匹配,correct+1,知道correct与样本数目一致,我们认为模型训练完毕。

        具体的代码实现如下代码块:

import numpy as np
yangben1 = np.array([[1.9, 0.4], [1.6, 0.6]])
yangben2 = np.array([[3, 1.1]])
x =  np.concatenate((yangben1,yangben2),axis = 0)
xlabel = [-1,-1,1]

class perceptron:
    def __init__(self, learnrate = 0.1, epoch = 10, modelw = [0.1, 0.1], modelb = 0):
        self.learnrate = learnrate
        self.epoch = epoch
        self.modelw = modelw
        self.modelb = modelb
    
    def predict(self,x):
        if np.dot(self.modelw,x)+self.modelb >= 0:
            return 1
        else:
            return -1
    
    def updatewb(self,x,xlabel):
        if self.predict(x) == xlabel:
            return
        else:
            self.modelw += self.learnrate*x*xlabel
            self.modelb += self.learnrate*xlabel
    
    def fit(self,x,y):
        if len(x) != len(y):
            print("eror")
            return False
        m = len(x)
        for epoch in range(self.epoch):
            mcorrect = 0
            for i in range(m):
                if(y[i]== self.predict(x[i])):
                    mcorrect += 1
                else:
                    self.updatewb (x[i],y[i])
                if(mcorrect == m):
                    print('model is raedy after {} epoch(s)'.format(epoch))
                    break

classifier = perceptron(0.6, 10, [0.5, 0.5])
print(classifier.modelw)
print(classifier.modelb)
classifier.fit(x,xlabel)
print(classifier.modelw)

        我们在感知机Perceptron类中定义了4个成员分别为 学习率(learnrate)、迭代次数(epoch)、模型权重(modelw)、模型偏移(modelb)。类中还定义了3种方法分别对应着预测、参数更新和模型训练;

        最后我们通过自己拟定的数据集去观察参数更新模型训练的过程;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值