Python 如何调整MLPrepressor?
我目前有一个包含变量和观察值的数据集。我想预测一个变量(需求),它是一个连续变量,因此我需要使用回归模型。我尝试了Python 如何调整MLPrepressor?,python,scikit-learn,neural-network,regression,Python,Scikit Learn,Neural Network,Regression,我目前有一个包含变量和观察值的数据集。我想预测一个变量(需求),它是一个连续变量,因此我需要使用回归模型。我尝试了线性回归,并使用R2指标对其进行评估,该指标约为0.85。我想用其他型号来评估它的性能,其中之一就是NNs。我相信神经网络更适合其他任务,比如分类,不过我想尝试一下 我决定使用scikit-learn主要是因为它提供了两种模型(线性回归和多层感知器),问题是R2度量与线性回归的度量相比太远、太差。因此,我得出结论,我缺少许多重要的配置。下面你可以看到我的代码和数据是如何来的 我的数据
线性回归
,并使用R2
指标对其进行评估,该指标约为0.85
。我想用其他型号来评估它的性能,其中之一就是NNs
。我相信神经网络更适合其他任务,比如分类,不过我想尝试一下
我决定使用scikit-learn
主要是因为它提供了两种模型(线性回归和多层感知器),问题是R2
度量与线性回归的度量相比太远、太差。因此,我得出结论,我缺少许多重要的配置。下面你可以看到我的代码和数据是如何来的
我的数据有以下列,只有需求
(这是我的标签),人口
,gdp
,日
和年
是数字连续的,其余是分类的
['demand','holy','gdp','population', 'day','year', 'f0', 'f1', 'f2', 'f3', 'f4','f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f20', 'f21', 'f22', 'f23', 'g0', 'g1', 'g2', 'g3', 'g4', 'g5', 'g6', 'g7', 'g8', 'g9', 'g10', 'g11']
这就是我实际做的,我删除了一些输出
import pandas as pd
import numpy as np
import math as math
from sklearn.linear_model import LinearRegression
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import r2_score
training_data, validation_data = np.split(data.sample(frac=1), [int(.8*len(data))])
linear_model = LinearRegression().fit(training_data[[c for c in data.columns if c != "demand"]], training_data[["demand"]])
validation_data_predictions = linear_model.predict(validation_data[[c for c in training_data.columns if c != "demand"]])
validation_predictions_pd = pd.DataFrame(data=validation_data_predictions,
index=validation_data.index.values,
columns=["prediction"])
# join both pandas
result_df = validation_data.join(validation_predictions_pd, how="inner")
r2_error = r2_score(y_true=result_df[["demand"]], y_pred=result_df[["prediction"]], multioutput="uniform_average")
print(r2_error) # outputs 0.85
# NN section
clf = MLPRegressor(hidden_layer_sizes=(10,), max_iter=100000)
neural_model = clf.fit(training_data[[c for c in training_data.columns if c != "demand"]], training_data[["demand"]])
validation_data_predictions = neural_model.predict(validation_data[[c for c in training_data.columns if c != "demand"]])
validation_predictions_pd = pd.DataFrame(data=validation_data_predictions,
index=validation_data.index.values,
columns=["prediction"])
result_df = validation_data.join(validation_predictions_pd, how="inner")
r2_error = r2_score(y_true=result_df[["demand"]], y_pred=result_df[["prediction"]], multioutput="uniform_average")
print(r2_error) # outputs 0.23
因此,正如您所看到的,NN的性能非常差。我认为它的性能可以提高,有什么提示吗?也许不是因为NN的性能不好,也许你只是使用了错误的度量来比较它们。通常,信任R2分数来评估具有许多回归器的线性回归模型不是一个好主意:事实上,在模型中放入的回归器越多,R平方()越高 不管怎么说,我认为这个问题更适合我
阿尔贝托,你能让你的例子重现吗?定义
数据
变量,以便其他人可以为您提供切实的帮助。干杯4.更改学习率:learning\u rate
,learning\u rate\u init
。5.切换提前停止