感知器演算法的基本原理和步驟 感知器演算法

2021-10-11 02:25:13 字數 2525 閱讀 1718

沒什麼好說的,湊個字數。
感知器演算法是最簡單的線性回歸演算法。

文中提到了感知器演算法的基本模型,然後提到了梯度下降演算法和感知器的聯合使用( 例子1 ),以及感知器的對偶形式( 例子2 )。這裡提出一點,例子 1 其實本質上就是例子 2。只不過對於計算機而言,例子 2 的計算要相對簡單一點。

懶惰如我,已經靠白嫖別人的文章來省去了對基礎感知機模型的講解。現在我們來看看本篇文章的主要內容結構。

感知機是最簡單的線性分類演算法,其本質思想就是:錯了就改。

但是感知機演算法有乙個強前提條件——資料必須是線性可分的。這意味著,如果我們無法保證樣本是線性可分的,那麼根據感知機演算法執行的電腦程式可能會永遠找不到合適的劃分邊界,陷入無限迭代之中。

為此,學術界有人提出了「口袋演算法」。我現在用最形象的語句來描述一下口袋演算法的基本步驟:

1、執行感知器演算法,將假定的劃分平面放入「口袋」儲存起來。

2、對劃分平面執行最優化演算法( 例如,梯度下降 ),並得到新的劃分平面與「口袋」裡的劃分平面進行比較。將劃分效果比較好的劃分平面放入「口袋」儲存起來,取代原來儲存在「口袋」中的劃分平面。

3、重複步驟 2

4、重複步驟 2

n、重複步驟 2

這樣的話,我們的「口袋」中就始終擁有目前我們所見到的最優的劃分平面,這就是「口袋演算法」。值得注意的是,為了防止步驟 2 無限重複,我們必須預先規定乙個值 k,當迭代次數超過 k 時,演算法將會停止執行。

那麼如何將劃分平面放入口袋中呢?根據劃分平面的基本形式

,我們知道,只要我們儲存好

和 的值就可以了。

挺簡單吧,只要你能實現最基本的感知器演算法,你就可以實現口袋演算法。

熟話說,三個臭皮匠,頂個諸葛亮。如果我們很多個臭皮匠,那不是比諸葛亮還厲害了嗎?

光說不幹,不是好漢!現在監獄裡有一堆嫌疑犯,我必須想出一種法子將有罪的人和無罪的人區分開來。為了更好地劃分,我請了一堆法官來幫我劃分。

但是法官的技術有高低,有的法官經常犯錯,有的法官處事英明。這可以理解,人之常情嘛。但是這嫌疑犯要是甄別錯了,那可不行。所以我必須想出一種方法探探這些法官的虛實。

我先是找來一堆已經甄別好的嫌疑犯,然後安排每位法官都單獨對這堆人進行一次甄別。每位法官都攜帶乙個計分表,相應的法官每劃分正確一次,就在計分表上加一分。當每位法官都進行過這樣的測試之後,得分最高的法官就是能力最強的法官了。那麼當甄別那些未知身份的嫌疑犯時,得分更高的法官將具有更高的話語權。

為了防止單次測試導致的誤差,我可以讓每個人都進行多次這樣的測試,再將結果得分取平均值。這樣,最終的結果就可以更好地體現法官的水平。那麼在實際甄別新嫌疑犯時,我可以讓法官們投票表決,然後根據法官們的投票以及其自身的話語權將嫌疑犯們分類,從而得到最好的甄別率。

看到這裡,有的讀者可能會說了:

md,看了這麼久,不就是乙個整合演算法的思想運用在感知機上嗎?你長這麼帥,為什麼不寫簡短點?
我是真的不想吐槽你們某些人,我難得勤快一次,你們還不知道珍惜。要不是我在網上找不到相應的演算法教程,我早就直接貼個鏈結完事了。( 與空氣對罵 ing )

那麼,表決感知機就是這麼乙個類似的過程了。注意這裡的「表決」,就和上面所提到的「投票」是乙個東西。

我們現在假定已知訓練集

。我們聘請了一系列法官

,這個括號現在看不懂沒關係,結合偽**就可以看懂了。

我們先對法官進行測試,**如下:

int k = 0, v1 = 0, c1 = 0;// k 表示當前是第幾位法官,v 表示相應的法官,c表示相應的法官分數

scanf (t , m);// t 表示每位法官重複測試 t,m 是資料集的數量

while ( t-- )

}

測試完了法官後,我們就可以進行甄別了。假設我們現在要甄別嫌疑犯

,則**如下:

for i = 1 to k

yn = sign( s );// 得出最終甄別結果

我好累,繼續下乙個演算法吧。

假設現在我們現在需要將乙個已經劃分好的資料集的判別平面進行改善,使得資料集中的每乙個特徵資料到達判別平面的距離不會小於某一值。

你可能會因此想到支援向量機,但我們現在打算討論另外乙個類似的演算法——帶邊緣感知機。帶邊緣感知機是普通感知機的擴充套件演算法,它通過人為的定義乙個邊界,使得資料集中的點到達這個判別平面的距離不會小於這個邊界到判別平面的距離。

我們現在定義乙個已經劃分好的資料集

,其中

。我們先人為定義一系列「邊緣引數」

的值,暫時不討論這些引數是怎麼來的。

執行演算法:

int

= 0,

= 0, t = 0, r = max( x );

for i = 1 to m

}

大概是這麼個演算法了。

還有很多我想寫感知機演算法還沒有寫,之後再寫,現在不急。

線性分類

ARA 演算法的基本原理

在介紹ara 演算法之前,有必要介紹一下weighted a 演算法,在最初的a 演算法中,f s 的計算方法為 f g h可以看出f s 是由個g s 和h s 兩項構成的,其中g s 是乙個後驗值,而h s 是乙個先驗值,這樣一種啟發式的搜尋方式本身為演算法本身節省了很多資源,去除了一些不必要點...

《統計學習方法》 感知器的原理和python實現

通俗的解釋就是,期望在給定的資料集中,找到乙個超平面,這個平面可以正確的分割開所有的資料類別。這裡有乙個假設,就是這個超平面是一定存在的,就是一定是有解可以把這些資料集完好的分開。這裡先不列舉數學公式,講一講通俗理解 就是先初始化乙個超平面,我認為這個超平面是分開了資料集,然後在利用資料集進行驗算,...

蟻群演算法的基本原理

蟻群演算法的基本原理 ackarlix 這種演算法有別於傳統程式設計模式,其優勢在於,避免了冗長的程式設計和籌畫,程式本身是基於一定規則的隨機執行來尋找最佳配置。也就是說,當程式最開始找到目標的時候,路徑幾乎不可能是最優的,甚至可能是包含了無數錯誤的選擇而極度冗長的。但是,程式可以通過螞蟻尋找食物的...