【问题标题】:How does `fit` function in scikit-learn make validation?scikit-learn 中的 fit 函数如何进行验证?
【发布时间】:2019-01-21 08:00:39
【问题描述】:

我在将fit 函数应用于MLPClassifier 时遇到问题。我仔细阅读了Scikit-Learn's documentation about that,但无法确定验证的工作原理。

是交叉验证还是训练和验证数据之间存在分割?

提前致谢。

【问题讨论】:

    标签: python machine-learning scikit-learn neural-network


    【解决方案1】:

    fit 函数本身不包括交叉验证,也不应用训练测试拆分。 幸运的是,您可以自己完成此操作。

    训练测试分组:

    from sklearn.model_selection import train_test_split
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33) // test set size is 0.33 
    clf = MLPClassifier()
    clf.fit(X_train, y_train) 
    clf.predict(X_test, y_test) // predict on test set 
    

    K-Fold 交叉验证

    from sklearn.model_selection import KFold
    kf = KFold(n_splits=2)
    kf.get_n_splits(X)
    clf = MLPClassifier()
    for train_index, test_index in kf.split(X):
       X_train, X_test = X[train_index], X[test_index]
       y_train, y_test = y[train_index], y[test_index]
    
       clf.fit(X_train, y_train) 
       clf.predict(X_test, y_test) // predict on test set 
    

    对于交叉验证,可以使用多种功能,您可以阅读更多关于它的信息here。这里所说的 k-fold 只是一个例子。

    编辑:

    感谢您的回答,但基本上 fit 函数是如何工作的 具体来说?它只是在给定数据上训练网络(即 训练集)直到达到 max_iter 就可以了?

    我假设您使用的是默认配置 MLPClassifier。在这种情况下,fit 函数会尝试在 adam 优化器的基础上进行优化。实际上,在这种情况下,网络会一直训练直到达到 max_iter。

    此外,在 K-Fold 交叉验证中,模型是否改进为 只要循环通过或只是从头开始?

    实际上,交叉验证并不是用来提高网络性能的,它实际上是一种测试算法在不同数据上的泛化能力的方法。对于 k-fold,训练和测试 k 个独立的分类器。

    【讨论】:

    • 感谢您的回答,但基本上fitfunction 具体是如何工作的?它只是在给定数据(即训练集)上训练网络,直到达到max_iter,就这样?此外,在 K-Fold 交叉验证中,只要循环通过或只是从头开始,模型是否会有所改善?如果您能在考虑到它的情况下更新您的答案,我会很高兴!
    • 当我创建fit 函数(默认参数)时,我得到了几个Iterations,然后显示“训练损失没有改善超过......”迭代是什么意思?
    猜你喜欢
    • 2021-10-25
    • 2017-04-12
    • 1970-01-01
    • 2016-04-25
    • 2014-04-05
    • 2020-10-20
    • 2015-03-09
    • 2018-10-15
    • 2023-03-22
    相关资源
    最近更新 更多