首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >尝试将一个向量的子集设置为与另一个向量相等,但所有内容都设置为0

尝试将一个向量的子集设置为与另一个向量相等,但所有内容都设置为0
EN

Stack Overflow用户
提问于 2018-06-03 05:48:39
回答 1查看 30关注 0票数 0

我正在尝试进入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]

会非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 07:00:35

在我看来像是整数强制。np.arange返回一个整数数组,然后就地更新。因为就地操作不能更改数组的数据类型r.h.s。将被转换为int。当您的输入是概率时,这将是全零。

因为你最终会覆盖所有的pred,你不需要把它初始化成任何东西,所以使用np.empty(dat.shape[0])代替np.arange,它默认是一个浮点型数据类型,可以修复你的代码。

两个不相关的附注:

与C使用从零开始的索引不同,在循环的最后一行获取tePred副本的

  • 不是necessary.
  • Python,因此tePred[1:50]会跳过第一个元素。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50661449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档