我试图进入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]
真的很感激一些帮助。
答案 0 :(得分:2)
看起来像整数强制给我。 np.arange
返回一个整数数组,然后您就地更新。由于就地操作无法更改数组的r.h.s.将转换为int。输入是概率,这将全部为零。
由于您最终覆盖了所有pred
,因此无需将其初始化为任何内容,因此使用默认为float dtype而不是np.empty(dat.shape[0])
的{{1}}应修复代码
两个不相关的附注:
np.arange
会跳过第一个元素。