由于数据框中的索引列

时间:2018-09-23 10:50:43

标签: python tensorflow keras

我希望你们身体健康。我正在研究keras库python 3,用于解决回归问题。当我将数据集加载到panads数据框中时,它会自动添加索引列,该列可以重置,但是在我在该数据集上训练模型时无法删除它,它的准确性非常低(0.002),请您帮我解决这个问题。 这是我的代码。

import keras 
from keras.models import Sequential
from keras.layers import Dense
from subprocess import check_output
import pandas as pd
import numpy as np

print(check_output(["ls", "../input"]).decode("utf8"))

dataset=pd.read_csv("../input/Concrete_Data_Yeh.csv")
dataset=pd.read_csv("../input/Concrete_Data_Yeh.csv")
data=dataset.drop(["flyash"],axis=1)
msk = np.random.rand(len(data)) < 0.8
train = data[msk]
test = data[~msk]
y_train=train[['csMPa']]
x_train=train.drop(["csMPa"],axis=1)
y_test=test[['csMPa']]
x_test=test.drop(["csMPa"],axis=1)
no_of_colums=x_train.shape[1]

model=Sequential()
model.add(Dense(5,activation='relu',input_shape=(no_of_colums,)))
model.add(Dense(3,activation='relu'))
model.add(Dense(1))
model.compile(optimizer='adam',loss='mean_squared_error',metrics=['accuracy'])
model.fit(x_train,y_train,epochs=20)
prediction=model.predict(x_test)
score = model.evaluate(x_test, y_test, verbose=0)

print('Test loss:', score[0])
print('Test accuracy:', score[1])

1 个答案:

答案 0 :(得分:0)

我建议使用

df = df.values

df现在成为numpy ndarray: 这将有效地删除索引列和列名,因此您需要执行以下操作

y_train=train[['csMPa']].values
x_train=train.drop(["csMPa"],axis=1).values

现在我并不是说这将提高您的准确性,但是正如您要求的那样,它将删除索引列,这可能会帮助您解决问题,无论如何以这种方式传递数据会更好

注意:将精度作为回归指标不正确,精度更适合分类,您不应该将指标设置为精度,可以使用MSAE之类的东西,可以参考https://medium.com/usf-msds/choosing-the-right-metric-for-machine-learning-models-part-1-a99d7d7414e4

着眼于使误差最小化,而不是使准确性最大化,而是使分类的准确性最大化,而不是回归