自己從頭寫乙個演算法,不僅能給你帶來成就感,也能幫你真正理解演算法的原理。可能你之前用 scikit-learn 實現過演算法,但是從零開始寫個演算法簡單嗎?絕對不簡單。
有些演算法要比其它演算法複雜的多,所以在寫演算法時可以先從簡單的開始,比如單層的感知機。
下面就介紹機器學家 john sullivan 總結出的 6 個步驟,以感知機演算法為例,教你從頭開始寫出乙個機器學習演算法。文中的方**同樣能應用到其它機器學習演算法上。這 6 個步驟是:
對演算法有個基本的了解
如果你不了解演算法的基本知識,先不要嘗試從頭寫演算法。至少。你應該能回答以下問題:
以感知機為例,我們試著回答這些問題:
單層感知機是最簡單的神經網路,通常用於二元分類問題(1或0,「是」或「否」)。
它相當於乙個二元分類器,所以只有出現線性決策邊界時才會用到它。還有些簡單的用途,比如情感分析(正面或負面回應)或貸款違約**(會違約,不會違約)。在這兩類用途中,決策邊界都需要是線性的。
如果決策邊界是非線性的,那麼就不能使用感知機。對於這類問題,需要使用其它演算法。
尋找一些學習資源
《統計學習精要》:
web.stanford.edu/~hastie/pap…
《understanding machine learning: from theory to algorithms》:
www.cs.huji.ac.il/~shais/unde…
john brownslee 寫的這篇《用 python 從頭實現感知機演算法》:
sebastian raschka 的部落格《單層神經網路與梯度下降》:
感知機演算法訓練:
感知機演算法工作原理:
把演算法拆成幾部分
等收集好資源後,就開始學習了。首先準備好紙筆,我們不是通讀整個章節或整篇部落格,而是略讀章節標題和其它一些重要資訊。寫下內容要點,試著概述演算法。
在看完學習資料後,我們將感知機演算法拆成以下幾個部分:
像這樣將演算法拆成幾個部分,學起來會更容易。基本上我們先以偽**概述演算法,再回頭填補細節。下圖是第二步時john sullivan所做的筆記,即權重和輸入的點積:
以乙個簡單的例子開始
整理好演算法的筆記後,開始用**實現。在深入研究乙個複雜的問題之前,建議先從乙個簡單的例子開始。對於感知機來說,與非門(nand gate)是乙個完美的簡單資料集。如果兩個輸入都為真(1)則輸出為假(0),否則輸出為真。以下是資料集的示例:
現在使用乙個簡單的資料集,開始實現我們在步驟 3 中概述的演算法。最好以塊的方式寫演算法,並進行測試,不要試圖一次性寫完。這樣你在剛開始時更容易除錯。當然最後可以回去整理一下,使**看起來更整潔一些。
下面是在第 3 步中演算法的點積部分的 python **:
使用可靠的實現進行驗證
等寫完**並用小資料集測試以後,接下來嘗試較大的資料集。為了確保**能在更複雜的資料集上正確執行,最好用可靠的實現進行測試。對於感知機來說,我們可以用 scikit-learn 中的實現。
測試**時需要檢視權重。如果正確地實現了演算法,權重應該與 scikit-learn 感知機的權重相匹配。
如果最開始沒有得到相同的權重,那麼就需要調整 scikit-learn 感知機中的預設設定。如果每次都實現乙個新的隨機狀態,只是乙個固定的種子,那麼就必須關閉它。在 jason sullivan 自己的實踐操作中,為了匹配學習率,他將 eta0 改為 0.1。最後,他關閉了 fit_intercept 選項,在特徵資料集中包含了乙個 1 的虛擬列,所以已經自動擬合了截距(也就是偏置項)。
這就給我們乙個很重要的啟示。在驗證模型的現有實現時,你需要非常了解模型的輸入。永遠不應盲目地使用模型,要始終對你的假設以及每個輸入的確切含義保持懷疑。
整理出寫演算法的過程
隨著你向別人展示自己所學的東西,你會對演算法有更深入的理解;
可以作為一項成果,展示給潛在的雇主,作為求職的加分項。使用機器學習庫實現乙個演算法是一回事,自己從頭開始寫出乙個演算法是另一回事,而後者給人留下的印象更深刻。
以上就是從頭開始實現乙個機器學習演算法的 6 個步驟,剛開始最好先從簡單的演算法開始,熟練這套方**後再擴充套件到其它更複雜的演算法上。
機器學習 感知機演算法
感知機 perception 是一種二類線性模型,主要用於分類問題。目標函式 f x sgn w x b 其中sgn為符號函式 其中向量w為目標函式向量,向量x為樣本。向量w 向量x 超平面 w x b 0 所構成的平面 向量w為超平面上的法向量。訓練集 t x1,y1 x2,y2 x3,y3 xn...
機器學習演算法 感知機
今天把感知機的演算法用python實現了一下。主要依據的演算法流程是 統計學習方法 中關於感知機的演算法過程,具體如下。隨機生成訓練資料,測試資料也可同樣方法生成 m 樣本的個數 n 每個樣本具有的特徵維數 y 1 x np.random.random m,n x2 np.random.random...
機器學習演算法實現(1) 感知機
演算法實現 import pandas as pd import numpy as np from sklearn.datasets import load iris import matplotlib.pyplot as plt iris load iris df pd.dataframe iri...