感知器代码实现

发布时间:2024年01月15日

一.感知器模型的代码实现

这里 给出的是使用np代码实现的基本机器学习代码,并非直接使用包中的函数。

import numpy as np
class Perceptron:
    """
        Perceptron classifier
        eta:float
            学习率
        n_iter:int
        random_state:int
            Random number generator seed for random weight
            初始化
        Attributes
            w_:1d_arrray
                权重
            b_:Scalar
                偏置项
    """
    def __init__(self, eta, n_iter=50, random_state=1):
        self.eta = eta
        self.n_iter = n_iter
        self.random_state = random_state
    def fit(self, X, y):
        """
            拟合训练数据
            参数
            ------------------
            X:{array-like}, shape=[n_examples, n_features]
                训练向量,n_examples是案例的数量,n_features是特征值的个数
            y:array-like, shape=[n_examples] 目标值
        """
        rgen = np.random.RandomState(self.random_state)
        self.w_ = rgen.normal(loc=0.0, scale=0.01, size=X.shape[1])
        self.b_ = np.float_(0.0)
        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_ = update * xi
                self.b_ = update
                errors += int(update != 0.0)
            self.errors_.append(errors)
        return self
                
         
    def net_input(self, X):
        """计算网络输入"""
        return np.dot(X,self.w_) + self.b_
    def predict(self, X):
        """Return class label after unit step"""
        return np.where(self.net_input(X) >= 0.0, 1, 0) 

接着我们可以使用鸢尾花的数据集来检验。
由于这一感知器是完成二分类的特征,因此需要截图部分数据,这里截取山鸢尾和变色鸢尾的数据,特征值为萼片长度和花瓣长度。
相应代码如下
数据集在下面的博客可以了解到
https://editor.csdn.net/md/?articleId=135319421

import matplotlib.pyplot as plt
import numpy as np
# 导入鸢尾花数据集加载到DataFrame对象中
import os
import pandas as pd
path = "../data/iris.data"
df = pd.read_csv(path, header=None, encoding='utf-8')
df.tail()
y = df.iloc[0:100,4].values
y = np.where(y=='Iris-virginica',0,1)
X = df.iloc[0:100,[0,2]].values
plt.scatter(X[:50,0],X[:50,1],color='red',marker='o',label='Setosa')
plt.scatter(X[50:100,0],X[50:100,1],color='blue',marker='s',label='Versicolor')
plt.xlabel('Sepal length [cm]')
plt.ylabel('Petal length [cm]')
plt.legend(loc='upper left')
plt.show()

在这里插入图片描述

山鸢尾和变色鸢尾萼片长度与花瓣长度的散点图

文章来源:https://blog.csdn.net/qq_37977007/article/details/135604086
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。