【问题标题】:Append inverse_scale NN output and model.predict_classes output into a csv将 inverse_scale NN 输出和 model.predict_classes 输出附加到 csv 中
【发布时间】:2018-09-09 00:44:49
【问题描述】:

我已经训练了一个神经网络,我想将预测值附加到 inverse_scaled 测试数据中,这样我就可以检查预测与原始特征值的对比。但是,当我运行代码时,以下行:

Xtest["prediciton"] = pred

抛出以下错误:

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

我相信这是因为在以下行之后,Xtest 变成了一个 np.array:

Xtest = scaler.inverse_transform(Xtest)

这是完整的代码:

import keras
import numpy
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
import pandas as pd
import numpy as np
import matplotlib
from matplotlib import style
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from IPython.core.display import display
from sklearn.preprocessing import MinMaxScaler

matplotlib.style.use('ggplot')

data_num = pd.read_csv('mult_test.csv')
print(data_num.head(n=10))

scaler = MinMaxScaler(feature_range=(0, 1))
features = data_num.drop(['Label1'], axis=1, errors='ignore')
features = pd.DataFrame(scaler.fit_transform(features))
scale_num_data = pd.concat([data_num['Label1'], features], axis=1)


dtrain, dtest = train_test_split(scale_num_data, test_size=0.25, random_state=570)
X = dtrain.drop(['Label1'], axis=1, errors='ignore')
y = dtrain['Label1']
Xtest = dtest.drop(['Label1'], axis=1, errors='ignore')
Xtest.to_csv('X_test_1.csv')
ytest = dtest['Label1']


model = Sequential([
    Dense(10, input_shape=(4, ), activation='relu'),
    Dense(32, activation='relu'),
    Dense(10, activation='softmax')
])

model.summary()
model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(X, y, epochs=10, batch_size=10, shuffle=True)


scores = model.evaluate(Xtest, ytest, batch_size=5)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))


pred = model.predict_classes(Xtest)
Xtest = scaler.inverse_transform(Xtest)
Xtest["prediciton"] = pred
Xtest.to_csv("Xtest_predict.csv")

谢谢你们的帮助,伙计们!

【问题讨论】:

    标签: python pandas tensorflow neural-network keras


    【解决方案1】:

    scikit 的 transformers 不保留 panda 数据帧。因此,当您通过transforminverse_transform 传递一个时,np.ndarray 就会出现。

    您尝试访问Xtest 的项目'prediction',但这不是np.ndarray 的有效位置项目。

    要解决这个问题,只需创建一个新的DataFrame 或不要将scaler.inverse_transform 直接转储到Xtest

    results = pd.DataFrame({
      "data": scaler.inverse_transform(Xtest),
      "predictions": model.predict_classes(Xtest)
    })
    results.to_csv("Xtest_predict.csv")
    

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 2011-11-15
      • 2023-03-28
      相关资源
      最近更新 更多