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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

活用西瓜书——sklearn包中的神经网络分类器MLPClassifier的使用

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 活用西瓜书——sklearn包中的神经网络分类器MLPClassifier的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

最近在讀西瓜書,查閱了多方資料,惡補了數值代數、統計概率和線代,總算是勉強看懂了西瓜書中的公式推導。但是知道了公式以后還是要學會應用的,幾經摸索發現python下的sklearn包把機器學習中經典的算法都封裝好了,因此,打算寫幾篇博客記錄一下sklearn包下的常用學習算法的使用,防止自己以后忘了,嘿嘿。

1.神經網絡

神經網絡其實是一個寬泛的概念,西瓜書中也只不過是對神經網絡進行了簡單的介紹,詳細的神經網絡是一門和深度學習緊密關聯的完整的學科。概括一下,神經網絡就是一種對于多輸入和多輸出的任務進行處理的算法,使用多層多個計算節點進行交互運算,不同層次之間相互影響,下層的數據或運算結果作為上一層的輸入,上層節點接收到多個下層節點的輸入后對輸入進行權值運算,通過激活函數來產生本層的輸出值。如此層層運算,經過復雜的迭代后得到多個輸出值。由此描述我們可以知道,每個節點都需要有自己的計算標準(參數值),比如如何對上一層的輸入進行加權,如何計算出下一層的輸出,激活函數和閾值如何選擇,等等。因此,神經網咯的問題最終還是歸結為參數的優化問題,只不過在神經網絡中,需要優化的參數是大量的。

2.BP算法

BP算法是用于求解神經網絡中各項參數的算法,核心思想就是最小化均方誤差,給定一個訓練樣本(xk,ykx_k,y_kxk?,yk?),假設模型輸出為yk=(y1.k,y2.k...yl.k)y_k=(y_1.^k,y_2.^k...y_l.^k)yk?=(y1?.k,y2?.k...yl?.k)則均方誤差為:Ek=12∑j=1l(yj.k?yjk)E_k=\cfrac {1} {2}\sum_{j=1}^{l} (y_j.^k-y_j^k)Ek?=21?j=1l?(yj?.k?yjk?),我們再根據梯度下降法,對均方誤差求偏導,進而優化參數。在神經網絡中需要優化的參數有:ωhj\omega_hjωh?j(隱層連接權值)、θj\theta_jθj?(函數內閾值,輸入求和后減去這個值作為sigmoid函數的參數)、vihv_ihvi?h(輸入層權值)和γh\gamma_hγh?(隱層的閾值),優化參數時由于參數存在著嵌套,因此應該使用鏈式函數求導法則。具體的推導過程不作詳述(實際上是公式太難打了,哈哈)。

3.sklearn中的神經網絡分類器MLPClassifier

sklearn下封裝好了神經網絡分類器MLPClassifier以及神經網絡回歸器,用法和參數類似,本文使用MLPClassifier來編寫案例。其實很多任務比如數字識別,文字識別,甚至自然語言識別都可以歸結于分類任務(比如數字識別就是10-分類任務),由于完整的數據集不好整,另外神經網絡其實沒辦法一篇文章寫個通透,本人也只是入門,因此就還拿iris數據及寫一個分類案例。

重要參數

solver:優化方法,取值集合為{‘lbfgs’, ‘sgd’, ‘adam’},lbfgs是一種牛頓法 ,sgd是隨機梯度下降,adam是另一種梯度下降,叫做機遇梯度下降。數據集很大的時候后建議使用adam,一般數據及使用lbfgs即可。
hidden_layer_sizes:隱層節點個數,是個可變參,tuple元組類型,可以規定任意長度,里面的第i個數代表第i個隱層的節點個數,元組長度即為隱層數,默認為(100,)即單隱層,隱層中100個節點。
alpha:正則化系數,防止過擬合的,正則化系數越大則正則化力度越大。

代碼

from sklearn.neural_network import MLPClassifier from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split import numpy as np import pandas as pd from sklearn import datasets from pandas import DataFrame iris=datasets.load_iris() df=DataFrame(iris.data,columns=iris.feature_names) df['target']=list(iris.target) # print(df) X=df.iloc[:,0:4] Y=df.iloc[:,4] X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.3,random_state=0) sc=StandardScaler() sc.fit(X) standard_train=sc.transform(X_train) standard_test=sc.transform(X_test) # solver{‘lbfgs’, ‘sgd’, ‘adam’} ‘adam’在相對較大的數據集上效果比較好(幾千個樣本或者更多),對小數據集來說,lbfgs收斂更快效果也更好。 mlp=MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=(10,5)) mlp.fit(standard_train,Y_train) result=mlp.predict(standard_test) print("測試集合的y值:",list(Y_test)) print("神經網絡預測的的y值:",list(result)) print("預測的正確率為:",mlp.score(standard_test,Y_test))

運行結果

預測正確率達到百分之九十八。

4.補充

對于不同的數據集應該怎么選擇隱層的數量和隱層節點個數?我么還可以從分類所需感知機的個數觸發來確定隱層的相關參數,找到一篇其他博主的講解,我覺得說得很到位。鏈接在這-在神經網絡中應使用多少隱藏層/神經元?(附實例)

總結

以上是生活随笔為你收集整理的活用西瓜书——sklearn包中的神经网络分类器MLPClassifier的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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