首页 > 编程知识 正文

感知机的Python实现

时间:2023-11-21 17:43:46 阅读:287922 作者:NOZD

感知机是一种二元分类模型,其基本形式为输入向量乘以权重向量再加上偏移量,最后通过激活函数输出一个标志位分类结果。感知机的Python实现可以分为三个部分:初始化参数、训练模型和预测函数。

一、初始化参数

感知机的初始化参数包括权重向量和偏移量。使用numpy数组实现,初始化权重向量为[0,0],偏移量为0:

import numpy as np
import random

class Perceptron:
    def __init__(self):
        self.weights = np.array([0.0,0.0])
        self.bias = 0.0

二、训练模型

训练模型可以分为以下几个步骤:

1.定义激活函数

激活函数是一个阈值函数,如果输入大于等于0,则输出1,否则输出-1:

def activation_function(x):
    return 1 if x>=0 else -1

2.定义训练函数

训练函数接受训练数据集和学习率作为输入,输出训练好的模型参数。

def train(self, X, y, learning_rate):
    for i in range(len(X)):
        x = X[i]
        y_ = self.predict(x)
        error = y[i] - y_
        self.weights += learning_rate * error * x
        self.bias += learning_rate * error

3.定义预测函数

预测函数接受输入向量作为输入,输出预测结果。

def predict(self, x):
    y_ = np.dot(self.weights, x) + self.bias
    return activation_function(y_)

4.定义训练循环

训练循环是训练函数的封装。循环次数可以自定义,当所有样本均正确分类时退出循环。

def fit(self, X, y, learning_rate=0.1, epochs=10):
    for epoch in range(epochs):
        for i in range(len(X)):
            x = X[i]
            y_ = self.predict(x)
            error = y[i] - y_
            self.weights += learning_rate * error * x
            self.bias += learning_rate * error
        if sum([int(self.predict(X[i])==y[i]) for i in range(len(X))])==len(X):
            break

三、预测函数

预测函数接受输入向量作为输入,输出预测结果。

def predict(self, x):
    y_ = np.dot(self.weights, x) + self.bias
    return activation_function(y_)

四、完整代码

import numpy as np
import random

class Perceptron:
    def __init__(self):
        self.weights = np.array([0.0,0.0])
        self.bias = 0.0
        
    def fit(self, X, y, learning_rate=0.1, epochs=10):
        for epoch in range(epochs):
            for i in range(len(X)):
                x = X[i]
                y_ = self.predict(x)
                error = y[i] - y_
                self.weights += learning_rate * error * x
                self.bias += learning_rate * error
            if sum([int(self.predict(X[i])==y[i]) for i in range(len(X))])==len(X):
                break
                
    def predict(self, x):
        y_ = np.dot(self.weights, x) + self.bias
        return activation_function(y_)
    
def activation_function(x):
    return 1 if x>=0 else -1

以上是感知机的Python实现。代码中使用了numpy、random等常用Python库,并对每个函数进行详细的注释。使用上述代码可以构建一个简单的感知机模型,用于解决二元分类问题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。