(一)神經(jīng)網(wǎng)絡(luò)圖解和算法的推導(dǎo)
(二)神經(jīng)網(wǎng)絡(luò)代碼的實(shí)現(xiàn)
from sklearn.neural_network import MLPRegressor
import xlrd ,xlwt
import pandas as pd
import numpy as np
from sklearn.cross_validation import train_test_split
X = [[0., 0.], [1., 1.]]
y = [0, 1]
clf = MLPRegressor(solver='lbfgs', alpha=1e-5,
hidden_layer_sizes=(5, 2), random_state=1)
X_train_raw, X_test_raw, y_train, y_test = train_test_split(df[best_names],df['效率'],
test_size=0.3,random_state=123)
# 參數(shù)詳解
MLPRegressor(activation='relu' #有四種不同 的方法{‘identity’, ‘logistic’, ‘tanh’, ‘relu’},
, alpha=1e-05 #懲罰系數(shù)
, batch_size='auto' #用于隨機(jī)優(yōu)化器的小型機(jī)的大小。 如果求解器是'lbfgs',則分類器將不使用minibatch怕品。 設(shè)置為“auto”時(shí)吃溅,batch_size = min(200旭绒,n_samples)
, beta_1=0.9 #亞當(dāng)中第一時(shí)刻向量估計(jì)的指數(shù)衰減率應(yīng)為[0,1]。 僅在solver ='adam'時(shí)使用
, beta_2=0.999 #亞當(dāng)中二階矩矢量估計(jì)的指數(shù)衰減率應(yīng)為[0,1]揩瞪。 僅在solver ='adam'時(shí)使用
, early_stopping=False #當(dāng)驗(yàn)證評分沒有改善時(shí)拱撵,是否使用提前停止來終止培訓(xùn)。 如果設(shè)置為true诅愚,它將自動留出10%的訓(xùn)練數(shù)據(jù)作為驗(yàn)證寒锚,
#并在驗(yàn)證得分沒有提高至少兩個(gè)連續(xù)時(shí)期的tol時(shí)終止訓(xùn)練。 僅在solver ='sgd'或'adam'時(shí)有效
, epsilon=1e-08 #亞當(dāng)數(shù)值穩(wěn)定性的價(jià)值。 僅在solver ='adam'時(shí)使用
, hidden_layer_sizes=(5, 2) #隱藏層的數(shù)量和神經(jīng)單元的數(shù)量
, learning_rate='constant' #{‘constant’, ‘invscaling’, ‘a(chǎn)daptive’}, default ‘constant’
#權(quán)重更新的學(xué)習(xí)率計(jì)劃
, learning_rate_init=0.001 #控制跟新迭代的步長
, max_iter=200 #最大迭代次數(shù)刹前,理論上迭代次數(shù)越多效果越好
, momentum=0.9 #梯度下降更新的動量泳赋。 應(yīng)該在0和1之間。僅在solver ='sgd'時(shí)使用喇喉。
, nesterovs_momentum=True #是否使用Nesterov的勢頭祖今。 僅在solver ='sgd'和momentum> 0時(shí)使用
, power_t=0.5 #反縮放學(xué)習(xí)率的指數(shù)。 當(dāng)learning_rate設(shè)置為“invscaling”時(shí)拣技,它用于更新有效學(xué)習(xí)率千诬。 僅在solver ='sgd'時(shí)使用。
, random_state=1 #隨機(jī)種子膏斤,用于還原算法
, shuffle=True #是否在每次迭代的時(shí)候進(jìn)行洗牌
, solver='lbfgs' #權(quán)重的優(yōu)化方案 有三個(gè)參數(shù)可以選擇{‘lbfgs’, ‘sgd’, ‘a(chǎn)dam’}
#默認(rèn) ‘a(chǎn)dam’-隨機(jī)梯度下降 'lbfgs'是準(zhǔn)牛頓方法族的優(yōu)化者
, tol=0.0001 # 優(yōu)化容差當(dāng)損失或分?jǐn)?shù)在兩次連續(xù)迭代中沒有提高至少tol時(shí)徐绑,除非將learning_rate設(shè)置為“自適應(yīng)”,否則認(rèn)為會達(dá)到收斂并且訓(xùn)練停止
, validation_fraction=0.1 #將訓(xùn)練數(shù)據(jù)的比例留作早期停止的驗(yàn)證集掸绞。
#必須介于0和1之間泵三。僅在early_stopping為True時(shí)使用
, verbose=False #是否將進(jìn)度消息打印到stdout。
,warm_start=False) #設(shè)置為True時(shí)衔掸,重用上一次調(diào)用的解決方案以適合初始化烫幕,否則,只需擦除以前的解決方案敞映。
#預(yù)測結(jié)果
y1=clf.predict(X_test_raw)
# 計(jì)算誤差實(shí)現(xiàn)以下函數(shù)并輸出所選直線的MSE
def calculateMSE(X,Y):
in_bracket = []
for i in range(len(X)):
num = (X[i]-Y[i])**2
in_bracket.append(num)
all_sum = sum(in_bracket)
MSE = all_sum / len(X)
return MSE