Python 绘制培训和验证损失曲线?

Python 绘制培训和验证损失曲线?,python,Python,我正在使用酵母数据集,该数据集位于: 我想建立一个神经网络分类器模型并绘制学习曲线。因此,我两次使用scikit的模型_选择;一个用于制作培训和测试集,另一个用于选择验证集。从这两组中,我想绘制学习曲线,我的代码如下: import numpy as np import pandas as pd from sklearn import model_selection, linear_model from sklearn.model_selection import train_test_spl

我正在使用酵母数据集,该数据集位于:

我想建立一个神经网络分类器模型并绘制学习曲线。因此,我两次使用scikit的模型_选择;一个用于制作培训和测试集,另一个用于选择验证集。从这两组中,我想绘制学习曲线,我的代码如下:

import numpy as np
import pandas as pd
from sklearn import model_selection, linear_model
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.neural_network import MLPClassifier
import matplotlib.pyplot as plt

def readFile(file):
    head=["seq_n","mcg","gvh","alm","mit","erl","pox","vac","nuc","site"]
    f=pd.read_csv(file,delimiter=r"\s+")
    f.columns=head
    return f

def NeuralClass(X,y):
    X_train,X_test,y_train,y_test=model_selection.train_test_split(X,y,test_size=0.2)
    X_tr,X_val,y_tr,y_val=model_selection.train_test_split(X_train,y_train,test_size=0.2)
    mlp=MLPClassifier(activation="relu",max_iter=3000)
    mlp.fit(X_train,y_train)
    print (mlp.score(X_train,y_train))
    plt.plot(mlp.loss_curve_)
    mlp.fit(X_val,y_val)
    plt.plot(mlp.loss_curve_)

def main():
    f=readFile("yeast.data")
    list=["seq_n","site"]
    X=f.drop(list,1)
    y=f["site"]
    NeuralClass(X,y)

if __name__=="__main__":
    main()
我得到了一张如下的图表,我不知道它是否正确:

问题是,这是否是绘制验证曲线的正确方法,或者我采用的方法是否正确


谢谢

没有测试它,但应该是这样的:

def NeuralClass(X,y):
    X_train,X_test,y_train,y_test = model_selection.train_test_split(
        X,y,test_size=0.2)
    mlp=MLPClassifier(
        activation="relu",
        max_iter=3000, 
        validation_fraction=0.2, 
        early_stopping=True)
    mlp.fit(X_train,y_train)
    print (mlp.score(X_train,y_train))
    plt.plot(mlp.loss_curve_)
    plt.plot(mlp.validation_scores_)

两个问题:这段代码绘制了两条训练曲线,而验证集是X_trainyes@Marat的子集。我必须从训练集中获取验证集,因为我不知道如何使用训练测试获取验证数据。我得到了错误“'mlpclassizer'对象没有属性'validation_scores'”,对吗,它还需要提前停止。我更新了答案,你能再试一次吗?