圖文詳解感知機算法原理及Python實現(xiàn)
寫在前面
機器學習強基計劃聚焦深度和廣度,加深對機器學習模型的理解與應(yīng)用。“深”在詳細推導算法模型背后的數(shù)學原理;“廣”在分析多個機器學習模型:決策樹、支持向量機、貝葉斯與馬爾科夫決策、強化學習等。
本期目標:實現(xiàn)這樣一個效果
1.什么是線性模型
線性模型的假設(shè)形式是屬性權(quán)重、偏置與屬性的線性組合,即
稱為廣義線性模型(generalized linear model),其中g(shù)(⋅)稱為聯(lián)系函數(shù)(link function)。
廣義線性模型本質(zhì)上仍是線性的,但通過g(⋅)進行非線性映射,使之具有更強的擬合能力,類似神經(jīng)元的激活函數(shù)。例如對數(shù)線性回歸(log-linear regression)是g(⋅)=ln(⋅)時的情形,此時模型擁有了指數(shù)逼近的性質(zhì)。
線性模型的優(yōu)點是形式簡單、易于建模、可解釋性強,是更復雜非線性模型的基礎(chǔ)。
2.感知機概述
感知機(Perceptron)是最簡單的二分類線性模型,也是神經(jīng)網(wǎng)絡(luò)的起源算法,如圖所示。
y=w^Tx^是 Rd空間的一條直線,因此感知機實質(zhì)上是通過訓練參數(shù)w^改變直線位置,直至將訓練集分類完全,如圖所示,或者參考文章開頭的動圖。
3.手推感知機原理
機器學習強基計劃的初衷就是搞清楚每個算法、每個模型的數(shù)學原理,讓我們開始吧!
感知機的損失函數(shù)定義為全體誤分類點到感知機切割超平面的距離之和:
對于二分類問題y∈{−1,1},則誤分類點的判斷方法為
這在二分類問題中是個很常用的技巧,后面還會遇到這種等效形式。
從而損失函數(shù)也可簡化為下面的形式以便于求導:
方程兩邊同時乘以系數(shù)都成立,所以直線系數(shù) w^可以隨意縮放,這里可令|w^|=1
若采用梯度下降法進行優(yōu)化(梯度法可參考圖文詳解梯度下降算法的原理及Python實現(xiàn)),則算法流程為:
4.Python實現(xiàn)
4.1 創(chuàng)建感知機類
class Perceptron: def __init__(self): self.w = np.mat([0,0]) # 初始化權(quán)重 self.b = 0 # 初始化偏置 self.delta = 1 # 設(shè)置學習率為1 self.train_set = [[np.mat([3, 3]), 1], [np.mat([4, 3]), 1], [np.mat([1, 1]), -1]] # 設(shè)置訓練集 self.history = [] # 訓練歷史
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 判斷誤分類點
def judge(self,point): return point[1]*(self.w*point[0].T+self.b)
4.4 訓練感知機
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 動圖可視化
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é)
感知機最大的缺陷在于其線性,單個感知機只能表達一條直線,即使是如圖(a)所示簡單的異或門樣本,都無法進行分類。對此有兩種解決方式:
通過多條直線,即多層感知機(Multi-Layer Perceptron, MLP)進行分類,如圖(b)所示;在線性加權(quán)的基礎(chǔ)上引入非線性變換,如圖(c)所示。
到此這篇關(guān)于圖文詳解感知機算法原理及Python實現(xiàn)的文章就介紹到這了,更多相關(guān)Python感知機算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+OpenCV實戰(zhàn)之拖拽虛擬方塊的實現(xiàn)
這篇文章主要介紹了如何利用Python+OpenCV實現(xiàn)拖拽虛擬方塊的效果,即根據(jù)手指坐標位置和矩形的坐標位置,判斷手指點是否在矩形上,如果在則矩形跟隨手指移動,感興趣的可以了解一下2022-08-08解決python多線程報錯:AttributeError: Can''t pickle local object問題
這篇文章主要介紹了解決python多線程報錯:AttributeError: Can't pickle local object問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python?subprocess.Popen?實時輸出?stdout的解決方法(正確管道寫法)
這篇文章主要介紹了Python?subprocess.Popen實時輸出stdout正確管道寫法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07