iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解如何用Python实现感知器算法
  • 479
分享到

详解如何用Python实现感知器算法

2024-04-02 19:04:59 479人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、题目二、数学求解过程三、感知器算法原理及步骤四、python代码实现及结果一、题目 二、数学求解过程 该轮迭代分类结果全部正确,判别函数为g(x)=-2x1+1 三、

一、题目

在这里插入图片描述

二、数学求解过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

该轮迭代分类结果全部正确,判别函数为g(x)=-2x1+1

三、感知器算法原理及步骤

在这里插入图片描述

四、Python代码实现及结果

(1)由数学求解过程可知:

在这里插入图片描述

(2)程序运行结果

在这里插入图片描述

(3)绘图结果

在这里插入图片描述


'''
20210610 Julyer 感知器
'''
import numpy as np
import matplotlib.pyplot as plt

def get_zgxl(xn, a):
    '''
    获取增广向量
    :param x: 数组
    :param a: 1或-1
    :return:
    '''
    temp = []
    if a == 1:
        xn.append(1)
    if a == -1:
        for i in range(len(xn)):
            temp.append(xn[i]*(-1))
        temp.append(-1)
        xn = temp
    # print('xn:'+ str(np.array(x).reshape(-1, 1)))
    return np.array(xn).reshape(-1, 1)

def calculate_w(w, xn):
    '''
    已知xn和初始值,计算w
    :param w: 列向量 --> wT:行向量
    :param xn: 列向量
    :return:
    '''
    # wT = w.reshape(1, -1)  # 列向量转变为行向量,改变w
    wT = w.T   # 列向量转变为行向量,不改变w
    wTx = np.dot(wT, xn).reshape(-1)  # 行向量乘以列向量, 维度降为1。
    #wTx = wT@xn  # 行向量乘以列向量
    if wTx > 0:
        w_value = w
    else:
        w_value = np.add(w, xn)

    # print("w_update的shape" + str(w_update.shape))
    #print("wTx:" + str(wTx))
    return w_value, wTx     # w_value为列向量, wTx为一个数


def fit_one(w1, x1, x2, x3, x4):
    '''
    完成一轮迭代,遍历一次数据,更新到w5。
    :param w1: 初始值
    :param x1:
    :param x2:
    :param x3:
    :param x4:
    :return: 返回w5和wTx的列表。
    '''
    wTx_list = []
    update_w = w1

    for i in range(0, len(x_data)): #len计算样本个数,通过循环更新w
        update_w, wTx = calculate_w(update_w, x_data[i])
        wTx_list.append(wTx)

    #print(wTx_list)
    return update_w, wTx_list

def draw_plot(class1, class2, update_w):
    plt.figure()

    x_coordinate = []
    y_coordinate = []
    for i in range(len(class1)):
        x_coordinate.append(class1[i][0])
        y_coordinate.append(class1[i][1])
    plt.scatter(x_coordinate, y_coordinate, color='orange', label='class1')

    x_coordinate = []
    y_coordinate = []
    for i in range(len(class2)):
        x_coordinate.append(class2[i][0])
        y_coordinate.append(class2[i][1])
    plt.scatter(x_coordinate, y_coordinate, color='green', label='class2')

    w_reshape = update_w.reshape(-1)
    #print

    x = np.linspace(0, 2, 5)
    if w_reshape[1] == 0:
        plt.axvline(x = (-1) * w_reshape[2]/w_reshape[0])
    else:
        plt.plot(x, (x*w_reshape[0]*(-1) + w_reshape[2]*(-1))/w_reshape[1])

    plt.title('result of perception')
    plt.xlabel('x1')
    plt.ylabel('x2')
    plt.legend()
    plt.show()

if __name__ == '__main__':
    x1 = [0, 0]
    x2 = [0, 1]
    x3 = [1, 0]
    x4 = [1, 1]
    class1 = [x1, x2]
    class2 = [x3, x4]

    x1 = get_zgxl(x1, 1)
    x2 = get_zgxl(x2, 1)
    x3 = get_zgxl(x3, -1)
    x4 = get_zgxl(x4, -1)
    x_data = [x1, x2, x3, x4]
    # print(x_data)

    w1 = np.zeros((3, 1))  # 初始值w1为列向量
    #print('w1:' + str(w1) + '\n')

    update_w = w1
    update_w, wTx_list = fit_one(update_w, x1, x2, x3, x4)

    count = 0
    iter_number = 0

    for wTx in wTx_list:
        if wTx > 0:
            count += 1
        if count < 4:
            update_w, wTx_list = fit_one(update_w, x1, x2, x3, x4)
            iter_number += 1
        else:
            break

    print('迭代次数为:' + str(iter_number))
    print('迭代终止时的w:'+'\n' + str(update_w))
    #print(wTx_list)
    draw_plot(class1, class2, update_w)

到此这篇关于详解如何用Python实现感知器算法的文章就介绍到这了,更多相关Python实现感知器算法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解如何用Python实现感知器算法

本文链接: https://www.lsjlt.com/news/128542.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解如何用Python实现感知器算法
    目录一、题目二、数学求解过程三、感知器算法原理及步骤四、python代码实现及结果一、题目 二、数学求解过程 该轮迭代分类结果全部正确,判别函数为g(x)=-2x1+1 三、...
    99+
    2024-04-02
  • python如何实现感知器学习算法
    这篇文章主要介绍python如何实现感知器学习算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们将研究一种判别式分类方法,其中直接学习评估 g(x)所需的 w 参数。我们将使用感知器学习算法。感知器学习算法很容易...
    99+
    2023-06-29
  • JAVA实现感知器算法
    简述随着互联网的高速发展,A(AI)B(BigData)C(Cloud)已经成为当下的核心发展方向,假如三者深度结合的话,AI是其中最核心的部分。所以如果说在未来社会,每个人都必须要学会编程的话,那么对于程序员来说,人工智能则是他们所必须...
    99+
    2023-05-30
  • 图文详解感知机算法原理及Python实现
    目录写在前面1.什么是线性模型2.感知机概述3.手推感知机原理4.Python实现4.1 创建感知机类4.2 更新权重与偏置4.3 判断误分类点4.4 训练感知机4.5 动图可视化5...
    99+
    2024-04-02
  • Python中怎么实现一个感知器分类算法
    Python中怎么实现一个感知器分类算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。感知器算法Perceptron算法是两类(二进制)分类机器学习算法。它是一种神经网络模...
    99+
    2023-06-15
  • python离散建模之感知器学习算法
    我们将研究一种判别式分类方法,其中直接学习评估 g(x)所需的 w 参数。我们将使用感知器学习算法。感知器学习算法很容易实现,但为了节省时间,我在下面为您提供了一个实现。该函数有几个...
    99+
    2024-04-02
  • Python实现KPM算法详解
    目录知识点说明:一、要获取KPM算法的next[]数组二、KMP函数知识点说明: 先说前缀,和后缀吧 比如有一个串:abab 则在下标为3处的(前缀和后缀都要比下标出的长度小1,此处...
    99+
    2024-04-02
  • Python中怎么实现一个感知器
    这篇文章将为大家详细讲解有关Python中怎么实现一个感知器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是感知器生物神经元示意图感知器的概念类似于大脑基本处理单元神经元的工作原理。神经...
    99+
    2023-06-15
  • python如何实现常用的五种排序算法详解
    目录一、冒泡排序 二、选择排序 三、插入排序 四、希尔排序 五、快速排序 总结一、冒泡排序 原理: 比较相邻的元素。如果第一个比第二个大就交换他们两个 每一对相邻...
    99+
    2024-04-02
  • 详解Python AdaBoost算法的实现
    目录1. AdaBoost 算法简介2. AdaBoost算法 逻辑详解2.1 数据2.2 带权错误率2.3 损失函数 与 确定样本权重2.4 确定模型权重2.5 输出模型3.Ada...
    99+
    2024-04-02
  • KM算法详解及如何使用java实现
    今天就跟大家聊聊有关KM算法详解及如何使用java实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。匈牙利算法基本概念二分图:二分图又称为二部图.简单来说,如果图中点可以被分为两组,...
    99+
    2023-06-19
  • 详解Java如何实现FP-Growth算法
    FP-Growth算法的Java实现 这篇文章重点讲一下实现。需要两次扫描来构建FP树 第一次扫描 第一次扫描,过滤掉所有不满足最小支持度的项;对于满足最小支持度的项,按照全局支持...
    99+
    2024-04-02
  • 如何利用python实现Simhash算法
    目录1. 为什么需要Simhash2. 文章关键词特征提取算法TD-IDF3. Simhash原理4. Simhash的不足5. Simhash算法实现1. 为什么需要Simhash...
    99+
    2024-04-02
  • Python实现线性搜索算法详解
    线性搜索是最简单的搜索算法,从数据集的开头开始,检查每一项数据,直到找到匹配项,一旦找到目标,搜索结束。 线性搜索算法的缺点 需要注意的是线性搜索算法尽管简单,但不适用数据大的情况,由于算法将每个数据一一比较,所以数据越多,耗时越...
    99+
    2024-01-23
    算法的概念
  • python如何实现Simhash算法
    这篇文章主要介绍python如何实现Simhash算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、simhash步骤simhash包含分词、hash、加权、合并、降维五大步骤simhash代码如下:import...
    99+
    2023-06-29
  • Python实现聚类K-means算法详解
    目录手动实现sklearn库中的KMeansK-means(K均值)算法是最简单的一种聚类算法,它期望最小化平方误差 注:为避免运行时间过长,通常设置一个最大运行轮数或最小调整幅度...
    99+
    2024-04-02
  • Python如何实现KPM算法
    这篇文章主要介绍Python如何实现KPM算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!知识点说明:先说前缀,和后缀吧比如有一个串:abab则在下标为3处的(前缀和后缀都要比下标出的长度小1,此处下标为3出的长度...
    99+
    2023-06-21
  • Python使用Numpy实现Kmeans算法的步骤详解
    目录Kmeans聚类算法介绍:1.聚类概念:2.Kmeans算法:定义:大概步骤:Kmeans距离测定方式:3.如何确定最佳的k值(类别数):手肘法:python实现Kmeans算法...
    99+
    2024-04-02
  • 详解贝尔曼福特算法并用Python实现
    贝尔曼福特算法(Bellman Ford)可以找到从目标节点到加权图其他节点的最短路径。这一点和Dijkstra算法很相似,贝尔曼福特算法可以处理负权重的图,从实现来看也相对简单。 贝尔曼福特算法原理详解 贝尔曼福特算法通过高估从...
    99+
    2024-01-22
    算法的概念
  • Python基于DFA算法实现内容敏感词过滤
    DFA 算法是通过提前构造出一个 树状查找结构,之后根据输入在该树状结构中就可以进行非常高效的查找。 设我们有一个敏感词库,词酷中的词汇为: 我爱你我爱他我爱她我爱你呀我爱他呀我爱她...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作