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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

多層感知機(Multi-Layer Perceptron)

簡介

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

感知器就是一個能夠把訓練集的正例和反例劃分為兩個部分的器件,并且能夠對未來輸入的數據進行分類。舉個例子:一個小孩子的媽媽在教他什么是蘋果什么不是,首先會去拿一個蘋果過來說“這個是蘋果”,然后拿一個水杯過來說“這不是”,然后拿一個稍微不一樣的蘋果過來說“這也是”,,,最后,小孩子學習到了用一個模型(判斷蘋果的標準)來判斷什么是蘋果什么不是。

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

原理

感知器的輸入空間(特征空間)一般為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,對應于輸入空間的RnR^nRn中的某個點,而輸出y∈Yy\in YyY表示改點所在的分類。需要注意的是,輸入xxx是一個n維的向量,即x=(x1,x2,...xn)x=(x_1,x_2,...x_n)x=(x1?,x2?,...xn?)。現在,已經有了輸入和輸出的定義,就可以給出感知機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?)中的每個分量代表輸入向量空間RnR^nRn中向量xxx的每個分量xix_ixi?的權重,或者說參數。b∈Rb \in RbR稱為偏差,w×xw \times xw×x表示向量wwwxxx的內積,signsignsign是一個符號函數,即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?上面這個函數f(x)f(x)f(x)稱為感知機。

神經網絡簡述

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

在使用神經網絡前需要注意以下事項。

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

    使用多層感知器分析,根據葡萄酒的各項化學特征來判斷葡萄酒的優劣。使用sklearn封裝的MLPClassifier。
    在代碼中設定的參數solver='lbfgs’為求解方法設置,一般有3個取值。

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

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

    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])

    補充說明

    參考書《Python3數據分析與機器學習實戰》,具體數據集和代碼可以查看我的GitHub,歡迎star或者fork。

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。