python-3.x - ValueError:未知标签类型:在实现MLPClassifier时

标签 python-3.x neural-network classification model-fitting valueerror

我有带有年,月,日,时,分,秒,Daily_KWH列的数据框。我需要使用神经网络预测每日KWH。请让我知道如何去做

      Daily_KWH_System  year  month  day  hour  minute  second
0          4136.900384  2016      9    7     0       0       0
1          3061.657187  2016      9    8     0       0       0
2          4099.614033  2016      9    9     0       0       0
3          3922.490275  2016      9   10     0       0       0
4          3957.128982  2016      9   11     0       0       0

拟合模型时出现“值错误”。

到目前为止的代码:
X = df[['year','month','day','hour','minute','second']]
y = df['Daily_KWH_System']

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# Fit only to the training data
scaler.fit(X_train)

#y_train.shape
#X_train.shape

X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

from sklearn.neural_network import MLPClassifier

mlp = MLPClassifier(hidden_layer_sizes=(30,30,30))

#y_train = np.asarray(df['Daily_KWH_System'], dtype="|S6") 

mlp.fit(X_train,y_train)

错误:
ValueError: Unknown label type: (array([  2.27016856e+02,   3.02173014e+03,   4.29404190e+03,
     2.41273427e+02,   1.76714247e+02,   4.23374425e+03,

最佳答案

首先,这是一个回归问题,而不是分类问题,因为Daily_KWH_System列中的值未形成一组标签。相反,它们似乎是(至少基于提供的示例)实数。

如果您想将其作为分类问题处理,则根据sklearn documentation:

When doing classification in scikit-learn, y is a vector of integers or strings.



在您的情况下,y是浮点数的向量,因此会出现错误。因此,代替线
y = df['Daily_KWH_System']

写线
y = np.asarray(df['Daily_KWH_System'], dtype="|S6")

这样就可以解决问题。 (您可以在此处阅读有关此方法的更多信息:Python RandomForest - Unknown label Error)

但是,由于在这种情况下回归比较合适,因此请代替上述更改,而不是
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(hidden_layer_sizes=(30,30,30))


from sklearn.neural_network import MLPRegressor
mlp = MLPRegressor(hidden_layer_sizes=(30,30,30))

该代码将运行而不会引发错误(但是肯定没有足够的数据来检查我们获得的模型是否运行良好)。

话虽这么说,我认为这不是为该问题选择功能的正确方法。

在这个问题中,我们处理形成时间序列的实数序列。我们可以选择的一项合理功能是自起点以来经过的秒数(或分钟\小时\天等)。由于此特定数据仅包含天,月和年(其他值始终为0),因此我们可以选择从开始算起经过的天数作为特征。然后,您的数据框将如下所示:
      Daily_KWH_System  days_passed 
0          4136.900384    0   
1          3061.657187    1     
2          4099.614033    2  
3          3922.490275    3   
4          3957.128982    4  

您可以将days_passed列中的值作为特征,并将Daily_KWH_System中的值作为目标。您还可以添加一些指标功能。例如,如果您认为年底可能会影响目标,则可以添加指示符功能来指示月份是否为12月。

如果数据确实是每天的数据(至少在此示例中每天有一个数据点),并且您想使用神经网络解决此问题,那么另一种合理的方法是将其作为时间序列来处理,并尝试拟合递归神经网络。网络。以下是几篇很棒的博客文章,描述了这种方法:

http://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/

http://machinelearningmastery.com/time-series-forecasting-long-short-term-memory-network-python/

关于python-3.x - ValueError:未知标签类型:在实现MLPClassifier时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42713276/

相关文章:

python - 理解 python 语言引用中描述的 python 切片语法

r - 运行 glinternet 时出错 : a statistical function for automatic model selection using interaction terms by Stanford's professor T. Hastie

python - 等长样本的音频分类/'vocoder' thingy

python - 如何使用任何分类器对每个数据点由一组浮点值组成的数据进行分类?

python - 如何将 subprocess.call 的结果打印到 python 脚本中的文件

Python 从训练集中预测特征

machine-learning - 通过异步训练更新 SGD 权重空间

python - tensorflow 预测序列

python - TensorFlow 优化器是否最小化 API 实现的小批量?

python - 如果API没有返回数据,如何跳到Python中的另一个循环?