尝试将矢量的子集设置为等于另一个矢量,但所有内容都设置为0

时间:2018-06-02 21:48:39

标签: python python-3.x validation numpy numpy-ndarray

我试图进入Python进行统计,来自R背景。我已经为我一直在使用的数据集设置了一个交叉验证脚本:

cvIndex = np.remainder(np.arange(dat.shape[0]), 10)
pred = np.arange(dat.shape[0])

for i in range(10):
    #get training and test set
    trFeatures = dat[cvIndex != i, :]
    teFeatures = dat[cvIndex == i, :]
    trY = y[cvIndex != i]

    #fit random forest
    rf = RandomForestClassifier(n_estimators = 500, random_state = 42)
    rf.fit(trFeatures, trY);

    #make and store prediction
    tePred = rf.predict_proba(teFeatures)[:, 1]
    pred[cvIndex == i] = tePred.copy()

print(pred)

返回全零的向量。据我所知,这是将矢量的子集设置为等于另一个矢量的正确方法(事实上,我已尝试使用一些虚拟矢量执行此操作,但成功)。另一个明显的潜在问题是tePred可能全为零,但是提取任何特定情况(i = 9),例如,给出了:

i = 9
#get training and test set
trFeatures = dat[cvIndex != i, :]
teFeatures = dat[cvIndex == i, :]
trY = y[cvIndex != i]

#fit random forest
rf = RandomForestClassifier(n_estimators = 500, random_state = 42)
rf.fit(trFeatures, trY);

#make and store prediction
tePred = rf.predict_proba(teFeatures)[:, 1]

print(tePred[1:50])

[ 0.264  0.034  0.02   0.002  0.     0.014  0.     0.     0.     0.102
  0.14   0.     0.024  0.002  0.     0.002  0.004  0.     0.044  0.     0.382
  0.042  0.     0.004  0.     0.112  0.002  0.074  0.     0.016  0.012
  0.004  0.     0.     0.006  0.002  0.01   0.     0.     0.     0.     0.004
  0.002  0.002  0.044  0.004  0.     0.     0.004]

真的很感激一些帮助。

1 个答案:

答案 0 :(得分:2)

看起来像整数强制给我。 np.arange返回一个整数数组,然后您就地更新。由于就地操作无法更改数组的r.h.s.将转换为int。输入是概率,这将全部为零。

由于您最终覆盖了所有pred,因此无需将其初始化为任何内容,因此使用默认为float dtype而不是np.empty(dat.shape[0])的{​​{1}}应修复代码

两个不相关的附注:

  • 不需要在循环的最后一行获取tePred的副本。
  • 像C这样的Python使用从零开始的索引,因此np.arange会跳过第一个元素。