工程構(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)收斂