感知机

机器学习的方式

监督学习,非监督学习,增强学习
这里写图片描述

感知机

这里写图片描述

  • 感知机接收一个样本输入x,然后将其和权重w结合,计算网络输入z。z接着被传递给激活函数,产生一个二分类输出-1或1作为预测的样本类别。在整个学习阶段,输出用于计算预测错误率和更新权重参数。
  • 感知机算法仅在两个类别确实线性可分并且学习率充分小的情况下才能保证收敛。如果两个类别不能被同一线性决策界分开,我们可以设置最大训练集迭代次数或者可容忍的错误分类样本数来停止算法的学习过程。
    这里写图片描述

使用python实现感知机算法

定义一个感知机接口作为python类,类中的主要方法主要有初始化方法,fit方法和predict方法

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

import numpy as np

class Perceptron(Object):
    def __init__(self,eta=0.01,n_iter=10):
        self.eta=eta
        self.n_iter = n_iter

    def fit(self,x,y):
       self.w_ = np.zeros(1+X.shape[1])
       self.errors =[]

       for _ in range(self.n_iter):
           errors = 0
           for xi,target in zip(X,y):
               update = self.eta * (target -self.predict(xi))
               self.w_[1:] += update  * xi
               self.w_[0] += update
               errors += int(update != 0.0)
           self.errors_.append(errors)
       return self

    def net_input(self,X):
        return np.dot(X,self.w_[1:]) +self.w_[0]

    def predict(self,X):
        return np.where(self.net_input(X)>=0.0,1,-1)

有了以上的代码实现,我们可以初始化一个新的Perceptron对象,并且对学习率eta和迭代次数n_iter赋值,fit方法先对权重参数初始化,然后对训练集中每一个样本循环,根据感知机算法对权重进行更新。类别通过predict方法进行预测。除此之外,self.errors_还记录了每一轮中误分类的样本数,有助于我们接下来分析感知机的训练过程。

使用lris数据集检验感知机模型

>>> import pandas as pd
>>> df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None)
>>> df.tail()
       0    1    2    3               4
145  6.7  3.0  5.2  2.3  Iris-virginica
146  6.3  2.5  5.0  1.9  Iris-virginica
147  6.5  3.0  5.2  2.0  Iris-virginica
148  6.2  3.4  5.4  2.3  Iris-virginica
149  5.9  3.0  5.1  1.8  Iris-virginica
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> y = df.iloc[0:100, 4].values
>>> y = np.where(y == 'Iris-setosa', -1, 1)
>>> X = df.iloc[0:100, [0, 2]].values
>>> plt.scatter(X[:50, 0], X[:50, 1],color='red', marker='o', label='setosa')
<matplotlib.collections.PathCollection object at 0x1302b3710>
>>> plt.scatter(X[50:100, 0], X[50:100, 1],color='blue', marker='x', label='versicolor')
<matplotlib.collections.PathCollection object at 0x1302cd1d0>
>>> plt.xlabel('petal length')
<matplotlib.text.Text object at 0x112053d10>
>>> plt.ylabel('sepal length')
<matplotlib.text.Text object at 0x119615bd0>
>>> plt.legend(loc='upper left')

<matplotlib.legend.Legend object at 0x1302fc890>
>>> plt.show()
>>> 

最终出现的效果图如下:
这里写图片描述

训练感知机模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值