您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:详解如何用Python实现感知器算法

51自学网 2021-10-30 22:27:27
  python
这篇教程详解如何用Python实现感知器算法写得很实用,希望能帮到您。

一、题目

在这里插入图片描述

二、数学求解过程

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

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

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

在这里插入图片描述

四、python代码实现及结果

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

在这里插入图片描述

(2)程序运行结果

在这里插入图片描述

(3)绘图结果

在这里插入图片描述

'''20210610 Julyer 感知器'''import numpy as npimport matplotlib.pyplot as pltdef 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_listdef 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实现感知器算法内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


python如何正确的操作字符串
python自动计算图像数据集的RGB均值
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。