Python 预测不准确整数的MSE线性回归

Python 预测不准确整数的MSE线性回归,python,tensorflow,machine-learning,integer,prediction,Python,Tensorflow,Machine Learning,Integer,Prediction,我有一个模型,其中我有一个形状类似于(3000,270,1)的数据集。该数据包含270个独立整数的2263个样本。我的标签是介于-4.0和1.5之间的浮点,每个标签对应于每个样本。这是我的密码: sample_submission = pd.read_csv('../input/commonlitreadabilityprize/sample_submission.csv') test_file = pd.read_csv('../input/commonlitreadabilityprize/

我有一个模型,其中我有一个形状类似于(3000,270,1)的数据集。该数据包含270个独立整数的2263个样本。我的标签是介于-4.0和1.5之间的浮点,每个标签对应于每个样本。这是我的密码:

sample_submission = pd.read_csv('../input/commonlitreadabilityprize/sample_submission.csv')
test_file = pd.read_csv('../input/commonlitreadabilityprize/test.csv')
test_raw_data = np.array(test_file['excerpt'])
train_file = pd.read_csv('../input/commonlitreadabilityprize/train.csv')
train_raw_data = np.array(train_file['excerpt'])
train_labels = np.array(train_file['target'])
train_data = []
test_data = []
vocab = {'.': 0, ',': 1, '?': 2, '!': 3, ':': 4, ';': 5, ' ': 6}
punctuation = ['.', ',', '?', '!', ':', ';']
count = 7

# for i in range(len(train_labels)):
#     train_labels[i] = train_labels[i] + 5

for i in range(len(train_raw_data)):
    temp = train_raw_data[i].split()
    for i in temp:
        if i[-1] == punctuation:
            vocab[i[:-1].lower()] = count
        else:
            vocab[i.lower()] = count
        count += 1

for i in range(len(train_raw_data)):
    temp = train_raw_data[i].split()
    temptemp = []
    for _ in range(135):
        temptemp.append(vocab[temp[_].lower()])
        temptemp.append(vocab[' '])
    train_data.append(temptemp)

print(len(vocab))

print(len(train_labels))
train_data = np.asarray(train_data)
train_data = train_data / 25000
train_data = np.asarray(train_data).astype('float32')
train_data = train_data.reshape(-1, 270, 1)
val_data = train_data[:567]
test_data = train_data[2830:]
train_data = train_data[567:2830]
val_labels = train_labels[:567]
test_labels = train_labels[2830:]
train_labels = train_labels[567:2830]
train_data = tf.cast(train_data, dtype='float32')
train_labels = tf.cast(train_labels, dtype='float32')
val_data = tf.cast(val_data, dtype='float32')
val_labels = tf.cast(val_labels, dtype='float32')
print(train_data.shape)
print(train_labels.shape)
print(val_data.shape)
print(val_labels.shape)

model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(train_data.shape[1:])))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(1, activation='linear'))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss=tf.keras.losses.MeanSquaredError(), metrics=['mean_squared_error'])
history = model.fit(train_data, train_labels, epochs=10, batch_size=8, validation_data=(val_data, val_labels))
    
for i in range(len(test_labels)):
    print(model.predict(test_data[i]))
    print(test_labels[i])
我遇到的问题是,当我预测值时,我得到的整数值(我更喜欢浮点数)与我得到的验证集的0.77毫秒读数相差很远。我有没有办法解决这个问题,以获得更准确的结果和浮点预测,而不是整数预测? 我当前的模型输出:

Epoch 1/10
282/282 [==============================] - 2s 5ms/step - loss: 1.8799 - mean_squared_error: 1.8799 - val_loss: 0.7834 - val_mean_squared_error: 0.7834
Epoch 2/10
282/282 [==============================] - 1s 4ms/step - loss: 1.1622 - mean_squared_error: 1.1622 - val_loss: 0.8459 - val_mean_squared_error: 0.8459
Epoch 3/10
282/282 [==============================] - 1s 4ms/step - loss: 1.1546 - mean_squared_error: 1.1546 - val_loss: 0.7816 - val_mean_squared_error: 0.7816
Epoch 4/10
282/282 [==============================] - 1s 4ms/step - loss: 1.0844 - mean_squared_error: 1.0844 - val_loss: 0.7771 - val_mean_squared_error: 0.7771
Epoch 5/10
282/282 [==============================] - 1s 4ms/step - loss: 1.1679 - mean_squared_error: 1.1679 - val_loss: 0.7787 - val_mean_squared_error: 0.7787
Epoch 6/10
282/282 [==============================] - 1s 4ms/step - loss: 1.1232 - mean_squared_error: 1.1232 - val_loss: 0.7759 - val_mean_squared_error: 0.7759
Epoch 7/10
282/282 [==============================] - 1s 4ms/step - loss: 1.1284 - mean_squared_error: 1.1284 - val_loss: 0.7919 - val_mean_squared_error: 0.7919
Epoch 8/10
282/282 [==============================] - 1s 4ms/step - loss: 1.1032 - mean_squared_error: 1.1032 - val_loss: 0.7759 - val_mean_squared_error: 0.7759
Epoch 9/10
282/282 [==============================] - 1s 4ms/step - loss: 1.1620 - mean_squared_error: 1.1620 - val_loss: 0.7783 - val_mean_squared_error: 0.7783
Epoch 10/10
282/282 [==============================] - 1s 4ms/step - loss: 1.1698 - mean_squared_error: 1.1698 - val_loss: 0.7804 - val_mean_squared_error: 0.7804

出于某种原因,
model.predict(test_data[i])
返回一个形状(1270,1)的numpy数组。有人能解释一下为什么会这样吗?这个模型不应该只有一个值吗?

您正在打印返回索引的
np.argmax()
的结果。为什么期望从中得到一个浮点值呢?所以np.argmax()返回预测的索引值,这是正确的预测?例如,my model.predict()返回一个包含270个浮点值的列表(由于某些原因,所有浮点值均为负数)。预测形状为(1270,1),请详细说明。
argmax()
返回最高值的索引。我不知道这与您的模型有什么关系-我只知道它永远不会是一个浮点。我也不知道为什么您的回归模型的预测是一个列表…这似乎很奇怪。哦,这更有意义。那么您将如何查找预测?请删除任何注释掉的内容,而不是删除如果要求我们忽略它,那么简单地把代码扔到这里是不行的,看看如何创建一个。