【发布时间】:2017-03-23 19:04:15
【问题描述】:
我现在有点迷茫。我正确初始化了一个空的 numpy 数组,我相信我正确使用了 np.append 函数
Preds = np.empty(shape = (X_test.shape[0],10))
kf = KFold(n = X_train.shape[0], n_folds=10, shuffle = True)
for kf_train, kf_test in kf:
X_train_kf = X_train.iloc[kf_train]
Y_train_kf = Y_train.iloc[kf_train]
dt = tree.DecisionTreeClassifier(max_depth=2)
dt.fit(X_train_kf, Y_train_kf)
Preds = np.append(Preds,dt.predict(X_test))
print Preds
只是一些附加信息:
X_test 的形状为 (9649, 24)
(运行后)Preds 的形状为 (192980,)
在这个循环中,Preds 的形状应该是 (9649,10)
任何建议将不胜感激。
编辑:这是更新的解决方案
Preds = []
kf = KFold(n = X_train.shape[0], n_folds=20, shuffle = True)
for kf_train, kf_test in kf:
X_train_kf = X_train.iloc[kf_train]
Y_train_kf = Y_train.iloc[kf_train]
dt = tree.DecisionTreeClassifier(max_depth=2)
dt.fit(X_train_kf, Y_train_kf)
Preds.append(dt.predict(X_test))
Preds = np.vstack(Preds)
【问题讨论】:
-
来自 numpy.append 文档:'axis : int, optional 附加值的轴。如果未给出axis,则arr和values在使用前都被展平'
-
你检查过 dt.predict(X_test) 的形状了吗?
-
最好避免使用 append。相反,只需将每个数组添加到 python 列表中,然后在最后使用 np.vstack 或 np.hstack 将它们展平为单个数组。
-
@MaartenFabré 它是 (9649, ) 我试图将轴更改为 1,但出现此错误:
ValueError: all the input arrays must have same number of dimensions -
@Erotemic,我不确定我是否完全理解您的建议,但我想保持 Preds 二维。最后,我想查看每一列中的预测,看看哪些预测最常发生。如果数组是二维的,那会更容易