本文以單層感知器為案例,介紹從頭開始編寫任何機(jī)器學(xué)習(xí)算法的6個(gè)步驟。這些方法可以很容易地用于其他機(jī)器學(xué)習(xí)算法。
從頭開始編寫算法是一種有益的體驗(yàn),當(dāng)你最終點(diǎn)擊運(yùn)行的那一刻,你會(huì)了解算法背后真正發(fā)生了什么。
如果你以前用scikit-learn實(shí)現(xiàn)過(guò)這個(gè)算法,從頭開始編寫就會(huì)很容易?不是這樣。
有些算法只是比其他算法更復(fù)雜,所以可以從簡(jiǎn)單的開始,比如單層感知器(Perceptron)。
本文將以感知器為案例,引導(dǎo)你完成從頭開始編寫算法的6個(gè)步驟。這種方法可以很容易地用于編寫其他機(jī)器學(xué)習(xí)算法。
1. 對(duì)算法有一個(gè)基本的了解
這又回到了我最初所說(shuō)的。如果你不了解基礎(chǔ)知識(shí),請(qǐng)不要從頭開始處理算法。至少,你應(yīng)該能夠回答以下問(wèn)題:
它是什么?
它通常用于做什么?
什么時(shí)候不能使用它?
對(duì)于感知器,上面三個(gè)問(wèn)題的答案是:
單層感知器是最基本的神經(jīng)網(wǎng)絡(luò),通常用于二進(jìn)制分類問(wèn)題(1或0,“是”或“否”)。
它是一個(gè)線性分類器,因此只有在存在線性決策邊界的情況下才能有效使用。一些簡(jiǎn)單的用途可以是情緒分析(正面或負(fù)面反應(yīng))或貸款違約預(yù)測(cè)(“會(huì)違約”,“不會(huì)違約”)。對(duì)于這兩種情況,決策邊界都必須是線性的。
如果決策邊界是非線性的,那么你實(shí)際上無(wú)法使用感知器。對(duì)于這些問(wèn)題,需要使用其他算法。
2. 找到各種類型的學(xué)習(xí)資源
在對(duì)模型有了基本的了解之后,是時(shí)候開始進(jìn)行研究了。我建議使用大量資源。有些人用教科書學(xué)得更好,有些人用視頻學(xué)得更好。就我個(gè)人而言,我喜歡使用各種類型的資源。對(duì)于數(shù)學(xué)細(xì)節(jié),教科書的解釋很好,但對(duì)于更實(shí)際的例子,我更喜歡看博客文章和YouTube視頻。
對(duì)于感知器,這里有一些很棒的資源。
教材:
《統(tǒng)計(jì)學(xué)習(xí)基礎(chǔ)》,第4.5.1節(jié)
《深入理解機(jī)器學(xué)習(xí):從原理到算法》,第21.4節(jié)
博客:
JasonBrownlee的Machine Learning Mastery系列文章,其中一篇是《如何用Python從頭開始實(shí)現(xiàn)感知器算法》:
https://machinelearningmastery.com/implement-perceptron-algorithm-scratch-python/
SebastianRaschka的博客,Single-Layer Neural Networks and Gradient Descent
https://sebastianraschka.com/Articles/2015_singlelayer_neurons.html
視頻:
感知器訓(xùn)練:
https://www.youtube.com/watch?v=5g0TPrxKK6o
Perceptron算法的工作原理:
https://www.youtube.com/watch?v=1XkjVl-j8MM
3. 將算法分解為塊
現(xiàn)在,我們已經(jīng)收集了需要的資料,是時(shí)候開始學(xué)習(xí)了。與其從頭到尾閱讀書本或博客文章,不如先瀏覽一下章節(jié)標(biāo)題和其他重要信息。寫下要點(diǎn),并嘗試概述算法。
在瀏覽完這些資料后,我們可以將Perceptron算法分解為以下幾個(gè)塊(chunks):
初始化權(quán)重
將輸入乘以權(quán)重,并求和
將結(jié)果與閾值進(jìn)行比較,并計(jì)算輸出(1或0)
更新權(quán)重
重復(fù)這個(gè)過(guò)程
將算法分解成這樣的塊,可以使得學(xué)習(xí)更容易?;旧?,我已經(jīng)使用偽代碼概述了這個(gè)算法,現(xiàn)在可以回過(guò)頭來(lái)填寫細(xì)節(jié)了。 下面這張圖是第二步的筆記,即權(quán)重和輸入的點(diǎn)積:
4. 從一個(gè)簡(jiǎn)單的例子開始
在整理好算法相關(guān)的筆記后,是時(shí)候開始在代碼中實(shí)現(xiàn)它了。
在深入研究一個(gè)復(fù)雜的問(wèn)題之前,我想先從一個(gè)簡(jiǎn)單的例子開始。對(duì)于感知器,NAND gate(與非門)是一個(gè)完美的簡(jiǎn)單數(shù)據(jù)集。如果兩個(gè)輸入都為真(1),則輸出為假(0),否則輸出為真。下面是數(shù)據(jù)集的一個(gè)示例:
現(xiàn)在,有了一個(gè)簡(jiǎn)單的數(shù)據(jù)集,我將開始實(shí)現(xiàn)我在步驟3中概述的算法。最好將這個(gè)算法分成塊編寫并進(jìn)行測(cè)試,而不是試圖一次性寫完。這樣在剛開始時(shí)更容易調(diào)試。
下面是我在步驟3中概述的算法點(diǎn)積部分的Python代碼示例:
5. 使用可信的實(shí)現(xiàn)進(jìn)行驗(yàn)證
我們已經(jīng)編寫了代碼,并針對(duì)一個(gè)小數(shù)據(jù)集進(jìn)行了測(cè)試,現(xiàn)在是時(shí)候擴(kuò)展到更大的數(shù)據(jù)集了。為了確保我們的代碼在這個(gè)更復(fù)雜的數(shù)據(jù)集上正確工作,最好在一個(gè)可信的實(shí)現(xiàn)上對(duì)其進(jìn)行測(cè)試。對(duì)于感知器,我們可以使用scikit-learn中的實(shí)現(xiàn)。
為了測(cè)試代碼,我將檢查權(quán)重。如果正確地實(shí)現(xiàn)了算法,我的權(quán)重應(yīng)該與scikit-learn中感知器的權(quán)重相匹配。
一開始,我沒(méi)有得到相同的權(quán)重,這是因?yàn)槲也坏貌徽{(diào)整scikit-learn Perceptron中的默認(rèn)設(shè)置。我并不是每次都實(shí)現(xiàn)一個(gè)新的隨機(jī)狀態(tài),而只是一個(gè)fixed seed,所以不得不關(guān)閉它。shuffling也是這樣,也需要關(guān)閉它。為了匹配學(xué)習(xí)率,我將eta0改為0.1。最后,我關(guān)閉了fit_intercept選項(xiàng)。我在特征數(shù)據(jù)集中包含了一個(gè)1的虛擬列,所以已經(jīng)自動(dòng)擬合了偏差項(xiàng)。
這引出了另一個(gè)重要的問(wèn)題。在驗(yàn)證模型的現(xiàn)有實(shí)現(xiàn)時(shí),你需要非常清楚模型的輸入。你不應(yīng)盲目地使用模型,而要總是質(zhì)疑你的假設(shè),以及每個(gè)輸入的確切含義。
6. 寫下你的過(guò)程
這個(gè)過(guò)程的最后一步可能是最重要的。 你已經(jīng)完成所有的學(xué)習(xí)工作,做了筆記,從頭開始編寫了算法,并將它與可信的實(shí)現(xiàn)進(jìn)行了比較。那么不要讓所有這些工作白白浪費(fèi)掉。編寫流程非常重要,原因是:
你會(huì)得到更深刻的理解,因?yàn)檫@樣做相當(dāng)于在教別人你剛學(xué)到的東西。你可以向潛在的雇主展示它。證明你可以利用機(jī)器學(xué)習(xí)庫(kù)實(shí)現(xiàn)算法是一回事,但如果你可以從頭開始實(shí)現(xiàn)一個(gè)算法,那就更令人印象深刻了。
結(jié)論
從頭開始編寫算法是一種非常有益的體驗(yàn)。這是深入了解模型、構(gòu)建一個(gè)令人印象深刻的項(xiàng)目組合的好方法。
記得要慢慢來(lái),從簡(jiǎn)單的事情開始吧。最重要的是,一定要記錄和分享你的工作。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4819瀏覽量
106054 -
算法
+關(guān)注
關(guān)注
23文章
4739瀏覽量
96718 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8528瀏覽量
135861
原文標(biāo)題:只需6步,從頭開始編寫機(jī)器學(xué)習(xí)算法
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
經(jīng)典算法大全(51個(gè)C語(yǔ)言算法+單片機(jī)常用算法+機(jī)器學(xué)十大算法)
MikroElektronika的mikroBUS Click板是否從頭開始的制作?
如何使用和聲從頭開始設(shè)置HTTP服務(wù)?
ARM嵌入式系統(tǒng)設(shè)計(jì):從頭開始構(gòu)建還是使用SBC?
Excel本身就能編寫大量基礎(chǔ)機(jī)器學(xué)習(xí)算法

如果要從事機(jī)器學(xué)習(xí)方面的研發(fā),可以按照以下幾個(gè)步驟學(xué)習(xí)
人工智能正在學(xué)習(xí)量子力學(xué)以此來(lái)設(shè)計(jì)新分子
TensorFlow Quantum將允許用戶編寫Quantum應(yīng)用程序
從頭開始構(gòu)建無(wú)人機(jī)

PyTorch教程3.4之從頭開始執(zhí)行線性回歸

PyTorch教程4.4之從頭開始實(shí)現(xiàn)Softmax回歸

PyTorch教程-3.4. 從頭開始執(zhí)行線性回歸
在Spartan 6 FPGA上從頭開始實(shí)現(xiàn)全加器

評(píng)論