濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 詳解如何用Python實(shí)現(xiàn)感知器算法

詳解如何用Python實(shí)現(xiàn)感知器算法

熱門標(biāo)簽:百度地圖標(biāo)注位置怎么修改 老人電話機(jī)器人 地圖標(biāo)注視頻廣告 梅州外呼業(yè)務(wù)系統(tǒng) 北京電信外呼系統(tǒng)靠譜嗎 高德地圖標(biāo)注是免費(fèi)的嗎 無(wú)錫客服外呼系統(tǒng)一般多少錢 洪澤縣地圖標(biāo)注 大連crm外呼系統(tǒng)

一、題目

二、數(shù)學(xué)求解過(guò)程



該輪迭代分類結(jié)果全部正確,判別函數(shù)為g(x)=-2x1+1

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

四、python代碼實(shí)現(xiàn)及結(jié)果

(1)由數(shù)學(xué)求解過(guò)程可知:

(2)程序運(yùn)行結(jié)果

(3)繪圖結(jié)果

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

def get_zgxl(xn, a):
    '''
    獲取增廣向量
    :param x: 數(shù)組
    :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和初始值,計(jì)算w
    :param w: 列向量 --> wT:行向量
    :param xn: 列向量
    :return:
    '''
    # wT = w.reshape(1, -1)  # 列向量轉(zhuǎn)變?yōu)樾邢蛄浚淖僿
    wT = w.T   # 列向量轉(zhuǎn)變?yōu)樾邢蛄?,不改變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為一個(gè)數(shù)


def fit_one(w1, x1, x2, x3, x4):
    '''
    完成一輪迭代,遍歷一次數(shù)據(jù),更新到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計(jì)算樣本個(gè)數(shù),通過(guò)循環(huán)更新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('迭代次數(shù)為:' + str(iter_number))
    print('迭代終止時(shí)的w:'+'\n' + str(update_w))
    #print(wTx_list)
    draw_plot(class1, class2, update_w)

到此這篇關(guān)于詳解如何用Python實(shí)現(xiàn)感知器算法的文章就介紹到這了,更多相關(guān)Python實(shí)現(xiàn)感知器算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 基于 Python 實(shí)踐感知器分類算法
  • python實(shí)現(xiàn)感知器算法(批處理)
  • python實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)感知器算法
  • python實(shí)現(xiàn)感知器算法詳解

標(biāo)簽:安慶 長(zhǎng)春 吉林 清遠(yuǎn) 岳陽(yáng) 怒江 洛陽(yáng) 泉州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解如何用Python實(shí)現(xiàn)感知器算法》,本文關(guān)鍵詞  詳解,如,何用,Python,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解如何用Python實(shí)現(xiàn)感知器算法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解如何用Python實(shí)現(xiàn)感知器算法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    长兴县| 施甸县| 柞水县| 华坪县| 古交市| 夏邑县| 巴塘县| 黄山市| 象山县| 邮箱| 商丘市| 铁岭县| 江川县| 深水埗区| 祁连县| 专栏| 新宁县| 奉新县| 富阳市| 毕节市| 拉孜县| 华坪县| 武川县| 沽源县| 疏附县| 搜索| 塘沽区| 新闻| 焉耆| 长岭县| 托里县| 建宁县| 盈江县| 沛县| 张家港市| 苏尼特右旗| 于都县| 谢通门县| 临洮县| 徐水县| 大足县|