首页 > 解决方案 > 使用 sklearn MLPRegressor 获取每次迭代的损失值 (MAE)

问题描述

我想在训练过程中使用 MSE 检查我的损失值,如何在每次迭代时使用 MSE 获取损失值?谢谢。

from sklearn.neural_network import MLPRegressor 
from sklearn.metrics import mean_absolute_error

dataset = open_dataset("forex.csv")

dataset_vector = [float(i[-1]) for i in dataset]
normalized_dataset_vector = normalize_vector(dataset_vector)
training_vector, validation_vector, testing_vector = split_dataset(training_size, validation_size, testing_size, normalized_dataset_vector)
training_features = get_features(training_vector)
training_fact = get_fact(training_vector)
validation_features = get_features(validation_vector)
validation_fact = get_fact(validation_vector)
model = MLPRegressor(activation=activation, alpha=alpha, hidden_layer_sizes=(neural_net_structure[1],), max_iter=number_of_iteration, random_state=seed)
model.fit(training_features, training_fact)
pred = model.predict(training_features)
err = mean_absolute_error(pred, validation_fact)
print(err)

标签: pythonpython-3.xscikit-learnneural-networkartificial-intelligence

解决方案


没有像 in 这样的回调对象,Keras因此您必须遍历拟合过程才能为每次迭代获取它。像下面这样的东西会为你工作

from sklearn.neural_network import MLPClassifier
from sklearn.metrics import mean_absolute_error

# create some toy data
X = np.random.random((100, 5))
y = np.random.choice([0, 1], 100)

max_iter = 500

mlp = MLPClassifier(hidden_layer_sizes=(10, 10, 10), max_iter=max_iter)

errors = []
for i in range(max_iter):
    mlp.partial_fit(X, y, classes=[0, 1])
    pred = mlp.predict(X)
    errors.append(mean_absolute_error(y, pred))

目前这很烦人DeprecationWarning,但这可以忽略不计。使用这种方法的唯一问题是您必须手动跟踪您的模型是否已经收敛。如果您想使用神经网络,我个人建议使用Keras而不是。sklearn


推荐阅读