求助:如何按指定概率正确生成多分类变量?——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
相关产品推荐
相关产品推荐

