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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习-分类之多层感知机原理及实战

發(fā)布時(shí)間:2024/4/11 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习-分类之多层感知机原理及实战 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

多層感知機(jī)(Multi-Layer Perceptron)

簡介

生物神經(jīng)網(wǎng)絡(luò)具有相互連接的神經(jīng)元,神經(jīng)元帶有接受輸入信號(hào)的樹突,然后基于這些輸入,它們通過軸突向另一個(gè)神經(jīng)元產(chǎn)生輸出信號(hào)。使用人工神經(jīng)網(wǎng)絡(luò)(ANN)來模擬這個(gè)過程,稱為神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)是一個(gè)試圖模仿自然生物神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)模式的機(jī)器學(xué)習(xí)框架。創(chuàng)建神經(jīng)網(wǎng)絡(luò)的過程從最基本的形式單個(gè)感知器開始。

感知器就是一個(gè)能夠把訓(xùn)練集的正例和反例劃分為兩個(gè)部分的器件,并且能夠?qū)ξ磥磔斎氲臄?shù)據(jù)進(jìn)行分類。舉個(gè)例子:一個(gè)小孩子的媽媽在教他什么是蘋果什么不是,首先會(huì)去拿一個(gè)蘋果過來說“這個(gè)是蘋果”,然后拿一個(gè)水杯過來說“這不是”,然后拿一個(gè)稍微不一樣的蘋果過來說“這也是”,,,最后,小孩子學(xué)習(xí)到了用一個(gè)模型(判斷蘋果的標(biāo)準(zhǔn))來判斷什么是蘋果什么不是。

感知器具有一個(gè)或者多個(gè)輸入、偏置、激活函數(shù)和單個(gè)輸出。感知器接受輸入,將它們乘以一些權(quán)重,然后將它們傳遞到激活函數(shù)以產(chǎn)生輸出。有許多激活函數(shù)可供選擇,如邏輯函數(shù)、三角函數(shù)、階躍函數(shù)等。我們還確保向感知器添加偏差,這避免了所有輸入可能等于零的問題(這意味著沒有乘以權(quán)重會(huì)有影響)。

原理

感知器的輸入空間(特征空間)一般為Rn?XR^n\supseteq XRn?X,即n維向量空間,輸出空間為Y={+1,?1}Y=\{+1,-1\}Y={+1,?1}?1-1?1代表反例,+1+1+1代表正例。例如,輸入x∈Xx\in XxX,對(duì)應(yīng)于輸入空間的RnR^nRn中的某個(gè)點(diǎn),而輸出y∈Yy\in YyY表示改點(diǎn)所在的分類。需要注意的是,輸入xxx是一個(gè)n維的向量,即x=(x1,x2,...xn)x=(x_1,x_2,...x_n)x=(x1?,x2?,...xn?)。現(xiàn)在,已經(jīng)有了輸入和輸出的定義,就可以給出感知機(jī)f(x)f(x)f(x)的模型:f(x)=sign(w×x+b)f(x)=sign(w\times x+b)f(x)=sign(w×x+b)其中,向量x=(x1,x2,...xn)x=(x_1,x_2,...x_n)x=(x1?,x2?,...xn?)中的每個(gè)分量代表輸入向量空間RnR^nRn中向量xxx的每個(gè)分量xix_ixi?的權(quán)重,或者說參數(shù)。b∈Rb \in RbR稱為偏差,w×xw \times xw×x表示向量wwwxxx的內(nèi)積,signsignsign是一個(gè)符號(hào)函數(shù),即sign(x)={+1x≥0?1x<0sign(x) =\begin{cases} +1 \ x\ge 0\\ -1 \ x<0 \end{cases}sign(x)={+1?x0?1?x<0?上面這個(gè)函數(shù)f(x)f(x)f(x)稱為感知機(jī)。

神經(jīng)網(wǎng)絡(luò)簡述

神經(jīng)網(wǎng)絡(luò)一般由輸入層(Input Layer)、隱藏層(Hidden Layer)、輸出層(Output Layer)組成,每層由單元(Units)組成,輸入層是由訓(xùn)練集的實(shí)例特征向量傳入,經(jīng)過連接節(jié)點(diǎn)的權(quán)重(Weight)傳入下一層,上一層的輸出是下一層的輸入,隱藏層的個(gè)數(shù)是任意的,輸出層和輸入層只有一個(gè)。如圖。
-
當(dāng)有輸出的時(shí)候,可以將其與已知標(biāo)簽進(jìn)行比較,并相應(yīng)地調(diào)整權(quán)重(權(quán)重通常以隨機(jī)初始化值開始)。重復(fù)此過程,直到達(dá)到允許迭代的最大數(shù)量或可接受的錯(cuò)誤率。上面網(wǎng)絡(luò)中如果每個(gè)神經(jīng)元都是由感知器構(gòu)成的,則這個(gè)網(wǎng)絡(luò)稱為Multi-layer Perceptron多層感知機(jī)。多層感知機(jī)的優(yōu)點(diǎn)是:可以學(xué)習(xí)非線性模型,并且可以實(shí)時(shí)學(xué)習(xí);然而,多層感知機(jī)也有自身的缺點(diǎn):有隱藏層的MLP包含一個(gè)非凸性損失函數(shù),存在超過一個(gè)最小值,所以不同的隨機(jī)初始權(quán)重可能導(dǎo)致不同的驗(yàn)證精確度;MLP要求調(diào)整一系列超參數(shù),如隱藏神經(jīng)元、隱藏層的個(gè)數(shù)以及迭代的次數(shù);MLP對(duì)特征縮放比較敏感。

在使用神經(jīng)網(wǎng)絡(luò)前需要注意以下事項(xiàng)。

  • 使用神經(jīng)網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)之前,必須確定神經(jīng)網(wǎng)絡(luò)層數(shù),以及每層單元個(gè)數(shù)。
  • 特征向量在被傳入輸入層時(shí)通常被先標(biāo)準(zhǔn)化(Normalize)到0和1之間。
  • 離散型變量可以被編碼成每一個(gè)輸入單元對(duì)應(yīng)一個(gè)特征可能賦的值。例如,特征值A(chǔ)可能取三個(gè)值(a0,a1,a2a_0,a_1,a_2a0?,a1?,a2?),可以使用3個(gè)輸入單元來代表A,如果A=a0A=a_0A=a0?,那么代表a0a_0a0?的單元值就取1,其他取0;如果A=a1A=a_1A=a1?,那么代表a1a_1a1?的單元值就取1,其他取0,以此類推。
  • 神經(jīng)網(wǎng)絡(luò)既可以用來做分類(Classification)問題,也可以解決回歸(Regression)問題。對(duì)于分類問題,如果是兩類,可以用一個(gè)輸入單元表示(0和1分別代表兩類),如果多于兩類,每一個(gè)類別用一個(gè)輸入單元表示,所以輸入層的單元數(shù)量通常等于類別的數(shù)量,沒有明確的規(guī)則來設(shè)計(jì)最好有多少個(gè)隱藏層,可以根據(jù)實(shí)驗(yàn)測試和誤差,以及準(zhǔn)確度來實(shí)驗(yàn)并改進(jìn)最優(yōu)的隱藏層數(shù)目。
  • 實(shí)戰(zhàn)

    使用多層感知器分析,根據(jù)葡萄酒的各項(xiàng)化學(xué)特征來判斷葡萄酒的優(yōu)劣。使用sklearn封裝的MLPClassifier。
    在代碼中設(shè)定的參數(shù)solver='lbfgs’為求解方法設(shè)置,一般有3個(gè)取值。

    • lbfgs:使用quasi-Newton方法的優(yōu)化器。(小數(shù)據(jù)集更好,收斂快,效果好)
    • sgd:使用隨機(jī)梯度下降。
    • adam:使用Kingma、DiederikheJimmy Ba提出的機(jī)遇隨機(jī)梯度的優(yōu)化器。(大數(shù)據(jù)集表現(xiàn)好)

    參數(shù)alpha是L2的參數(shù),MLP支持正則化,默認(rèn)L2.
    參數(shù)hidden_layer_sizes=(5,2)表示隱藏層有兩層,第一層5個(gè)神經(jīng)元,第二層2個(gè)神經(jīng)元。

    import pandas as pd wine = pd.read_csv('data/wine.csv', names=["Cultivator", "Alchol", "Malic_Acid", "Ash", "Alcalinity_of_Ash", "Magnesium", "Total_phenols", "Falvanoids", "Nonflavanoid_phenols", "Proanthocyanins", "Color_intensity", "Hue", "OD280", "Proline"]) wine.head() wine.describe().transpose() print(wine.shape) X = wine.drop('Cultivator', axis=1) y = wine['Cultivator']from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y) from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(X_train) X_train = scaler.transform(X_train) X_test = scaler.transform(X_test) from sklearn.neural_network import MLPClassifier mlp = MLPClassifier(hidden_layer_sizes=(13, 13, 13), max_iter=500) mlp.fit(X_train, y_train) predictions = mlp.predict(X_test) from sklearn.metrics import classification_report,confusion_matrix print(confusion_matrix(y_test, predictions)) print(classification_report(y_test, predictions)) len(mlp.coefs_) len(mlp.coefs_[0]) len(mlp.intercepts_[0])

    補(bǔ)充說明

    參考書《Python3數(shù)據(jù)分析與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》,具體數(shù)據(jù)集和代碼可以查看我的GitHub,歡迎star或者fork。

    總結(jié)

    以上是生活随笔為你收集整理的机器学习-分类之多层感知机原理及实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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