期末作業(yè)實(shí)驗(yàn)報(bào)告:MLP實(shí)驗(yàn)對(duì)比

工程構(gòu)建

  • 導(dǎo)入sklearn相關(guān)包
import numpy as np
rom sklearn.neural_network import MLPClassifier 
  • 定義readDataSet(fileName, isTest)函數(shù),用于加載訓(xùn)練數(shù)據(jù),返回特征數(shù)據(jù)(dataSet)和標(biāo)簽(label)
# fileName: 文件名字
# isTest: =True為測(cè)試數(shù)據(jù)時(shí),只有54列,label直接設(shè)0
def readDataSet(fileName, isTest):
    fr = open(fileName,encoding='utf-8')
    lines = fr.readlines()

    numLabels = len(lines) 
    labels = np.zeros(numLabels) #用于存放標(biāo)簽數(shù)據(jù)
    dateSet = np.zeros([numLabels,54],int) #用于存放特征數(shù)據(jù)

    # 逐行讀取數(shù)據(jù)到dataSet,labels
    # 總共55列,前54列是樣本特征,最后一列是樣本類別(label)
    for i in range(numLabels):
        line = lines[i]
        label = 0
        if isTest:  #True:測(cè)試集只有54列,最后標(biāo)簽直接設(shè)為0
            label = 0
        else:  # False:取最后一列為標(biāo)簽數(shù)據(jù)
            label = line.split(' ')[54]
        labels[i] = label

        dates = np.zeros(54)
        for j in range(53): # 前54列添加為特征數(shù)據(jù)
            dates[j] = line.split(' ')[j]
        dateSet[i] = dates

    fr.close()
    return dateSet,labels

添加isTest參數(shù)是為了區(qū)別訓(xùn)練集(55列)與測(cè)試集數(shù)據(jù)(54列)列數(shù)不同,便于交叉驗(yàn)證時(shí),統(tǒng)計(jì)錯(cuò)誤數(shù)量,核算正確率.

  • 加載訓(xùn)練數(shù)據(jù)
train_dataSet,train_labels = readDataSet('data_train.txt', False)
  • 構(gòu)建神經(jīng)網(wǎng)絡(luò)
    設(shè)置網(wǎng)絡(luò)的隱藏層數(shù)、各隱藏層神經(jīng)元個(gè)數(shù)、激活函數(shù)、學(xué)習(xí)率、優(yōu)化方法、最大迭代次數(shù)
clf = MLPClassifier(hidden_layer_sizes=(100,),
                    activation='logistic', solver='adam',
                    learning_rate_init = 0.0001, max_iter=2000)
print(clf)
clf.fit(train_dataSet,train_labels)
  • 加載測(cè)試集,使用構(gòu)建好的KNN分類器對(duì)測(cè)試集進(jìn)行預(yù)測(cè)
test_dataSet,test_labels = readDataSet('data_test.txt', False)
res = clf.predict(test_dataSet)
error = 0
for i in range(len(res)):
    if res[i] != test_labels[i]:
        error += 1
print('error:',error,'正確率:',(len(res) - error) / len(res))

鄰居數(shù)量K影響對(duì)比

  • 情況一:使用logistic激活函數(shù)和adam優(yōu)化方法,設(shè)初始學(xué)習(xí)率為0.0001,最大迭代次數(shù)為2000
    運(yùn)行神經(jīng)元個(gè)數(shù)為50、100、200的實(shí)驗(yàn)對(duì)比結(jié)果
n_hidden_layer_sizes 50 100 200
正確率 78% 80% 83%

隨著隱藏層神經(jīng)元個(gè)數(shù)的增加,MLP的正確率持上升趨勢(shì)

  • 情況二:使用adam優(yōu)化方法,設(shè)神經(jīng)元個(gè)數(shù)為100,初始學(xué)習(xí)率為0.0001,最大迭代次數(shù)為2000
    運(yùn)行激活函數(shù)分別為logistic、identity、tanh、relu的實(shí)驗(yàn)對(duì)比結(jié)果
activation identity relu tanh logistic
正確率 59% 61% 75% 80%

我們可以看出logistic的正確率最高

  • 情況三:使用logistic激活函數(shù)和adam優(yōu)化方法,設(shè)神經(jīng)元個(gè)數(shù)為100,初始學(xué)習(xí)率為0.0001
    運(yùn)行最大迭代次數(shù)為500、1000、1500、2000的實(shí)驗(yàn)對(duì)比結(jié)果
max_iter 500 1000 1500 2000
錯(cuò)誤數(shù) 8125 7690 7805 7812
正確率 59% 61% 75% 80%

當(dāng)最大迭代次數(shù)> 1500時(shí),正確率基本保持不變,這說(shuō)明MLP在第1500迭代時(shí)已經(jīng)收斂

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容