首页 > 解决方案 > 具有属性 loss_curve_ 的 MLPRegressor 问题

问题描述

我想使用以下代码绘制 loss_curve:

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPRegressor

def plotCurves(Xtrain,ytrain,Xval,yval):
    solver=["lbfgs", "sgd", "adam"]
    for i in solver:
        mlp=MLPRegressor(activation='relu',max_iter=1000,solver=i)
        mlp.fit(Xtrain,ytrain)
        pred=mlp.predict(Xval)
        print (mlp.score(Xval,yval))
        pd.DataFrame(mlp.loss_curve_).plot()

但是,当我运行我的代码时,会出现以下错误:

'MLPRegressor' object has no attribute 'loss_curve_'

在 Anaconda IDE 版本 1.9.7 中,我在编码时会出现这种方法。

我可以尝试什么来解决这个问题?

标签: pythonscikit-learn

解决方案


只有随机求解器会在拟合后在估计器上公开一个loss_curve_属性,因此在您的第一次迭代中,lbfgs求解器会失败。您可以通过以下方式验证这一点:

from sklearn.datasets import make_classification
from sklearn.neural_network import MLPRegressor
​
X, y = make_classification(n_samples=5)
​
solver=[
    "lbfgs",
    "sgd",
    "adam"
]
​
for i in solver:
    mlp = MLPRegressor(activation='relu',solver=i)
    mlp.fit(X,y)
    print(hasattr(mlp, "loss_curve_"))
False
True
True

如果你想访问这个属性,你需要坚持使用 adam 或 sgd 求解器。


推荐阅读