You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何按指定概率正确生成多分类变量?——numpy.random.choice概率匹配异常问题

按指定概率生成分类数据:修复概率不匹配问题

嘿,我一眼就看出问题所在啦!你写代码的时候没给概率参数指定参数名,导致参数传错位置了,这才出现了和预期完全相反的结果。

问题根源

np.random.choice的参数顺序是:(a, size=None, replace=True, p=None)。你把概率列表直接放在了第三个参数的位置,而这个位置对应的是replace(控制是否允许重复抽样的布尔值),不是概率参数p。numpy收到这个错误的参数后,不仅没应用你设定的概率,还触发了异常的抽样逻辑,最终导致分类频率完全不符合预期。

修复后的代码

只需要给概率列表加上p=的参数名,明确告诉numpy这是抽样概率就可以了:

import numpy as np
import pandas as pd

# 定义分类类型和对应概率
income_categories = [
    "TypeOfIncome_1", "TypeOfIncome_2", "TypeOfIncome_3",
    "TypeOfIncome_4", "TypeOfIncome_5", "TypeOfIncome_6",
    "TypeOfIncome_7", "TypeOfIncome_8"
]
category_probs = [0.6, 0.2, 0.05, 0.03, 0.03, 0.03, 0.03, 0.03]

# 显式指定p参数生成符合概率的数据集
df_categories = pd.DataFrame(
    np.random.choice(income_categories, size=100, p=category_probs),
    columns=['source_of_income']
)

# 查看生成结果和频率统计
df_categories
print(df_categories['source_of_income'].value_counts())

额外建议

以后调用参数较多的函数时,尽量显式指定参数名,这样既能避免参数顺序搞错的问题,也能让代码更易读,别人看你的代码时也能一眼明白每个参数的作用。

内容的提问来源于stack exchange,提问作者silent_hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:52:38