【发布时间】:2018-02-05 17:48:34
【问题描述】:
我想绘制神经网络相对于训练样例数量的学习误差曲线。这是代码:
import sklearn
import numpy as np
from sklearn.model_selection import learning_curve
import matplotlib.pyplot as plt
from sklearn import neural_network
from sklearn import cross_validation
myList=[]
myList2=[]
w=[]
dataset=np.loadtxt("data", delimiter=",")
X=dataset[:, 0:6]
Y=dataset[:,6]
clf=sklearn.neural_network.MLPClassifier(hidden_layer_sizes=(2,3),activation='tanh')
# split the data between training and testing
X_train, X_test, Y_train, Y_test = cross_validation.train_test_split(X, Y, test_size=0.25, random_state=33)
# begin with few training datas
X_eff=X_train[0:int(len(X_train)/150), : ]
Y_eff=Y_train[0:int(len(Y_train)/150)]
k=int(len(X_train)/150)-1
for m in range (140) :
print (m)
w.append(k)
# train the model and store the training error
A=clf.fit(X_eff,Y_eff)
myList.append(1-A.score(X_eff,Y_eff))
# compute the testing error
myList2.append(1-A.score(X_test,Y_test))
# add some more training datas
X_eff=np.vstack((X_eff,X_train[k+1:k+101,:]))
Y_eff=np.hstack((Y_eff,Y_train[k+1:k+101]))
k=k+100
plt.figure(figsize=(8, 8))
plt.subplots_adjust()
plt.title("Erreur d'entrainement et de test")
plt.plot(w,myList,label="training error")
plt.plot(w,myList2,label="test error")
plt.legend()
plt.show()
但是,我得到了一个非常奇怪的结果,曲线波动,训练误差非常接近测试误差,这似乎并不正常。 错误在哪里?我不明白为什么会有这么多的起伏,为什么训练错误没有像预期的那样增加。任何帮助将不胜感激!
编辑:我使用的数据集是https://archive.ics.uci.edu/ml/datasets/Chess+%28King-Rook+vs.+King%29,在那里我删除了少于 1000 个实例的类。我手动重新编码了乱码数据。
【问题讨论】:
-
你逐渐扩大训练集有什么原因吗?
-
@Flomp 这就是绘制学习曲线的方式。
-
没有实际数据很难说。您是否尝试过调整 MLP 的参数,例如隐藏层或激活函数。
tanhIMO 通常给出这种曲线。也许尝试改变它。在其位置尝试“relu”或“logistic” -
很抱歉,我对此了解不多。使用其他激活函数时结果是否不同?
-
您为此打开了赏金,这意味着您对答案不满意(没关系),但两个答案都直接回答了所述问题。如果人们不知道您在寻找什么,赏金将无济于事。您介意解释为什么提供的答案不符合要求吗?我很想调整其中一个以使其适合您。
标签: python scikit-learn neural-network