Python 计算均方误差返回y_true和y_pred的输出数不同(1!=10)

Python 计算均方误差返回y_true和y_pred的输出数不同(1!=10),python,machine-learning,scikit-learn,mse,Python,Machine Learning,Scikit Learn,Mse,我真的是个新手,学习很深。我想做一项任务,要求:根据测试数据评估模型,并计算预测混凝土强度和实际混凝土强度之间的均方误差。您可以使用Scikit学习中的均方误差函数 这是我的密码: import pandas as pd from tensorflow.python.keras import Sequential from tensorflow.python.keras.layers import Dense from sklearn.model_selection import train_t

我真的是个新手,学习很深。我想做一项任务,要求:根据测试数据评估模型,并计算预测混凝土强度和实际混凝土强度之间的均方误差。您可以使用Scikit学习中的均方误差函数

这是我的密码:

import pandas as pd
from tensorflow.python.keras import Sequential
from tensorflow.python.keras.layers import Dense
from sklearn.model_selection import train_test_split

concrete_data = pd.read_csv('https://cocl.us/concrete_data')

n_cols = concrete_data.shape[1]
model = Sequential()
model.add(Dense(units=10, activation='relu', input_shape=(n_cols-1,)))

model.compile(loss='mean_squared_error',
          optimizer='adam')


y = concrete_data.Cement
x = concrete_data.drop('Cement', axis=1)
xTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size = 0.3)

model.fit(xTrain, yTrain, epochs=50)
现在,为了评估均方误差,我写了以下内容:

from sklearn.metrics import mean_squared_error
predicted_y = model.predict(xTest)
mean_squared_error(yTest, predicted_y)
我得到了这个错误:

y_true and y_pred have different number of output (1!=10)
我预测的y形是:309,10


我在谷歌上搜索了一下,真的找不到解决这个问题的答案。我不知道我的代码出了什么问题。

实际上,您要检查的是y检验的均方误差和预测的y

您必须检查您的模型在x_测试中的预测,即预测:

predicted_y = model.predict(x_test)
然后可以计算误差:

mean_squared_error(y_test, predicted_y)
你们的y_测试数据形状是N,1,但因为你们在输出层放置了10个神经元,你们的模型会做出10个不同的预测,这就是错误

您需要将输出层中的神经元数量更改为1,或者添加一个只有1个神经元的新输出层

下面的代码可能适合您

import pandas as pd
from tensorflow.python.keras import Sequential
from tensorflow.python.keras.layers import Dense
from sklearn.model_selection import train_test_split

concrete_data = pd.read_csv('https://cocl.us/concrete_data')

n_cols = concrete_data.shape[1]
model = Sequential()
model.add(Dense(units=10, activation='relu', input_shape=(n_cols-1,)))           
model.add(Dense(units=1))
model.compile(loss='mean_squared_error',
          optimizer='adam')


y = concrete_data.Cement
x = concrete_data.drop('Cement', axis=1)
xTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size = 0.3)

model.fit(xTrain, yTrain, epochs=50)
y_pred=model.predictx_test.sumaxis=1
试试这个,它对我有效

是的,我以前试过这个,但它返回我这个错误:y_true和y_pred有不同数量的输出1=10您使用的是什么型号?还有,您通过使用“y.shape@yatu”获得了什么?谢谢您的回复。我的模型是连续的,预测y形为309,10这是一个多标签问题吗?你为什么有10个columns@yatu不,不是。我用自己编写的完整代码编辑了我的问题。但也许我弄错了。这是我在ML中的第一个任务,所以我不确定我是否做对了,或者NOTP需要均方误差。不是预测的总和