丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給恒亮
發(fā)送

0

通過從零開始實現(xiàn)一個感知機模型,我學到了這些

本文作者: 恒亮 2017-03-13 17:02
導語:看到樣例中的代碼,你是直接復制粘貼?還是手動輸入?

雷鋒網(wǎng)按:本文源自作者 Jean-Nicholas Hould 的個人博客,他是一位來自加拿大蒙特利爾的數(shù)據(jù)科學家,具有豐富的研發(fā)和實踐經(jīng)驗。本文節(jié)選自作者個人的學習筆記,原文見文末鏈接,雷鋒網(wǎng)編譯。

對許多剛入門機器學習的開發(fā)者而言,許多參數(shù)和定義都顯得抽象、難以理解,可能許多人直到開始進入實際的項目研發(fā),都還沒能真正搞清楚這些參數(shù)和定義的確切含義。為此,我在這里故意避開 scikit-learn 等現(xiàn)成的算法工具,從零開始自己用 Python 實現(xiàn)了一個感知機二元分類器,一方面通過實際代碼深入認識了感知機的內(nèi)部原理和相關參數(shù)的具體含義,另一方面也總結了一些自己的研發(fā)心得,希望對各位初學者有所幫助。

  什么是二元分類器(Binary Classifier)?

通過從零開始實現(xiàn)一個感知機模型,我學到了這些

分類器是基于一組特征來確定輸入元素所在類別的機器學習算法。例如,分類器可以根據(jù)一些既定特征,預測一個啤酒的類別。這些特征可以是酒精含量、香氣和外觀等。更詳細一點,例如一個基于機器學習的分類器,根據(jù) 8% 的酒精含量、100 IBU (International Bitterness Unit,國際苦味指數(shù))和強烈橙子香味,就能判斷一種啤酒是不是 Indian Pale Ale 。

一般來說,機器學習可以分為三個主要的類型:無監(jiān)督學習,監(jiān)督學習和強化學習。分類器屬于監(jiān)督學習的范疇。所謂監(jiān)督學習就是我們提前知道待解問題的答案,即期望的輸出是已知的那些場景。例如在上述關于啤酒分類的例子中,我們完全可以想辦法得到一組描述啤酒各種特征和類別的數(shù)據(jù)集,然后基于這組數(shù)據(jù)對分類器展開訓練。

這里我將實現(xiàn)的是一個二元分類器,是所有分類器中最簡單的一種,其輸出結果只有兩種:0 或 1 ,對或錯。

  怎么搭建機器學習模型?

概括地說,要搭建和使用一個機器學習模型,一般分為如下四個步驟:

1. 預處理

2. 訓練

3. 評估

4. 預測

通過從零開始實現(xiàn)一個感知機模型,我學到了這些

預處理

預處理是構建機器學習模型的第一步,該步驟的主要工作是獲取數(shù)據(jù),并對數(shù)據(jù)進行必要的預處理,以備后續(xù)使用。包括去掉數(shù)據(jù)中的冗余、格式整理以及選定與數(shù)據(jù)相關的特征等。預處理中的常見工作包括:

從原始數(shù)據(jù)中提取特征

清理并格式化數(shù)據(jù)

刪除多余的特征(或高度相關的特征)

優(yōu)化特征數(shù)

標準化特征數(shù)據(jù)的范圍(也稱為特征縮放 Feature Scaling )

隨機拆分數(shù)據(jù)集:訓練數(shù)據(jù)集和測試數(shù)據(jù)集

訓練

準備好數(shù)據(jù)之后,下一步是為目標任務選擇一個合適的算法。在下面的二元分類器中,我們選擇的算法名為感知機(perceptron)。通常各種算法都有各自的優(yōu)缺點,要根據(jù)目標任務靈活選擇。

在這個步驟中,你可以先針對幾個不同算法展開測試,然后根據(jù)測試結果選擇性能最佳的算法。評估一個算法性能表現(xiàn)的方法有很多,在分類器場景中,一個最常用的方法是看分類精度(classification accuracy),即在所有輸入樣例中,正確分類的比例越高,算法就越優(yōu)秀。在這個步驟中,開發(fā)者需要調整選定算法的參數(shù),即所謂的超參數(shù)(Hyperparameters)過程。

本文將主要關注二元分類器的訓練過程,深入探討算法的內(nèi)在工作原理。如果你對機器學習流程中的其他步驟感興趣,可以通過文末鏈接閱讀更多其他內(nèi)容。

評估

當模型訓練完成之后,就可以通過訓練數(shù)據(jù)集之外的未知數(shù)據(jù)對模型展開評估。評估中一個非常重要的指標是泛化誤差(Generalization Error),即一個算法面對未知數(shù)據(jù)集的預測精度究竟怎樣。一旦你對評估結果滿意,就可以通過模型進行真正的預測了。

  實現(xiàn)感知機

下面開始搭建我們的分類器。這里我們選用的算法是感知機(perceptron),它是神經(jīng)網(wǎng)絡與支持向量機的基礎,是一種最簡單的二元分類器模型。Perceptron算法的思路雖然簡單,但功能強大,給定一個數(shù)據(jù)集,算法可以自動學習最佳權重系數(shù),然后乘以輸入特征,根據(jù)結果決定一個神經(jīng)元是否啟用。

下面我們根據(jù)具體代碼簡述感知機模型的基本實現(xiàn)流程。

首先,初始化一個權重等于零的數(shù)組,數(shù)組長度等于特征數(shù)加1。這里之所以加1,是為了存儲“閾值”(threshold)。這里需要注意的是,Perceptron算法要求特征必須是數(shù)字值。具體代碼如下:

self.w_ = np.zeros(1 + X.shape[1])

第二步,開始一個迭代次數(shù)為 n_iter 的循環(huán)。這是一個由數(shù)據(jù)科學家定義的超參數(shù)。具體代碼如下:

for _ in range(self.n_iter):

第三步,針對每個訓練數(shù)據(jù)和結果都開始一個循環(huán),這里的結果是指算法的最終期望輸出。由于我們搭建的是一個二元分類器,因此結果是 -1 或 1 兩種。

基于數(shù)據(jù)點的特征,算法將計算出最終結果:-1 或 1 。這里的預測方法具體是指特征與適當權重的矩陣乘積。在乘積的基礎上加上此前定義好的閾值,如果結果大于 0 ,則預測為 1 ,否則為 -1.

算法可以根據(jù)每次迭代得到的預測結果的準確性靈活調整權重。在迭代的初期,預測結果一般不太可能是準確的,因為權重沒有被調整過,也就不會收斂。需要注意的是,調整操作與目標值、預測值之間的差成比例,這個差值需要乘以 eta。這里 eta 是數(shù)據(jù)科學家定義的另一個超參數(shù),介于 0 和 1 之間,eta 的值越大,權重的校正就越多。最終當預測結果準確時,就會停止調整權重的過程。具體代碼如下:

self.w_ = np.zeros(1 + X.shape[1])

for _ in range(self.n_iter):

    for xi, target in zip(X, y):

        update = self.eta * (target - self.predict(xi))

        self.w_[1:] += update * xi

        self.w_[0] += update

def net_input(self, X):

    """Calculate net input"""

    return np.dot(X, self.w_[1:]) + self.w_[0]

def predict(self, X):

    """Return class label after unit step"""

    return np.where(self.net_input(X) >= 0.0, 1, -1)     

在代碼中,只有當兩個類別是線性可分時,感知機模型才會收斂。簡單說就是:如果你能畫一條直線來完全分離兩個類,算法才會收斂。否則,算法將一直迭代下去,并將重新調整權重,直到循環(huán)達到最大次數(shù) n_iter。

通過從零開始實現(xiàn)一個感知機模型,我學到了這些

以上感知機的完整代碼如下所示:

通過從零開始實現(xiàn)一個感知機模型,我學到了這些通過從零開始實現(xiàn)一個感知機模型,我學到了這些通過從零開始實現(xiàn)一個感知機模型,我學到了這些

通過以上實踐,我有如下幾點收獲:

  收獲1:參數(shù)的理解

如果你直接調用 scikit-learn 等工具來實現(xiàn)感知機,那么像學習率和迭代次數(shù)這些參數(shù)就會顯得很抽象,因為你只需要把它們填到 API 接口里,然后就得到了結果,完全不清楚這些參數(shù)的實際意義。但是如果你試著自己寫代碼來實現(xiàn),例如自己實現(xiàn)一個感知機,那么這些參數(shù)的含義就一目了然。

學習率

例如學習率,就是指當預測不準確時權重被校正的比例,該值必須介于 0 和 1 之間。如下代碼所示,fit 函數(shù)將對每個觀察結果進行迭代,調用 predict 函數(shù),然后根據(jù)目標和預測值之間的差異調整權重,然后乘以學習率。

更高的學習率意味著算法將更積極地調整權重。每次迭代都會根據(jù)預測值是否準確重新調整權重值。

# Partial portion of the "fit" function

for xi, target in zip(X, y):

    update = self.eta * (target - self.predict(xi))

    self.w_[1:] += update * xi

    self.w_[0] += update

    errors += int(update != 0.0)

迭代次數(shù)

迭代次數(shù)是指算法在訓練集中運行的總次數(shù)。如果迭代次數(shù)設為 1,則算法就只在數(shù)據(jù)集上運行一次,針對每個數(shù)據(jù)點只更新一次權重。這樣得到的模型相比較高迭代次數(shù)的模型,準確率可能更低。在數(shù)據(jù)集的體量較大時,高迭代次數(shù)可能引起非常高迭代成本。

for _ in range(self.n_iter):

    errors = 0

    for xi, target in zip(X, y):

        update = self.eta * (target - self.predict(xi))

        self.w_[1:] += update * xi

        self.w_[0] += update

        errors += int(update != 0.0)

    self.errors_.append(errors)

學習度和迭代次數(shù)通常是相互關聯(lián)的,需要一起調整。例如,如果你的學習率很小,則意味著算法每次對權重的調整都很微小,那么可能就需要更多的迭代次數(shù)。

  收獲2:線性代數(shù)的重要性

其次,特別重要的一點是:不單是Perceptron算法,在整個機器學習領域,線性代數(shù)課程中的相關內(nèi)容都至關重要,因為整個算法都可以通過線性代數(shù)的相關公式來描述。而如果你從來沒有學過線性代數(shù)的相關知識,那么這些公式對你來說就是不可見的,也就不利于算法的理解和實現(xiàn)。因此,學好線性代數(shù)對開發(fā)機器學習和理解各種算法至關重要,這里推薦一個線性代數(shù)的在線教程,并且附帶練習。

教程地址:https://www.khanacademy.org/math/linear-algebra 

  收獲3:一種通用的學習方法

最后,我想通過以上 Perceptron 算法推薦一個通用的學習方法,即手動敲入代碼,拒絕簡單的復制粘貼。

早在2012年,當我在學習編寫一個 Web 應用時就體會到了手動敲入代碼的好處。當時,我花了比別人多得多的時間跟著教程,一步一步把案例中的代碼手動敲入編輯器,而沒有選擇復制粘貼。這看起來很蠢,但不可否認這種方法真的有用。因為不可避免的,在手動敲入這些代碼時你一定會引入錯誤,因此你敲完的代碼可能根本就運行不起來,也可能得到一些意想不到的錯誤,這時你就必須排查和修改代碼中的錯誤。其實,這個排查和修改的過程就是思考和學習的過程,通過這樣的過程,你會對整個代碼和教程中的知識點理解的更透徹,當然也記得更清楚。

所以,如果你要學習 Perceptron 算法,請不要直接復制和粘貼。試著將這些代碼手動敲入編輯器,然后編譯運行。更不要被動地閱讀,僅僅對著代碼讀來讀去,永遠也成不了數(shù)據(jù)科學家,你必須參與進去,主動修改和運行這些代碼,才能收獲的更多。

原文地址:http://www.jeannicholashould.com/what-i-learned-implementing-a-classifier-from-scratch.html 

深入閱讀:http://www.jeannicholashould.com/learning-machine-learning.html 

雷鋒網(wǎng)相關閱讀:

機器學習零基礎?手把手教你用TensorFlow搭建圖像分類器| 干貨

Python粉都應該知道的開源機器學習框架:Scikit-learn入門指南

雷峰網(wǎng)版權文章,未經(jīng)授權禁止轉載。詳情見轉載須知。

通過從零開始實現(xiàn)一個感知機模型,我學到了這些

分享:
相關文章

編輯

歡迎交流,微信:whl123465
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設置密碼以方便用郵箱登錄
立即設置 以后再說