【发布时间】:2021-12-07 11:32:31
【问题描述】:
我使用 sklearn 训练了一个机器学习模型,并希望通过根据 predict_proba 概率对预测进行采样来模拟结果。所以我想做类似的事情
samples = np.random.choice(a = possible_outcomes, size = (n_data, n_samples), p = probabilities)
Where probabilities would be is an (n_data, n_possible_outcomes) array
但是 np.random.choice 只允许 p 参数使用一维数组。我目前已经使用类似于以下实现的 for 循环解决了这个问题
sample_outcomes = np.zeros((len(probs), n_samples))
for i in trange(len(probs)):
sample_outcomes[i, :] = np.random.choice(outcomes, s = n_samples, p=probs[i])
但这相对较慢。任何加快速度的建议将不胜感激!
【问题讨论】:
-
你可以从索引列表中取样,然后从列表中取出元素
-
在您的 for 循环实现示例中,
sample_outcomes显然被初始化为一维数组np.zeros(len(probs)),但您将sample_outcomes索引为二维数组。这似乎很奇怪。 -
@jjramsey 抱歉,这是一个错字,我似乎无法编辑它
-
您遇到这里描述的问题了吗?:meta.stackoverflow.com/questions/315915/…
-
@jjramsey 已修复,谢谢!
标签: python numpy random scikit-learn