日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简明机器学习教程——实践篇(一):从感知机入手

發(fā)布時(shí)間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简明机器学习教程——实践篇(一):从感知机入手 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有那么一段時(shí)間不出干貨了,首頁都要被每周歌詞霸占了,再不寫一點(diǎn)東西都要變成咸魚了。進(jìn)入正題。本篇教程的目標(biāo)很明顯,就是實(shí)踐。進(jìn)一步的來說,就是,當(dāng)你學(xué)到了一些關(guān)于機(jī)器學(xué)習(xí)的知識后,怎樣通過實(shí)踐以加深對內(nèi)容的理解。這里,我們從李航博士的《統(tǒng)計(jì)學(xué)習(xí)方法》的第2章感知機(jī)來做例子,由此引出大致的學(xué)習(xí)方法。需要注意的是,這篇教程并不是來介紹感知機(jī)模型的,而是用來說明如何學(xué)習(xí)并實(shí)踐一個(gè)模型的,所以對感知機(jī)的解釋不會很詳細(xì)。本篇教程的內(nèi)容較基礎(chǔ),內(nèi)容主要面向?qū)C(jī)器學(xué)習(xí)有興趣且有初步了解的人。由于本文目標(biāo)人群特殊,加之作者水平實(shí)在有限,有表述不嚴(yán)謹(jǐn)或錯(cuò)誤之處,還請各路大神多多指出。本篇需要讀者的準(zhǔn)備:matlab(測試模型用)、熱愛機(jī)器學(xué)習(xí)的大腦(啊喂我的嚴(yán)肅氣氛!)。

首先:了解模型

模型類型

當(dāng)我們在學(xué)習(xí)一個(gè)模型時(shí),很重要的一點(diǎn)就是我們要了解這個(gè)模型的作用,以及其適用的情況。下面我們就來分析感知機(jī):
感知機(jī)(perceptron)二類分類線性分類模型,其輸入為實(shí)例的特征向量,輸出為實(shí)例的類別,取+1和-1二值。開篇第一句,我們就能對這個(gè)模型建立起一個(gè)大概的框架了。首先,感知機(jī)是一個(gè)二類分類模型,也就是說感知機(jī)只能分類出兩個(gè)類別。其次,感知機(jī)是線性的分類模型,也就是說感知機(jī)這個(gè)模型所適用的數(shù)據(jù)必須是線性可分的。到此為止,對于感知機(jī)的適用范圍,我們已經(jīng)知道了不少:首先,感知機(jī)是判別模型,適用于分類問題,且可以區(qū)分的類別數(shù)為2類;其次,感知機(jī)是線性分類模型。如果你還是不理解感知機(jī)適用的問題類型,那我在這里舉個(gè)例子:在二維的情況下,感知機(jī)相當(dāng)于在平面上劃一根線,從而把平面分成兩半;在三維的情況下,感知機(jī)相當(dāng)于拿一把菜刀在空間里切一刀,從而把空間分為兩類。這兩句話在其適用范圍內(nèi),等價(jià)于下面這句話:感知機(jī)對應(yīng)于輸入空間(特征空間)中將實(shí)例劃分為正負(fù)兩類的分離超平面(三維下是“菜刀”),屬于判別模型。

模型

下式即感知機(jī)模型中,將輸入空間映射到輸出空間的函數(shù):

w就是模型的權(quán)值(weight),又稱權(quán)重;b即偏置(bias)。其中的sign函數(shù)定義如下(有些地方作:sgn):

需要注意的是,一般情況下,sign(0)的值是0。這里為了保證模型輸出為+1或-1,故規(guī)定sign(0)=+1。根據(jù)模型,我們不難看出感知機(jī)的幾何意義。線性方程??就是分開空間的超平面。其中,w是平面的一個(gè)法向量(幾何上),b就是其截距。

訓(xùn)練

損失函數(shù)

簡而言之,最小化損失函數(shù)。首先,定義(經(jīng)驗(yàn))損失函數(shù)(詳細(xì)過程請見原書2.2.2 P27):

損失函數(shù),可以理解為是對感知機(jī)模型錯(cuò)誤分類程度的評估函數(shù)。有了損失函數(shù),我們就可以將訓(xùn)練感知機(jī)問題轉(zhuǎn)化為極小化損失函數(shù)問題。

普通形式——梯度下降

這里,我們采用梯度下降法(gradient descent)的變式隨機(jī)梯度下降法(Stochastic Gradient Descent)進(jìn)行極小化。關(guān)于兩種算法的關(guān)系、優(yōu)劣均不在本文討論范圍內(nèi),故省略。偏導(dǎo)求解梯度:


算法步驟如下:

  • 選擇初始超平面S,即選擇。
  • 隨機(jī)選擇一個(gè)誤分類點(diǎn),更新w、b。其中,α 是每次迭代的步長,又稱為學(xué)習(xí)率。
  • 重復(fù)2,直到無分類點(diǎn)為止。
  • 不難發(fā)現(xiàn),若數(shù)據(jù)集是線性可分的,那么損失函數(shù)最終將會等于0。

    實(shí)踐

    下面,我們就來用matlab來實(shí)現(xiàn)感知機(jī)。首先是模型預(yù)測函數(shù)predict.m(防止重復(fù)內(nèi)建函數(shù)sign,作sgn):

    MATLAB
    12345function [ y ] = predict( x, w, b ) y = sgn(x*w + b);end

    之后是損失函數(shù)costFunc.m。這里采用了向量化的方式以避免循環(huán):

    MATLAB
    1 2 3 4 5 6 7 function [ J ] = costFunc( w, b, X, y ) % the cost function of perceptron model. J = sum((X * w + b) .* y); end

    接下來就是關(guān)鍵部分——SGD算法訓(xùn)練模型了(train_SDG.m),首先初始化:

    MATLAB
    12345alpha = 0.5; % init w,b w = ones(n, 1);b = 1;

    然后開始迭代,首先是隨機(jī)選擇一個(gè)錯(cuò)誤分類點(diǎn):

    1 2 3 4 5 6 % chose error points idx = 1; while y(idx)*(X(idx,:)*w+b)>0 idx = unidrnd(m); end

    計(jì)算梯度,更新參數(shù):

    MATLAB
    12345678% calculate gradient grad_w = -(y(idx)*X(idx,:))';grad_b = -y(idx);% updatew = w - alpha .* grad_w; b = b - alpha * grad_b;

    最后是判斷是否所有點(diǎn)被正確歸類:

    MATLAB
    1 2 3 if sum(abs(predict( X, w, b )-y))==0 break; end

    在我提供的實(shí)現(xiàn)中,還包含一個(gè)測試數(shù)據(jù)。運(yùn)行l(wèi)oad_data.m即可載入。然后運(yùn)行train_SGD.m進(jìn)行感知機(jī)的訓(xùn)練,程序會自動繪制每一次迭代的決策邊界(即砍得那一刀的位置),在測試集運(yùn)行如下:

    感知機(jī)第3次迭代

    感知機(jī)第5次迭代

    感知機(jī)第9次迭代

    感知機(jī)最后結(jié)果

    寫在后面

    本篇教程中所用代碼可以在此處下載:提取密碼2px8
    如有問題,歡迎評論或發(fā)送郵件至:admin@kaaass.net。

    from:?https://blog.kaaass.net/archives/598?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

    總結(jié)

    以上是生活随笔為你收集整理的简明机器学习教程——实践篇(一):从感知机入手的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。