欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

圖文詳解感知機(jī)算法原理及Python實(shí)現(xiàn)

 更新時(shí)間:2022年08月03日 09:55:24   作者:Mr.Winter`  
感知機(jī)是二類分類的線性分類模型,其輸入為實(shí)例的特征向量,輸出為實(shí)例的類別(取+1和-1二值)。本文將為大家詳細(xì)講講感知機(jī)算法的原理及實(shí)現(xiàn),需要的可以參考一下

寫在前面

機(jī)器學(xué)習(xí)強(qiáng)基計(jì)劃聚焦深度和廣度,加深對(duì)機(jī)器學(xué)習(xí)模型的理解與應(yīng)用。“深”在詳細(xì)推導(dǎo)算法模型背后的數(shù)學(xué)原理;“廣”在分析多個(gè)機(jī)器學(xué)習(xí)模型:決策樹、支持向量機(jī)、貝葉斯與馬爾科夫決策、強(qiáng)化學(xué)習(xí)等。

本期目標(biāo):實(shí)現(xiàn)這樣一個(gè)效果

1.什么是線性模型

線性模型的假設(shè)形式是屬性權(quán)重、偏置與屬性的線性組合,即

稱為廣義線性模型(generalized linear model),其中g(shù)(⋅)稱為聯(lián)系函數(shù)(link function)。

廣義線性模型本質(zhì)上仍是線性的,但通過g(⋅)進(jìn)行非線性映射,使之具有更強(qiáng)的擬合能力,類似神經(jīng)元的激活函數(shù)。例如對(duì)數(shù)線性回歸(log-linear regression)是g(⋅)=ln(⋅)時(shí)的情形,此時(shí)模型擁有了指數(shù)逼近的性質(zhì)。

線性模型的優(yōu)點(diǎn)是形式簡(jiǎn)單、易于建模、可解釋性強(qiáng),是更復(fù)雜非線性模型的基礎(chǔ)。

2.感知機(jī)概述

感知機(jī)(Perceptron)是最簡(jiǎn)單的二分類線性模型,也是神經(jīng)網(wǎng)絡(luò)的起源算法,如圖所示。

y=w^Tx^是 Rd空間的一條直線,因此感知機(jī)實(shí)質(zhì)上是通過訓(xùn)練參數(shù)w^改變直線位置,直至將訓(xùn)練集分類完全,如圖所示,或者參考文章開頭的動(dòng)圖。

3.手推感知機(jī)原理

機(jī)器學(xué)習(xí)強(qiáng)基計(jì)劃的初衷就是搞清楚每個(gè)算法、每個(gè)模型的數(shù)學(xué)原理,讓我們開始吧!

感知機(jī)的損失函數(shù)定義為全體誤分類點(diǎn)到感知機(jī)切割超平面的距離之和:

對(duì)于二分類問題y∈{−1,1},則誤分類點(diǎn)的判斷方法為

這在二分類問題中是個(gè)很常用的技巧,后面還會(huì)遇到這種等效形式。

從而損失函數(shù)也可簡(jiǎn)化為下面的形式以便于求導(dǎo):

方程兩邊同時(shí)乘以系數(shù)都成立,所以直線系數(shù) w^可以隨意縮放,這里可令|w^|=1

若采用梯度下降法進(jìn)行優(yōu)化(梯度法可參考圖文詳解梯度下降算法的原理及Python實(shí)現(xiàn)),則算法流程為:

4.Python實(shí)現(xiàn)

4.1 創(chuàng)建感知機(jī)類

class Perceptron:
    def __init__(self):
        self.w = np.mat([0,0])                                    # 初始化權(quán)重
        self.b = 0                                                  # 初始化偏置
        self.delta = 1                                              # 設(shè)置學(xué)習(xí)率為1
        self.train_set =  [[np.mat([3, 3]), 1], [np.mat([4, 3]), 1], [np.mat([1, 1]), -1]]  # 設(shè)置訓(xùn)練集
        self.history = []                                           # 訓(xùn)練歷史

4.2 更新權(quán)重與偏置

def update(self,error_point):
        self.w += self.delta*error_point[1]*error_point[0]
        self.b += self.delta*error_point[1]
        self.history.append([self.w.tolist()[0],self.b])

4.3 判斷誤分類點(diǎn)

def judge(self,point):
        return point[1]*(self.w*point[0].T+self.b)

4.4 訓(xùn)練感知機(jī)

def train(self):       
     flag = True
     while(flag):
         count = 0
         for point in self.train_set:
             if(self.judge(point)<=0):
                 self.update(point)
             else:
                 count += 1
         if(count == len(self.train_set)):
             flag = False

4.5 動(dòng)圖可視化

def show():
        print("參數(shù)w,b更新過程:",perceptron.history)
        anim = animation.FuncAnimation(fig, animate, init_func=init, frames=len(perceptron.history), 
                                        interval=1000, repeat=False,blit=True)
        plt.show()

5.總結(jié)

感知機(jī)最大的缺陷在于其線性,單個(gè)感知機(jī)只能表達(dá)一條直線,即使是如圖(a)所示簡(jiǎn)單的異或門樣本,都無法進(jìn)行分類。對(duì)此有兩種解決方式:

通過多條直線,即多層感知機(jī)(Multi-Layer Perceptron, MLP)進(jìn)行分類,如圖(b)所示;在線性加權(quán)的基礎(chǔ)上引入非線性變換,如圖(c)所示。

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

相關(guān)文章

  • Python中os和shutil模塊實(shí)用方法集錦

    Python中os和shutil模塊實(shí)用方法集錦

    這篇文章主要介紹了Python中os和shutil模塊實(shí)用方法集錦,需要的朋友可以參考下
    2014-05-05
  • Python+OpenCV實(shí)戰(zhàn)之拖拽虛擬方塊的實(shí)現(xiàn)

    Python+OpenCV實(shí)戰(zhàn)之拖拽虛擬方塊的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用Python+OpenCV實(shí)現(xiàn)拖拽虛擬方塊的效果,即根據(jù)手指坐標(biāo)位置和矩形的坐標(biāo)位置,判斷手指點(diǎn)是否在矩形上,如果在則矩形跟隨手指移動(dòng),感興趣的可以了解一下
    2022-08-08
  • python實(shí)現(xiàn)屏保程序(適用于背單詞)

    python實(shí)現(xiàn)屏保程序(適用于背單詞)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)屏保程序,適用于背單詞,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 解決python多線程報(bào)錯(cuò):AttributeError: Can''t pickle local object問題

    解決python多線程報(bào)錯(cuò):AttributeError: Can''t pickle local object問題

    這篇文章主要介紹了解決python多線程報(bào)錯(cuò):AttributeError: Can't pickle local object問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python入門教程(十四)Python的集合

    Python入門教程(十四)Python的集合

    這篇文章主要介紹了Python入門教程(十四)Python的集合,Python是一門非常強(qiáng)大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • python 讀取以空格分開的文件操作

    python 讀取以空格分開的文件操作

    這篇文章主要介紹了python 讀取以空格分開的文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Python?Flask?模型介紹和配置方法

    Python?Flask?模型介紹和配置方法

    flask是基于MTV的結(jié)構(gòu),其中M指的就是模型,即數(shù)據(jù)模型,在項(xiàng)目中對(duì)應(yīng)的是數(shù)據(jù)庫(kù),下面紀(jì)錄以mysql和orm方式連接數(shù)據(jù)庫(kù)的方法,對(duì)Python?Flask?模型介紹和配置方法感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • Python?subprocess.Popen?實(shí)時(shí)輸出?stdout的解決方法(正確管道寫法)

    Python?subprocess.Popen?實(shí)時(shí)輸出?stdout的解決方法(正確管道寫法)

    這篇文章主要介紹了Python?subprocess.Popen實(shí)時(shí)輸出stdout正確管道寫法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Python實(shí)現(xiàn)繪制凸包的示例代碼

    Python實(shí)現(xiàn)繪制凸包的示例代碼

    凸包(Convex Hull)是一個(gè)計(jì)算幾何(圖形學(xué))中的概念。這篇文章主要為大家詳細(xì)介紹了Python繪制凸包的示例代碼,感興趣的小伙伴可以了解一下
    2023-05-05
  • Python的os包與os.path模塊的用法詳情

    Python的os包與os.path模塊的用法詳情

    這篇文章主要介紹了Python的os包與os.path模塊,主要介紹os常用方法和os.path?常用方法展開相關(guān)資料,需要的小伙伴可以參考一下,希望對(duì)你的工作或?qū)W習(xí)有所幫助
    2022-03-03

最新評(píng)論