我正在学习keras,并且想了解如何将分类器(顺序的)应用于数据集中的所有行,而不仅仅是将剩余的x%用于测试验证。
我遇到的困惑是,当我定义数据拆分时,我将有一部分用于训练和测试。如何将模型应用于完整数据集以向我显示每一行的预测值?我的最终目标是为数据集中的每个客户生成一个串联的预测值。
dataset = pd.read_csv('BankCustomers.csv')
X = dataset.iloc[:, 3:13]
y = dataset.iloc[:, 13]
feature_train, feature_test, label_train, label_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
sc = StandardScaler()
feature_train = sc.fit_transform(feature_train)
feature_test = sc.transform(feature_test)
为完整起见,分类器如下所示。
# Initialising the ANN
classifier = Sequential()
# Adding the input layer and the first hidden layer
classifier.add(Dense(activation="relu", input_dim=11, units=6, kernel_initializer="uniform"))
# Adding the second hidden layer
classifier.add(Dense(activation="relu", units=6, kernel_initializer="uniform"))
# Adding the output layer
classifier.add(Dense(activation="sigmoid", units=1, kernel_initializer="uniform"))
# Compiling the ANN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
# Fitting the ANN to the Training set
classifier.fit(feature_train, label_train, batch_size = 10, nb_epoch = 100)
我正在做的课程将建议如何获得如下所示的测试集的准确性和预测的方法,而不是完整的批次。
# Predicting the Test set results
label_pred = classifier.predict(feature_test)
label_pred = (label_pred > 0.5) # FALSE/TRUE depending on above or below 50%
cm = confusion_matrix(label_test, label_pred)
accuracy=accuracy_score(label_test,label_pred)
我尝试合并适用于训练和测试数据的模型,但是随后我不确定如何确定哪个索引与原始数据集匹配(即,我不知道20%的测试数据中的哪个相对于原始设置)。
如果这个问题是多余的,我事先表示歉意,我一直在通过堆栈和整个课程寻找答案,但到目前为止还没有运气。
答案 0 :(得分:1)
您可以利用pandas索引将结果排序回原始顺序。
对每个feature_train
和feature_test
进行预测(尽管不确定为什么要对feature_train
进行预测。)
为每个feature_train
和feature_test
添加一个新列,其中将包含预测
feature_train["predictions"] = pd.Series(classifier.predict(feature_train))
feature_test["predictions"] = pd.Series(classifier.predict(feature_test))
如果您查看上面每个数据框的索引,您会发现它们被改组了(由于train_test_split
)。
您现在可以将它们连接起来,使用sort_index
,然后检索predictions
列,该列将根据初始数据帧(X
)中出现的顺序进行预测。>
pd.concat([feature_train, feature_test], axis=0).sort_index()