我正在尝试进入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]
会非常感谢你的帮助。
发布于 2018-06-03 07:00:35
在我看来像是整数强制。np.arange
返回一个整数数组,然后就地更新。因为就地操作不能更改数组的数据类型r.h.s。将被转换为int。当您的输入是概率时,这将是全零。
因为你最终会覆盖所有的pred
,你不需要把它初始化成任何东西,所以使用np.empty(dat.shape[0])
代替np.arange
,它默认是一个浮点型数据类型,可以修复你的代码。
两个不相关的附注:
与C使用从零开始的索引不同,在循环的最后一行获取tePred副本的
tePred[1:50]
会跳过第一个元素。https://stackoverflow.com/questions/50661449
复制相似问题