(一)神经网络图解和算法的推导
(二)神经网络代码的实现
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)
# 参数详解
MLPRegressor(activation='relu' #有四种不同 的方法{‘identity’, ‘logistic’, ‘tanh’, ‘relu’},
, alpha=1e-05 #惩罚系数
, batch_size='auto' #用于随机优化器的小型机的大小。 如果求解器是'lbfgs',则分类器将不使用minibatch。 设置为“auto”时,batch_size = min(200,n_samples)
, beta_1=0.9 #亚当中第一时刻向量估计的指数衰减率应为[0,1]。 仅在solver ='adam'时使用
, beta_2=0.999 #亚当中二阶矩矢量估计的指数衰减率应为[0,1]。 仅在solver ='adam'时使用
, early_stopping=False #当验证评分没有改善时,是否使用提前停止来终止培训。 如果设置为true,它将自动留出10%的训练数据作为验证,
#并在验证得分没有提高至少两个连续时期的tol时终止训练。 仅在solver ='sgd'或'adam'时有效
, epsilon=1e-08 #亚当数值稳定性的价值。 仅在solver ='adam'时使用
, hidden_layer_sizes=(5, 2) #隐藏层的数量和神经单元的数量
, learning_rate='constant' #{‘constant’, ‘invscaling’, ‘adaptive’}, default ‘constant’
#权重更新的学习率计划
, learning_rate_init=0.001 #控制跟新迭代的步长
, max_iter=200 #最大迭代次数,理论上迭代次数越多效果越好
, momentum=0.9 #梯度下降更新的动量。 应该在0和1之间。仅在solver ='sgd'时使用。
, nesterovs_momentum=True #是否使用Nesterov的势头。 仅在solver ='sgd'和momentum> 0时使用
, power_t=0.5 #反缩放学习率的指数。 当learning_rate设置为“invscaling”时,它用于更新有效学习率。 仅在solver ='sgd'时使用。
, random_state=1 #随机种子,用于还原算法
, shuffle=True #是否在每次迭代的时候进行洗牌
, solver='lbfgs' #权重的优化方案 有三个参数可以选择{‘lbfgs’, ‘sgd’, ‘adam’}
#默认 ‘adam’-随机梯度下降 'lbfgs'是准牛顿方法族的优化者
, tol=0.0001 # 优化容差当损失或分数在两次连续迭代中没有提高至少tol时,除非将learning_rate设置为“自适应”,否则认为会达到收敛并且训练停止
, validation_fraction=0.1 #将训练数据的比例留作早期停止的验证集。
#必须介于0和1之间。仅在early_stopping为True时使用
, verbose=False #是否将进度消息打印到stdout。
,warm_start=False) #设置为True时,重用上一次调用的解决方案以适合初始化,否则,只需擦除以前的解决方案。
#预测结果
y1=clf.predict(X_test_raw)
# 计算误差实现以下函数并输出所选直线的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