我正在研究 K-Prototypes,以创建我们公司客户群的细分。下面是我的代码。我已将所有分类变量分配给 catColumnsPos,其中大部分是二进制的。但是,我确实添加了七个非二进制变量。例如,一个变量称为 Daypart,其值类似于“Morning Customer”、“AFternoon Customer”、“Evening Customer”。当我添加非二进制变量时,出现“分类索引大于列数”错误。
我的理解是您不必为 K 原型创建虚拟变量。在模型代码下方,我将放置 catColumnsPos 代码以备不时之需。也就是说,我已经计算了两次列并且它们匹配。
##Run K Prototypes Model
kproto = KPrototypes(n_clusters= 6, init='Cao', n_jobs = 4)
clusters = kproto.fit_predict(K_Prototypes_Casual_Segmentation_df_Prepared, categorical=catColumnsPos)`
#Categorical Variables
Segmentation_Prepared_cat[[
#'BREAKFAST_IND',
'CANDY_PURCHASE_IND_MAX',
'CASHTRANSACTIONS',
'COFFEE_PURCHASE_IND_MAX',
'CURRENT_APP_USER',
'DEAL_SEEKING_FLAG',
#'DINNER_IND',
'ENERGY_DRINKS_PURCHASE_IND_MAX',
'FOUNTAIN_PURCHASE_IND_MAX',
'GASDISCOUNT_IND',
#'LUNCH_IND',
'OPEN_AIR_COOLER_PURCHASE_IND_MAX',
'PRIVATELABEL_IND',
'PROMO_IND',
'RESTAURANT_PURCHASE_IND_MAX',
'ROLLER_GRILL_PURCHASE_IND_MAX',
'SALTY_SNACK_PURCHASE_IND_MAX',
'UNDET_CUST_FLG',
'WATER_PURCHASE_IND_MAX',
'MOBILE_DEALS_CUSTOMER_FLG',
'LOCAL_CUST_FLG',
'NONLOCAL_CUST_FLG',
'CIGS_PURCHASE_IND_MAX',
'GENERAL_MERCH_PURCHASE_IND_MAX',
'HIGHMERCHIND',
'AFTERNOON_CUSTOMER_TYPE',
'NIGHT_CUSTOMER_TYPE',
'WEEKEND_TYPE'
]]=Segmentation_Prepared_cat[[
#'BREAKFAST_IND',
'CANDY_PURCHASE_IND_MAX',
'CASHTRANSACTIONS',
'COFFEE_PURCHASE_IND_MAX',
'CURRENT_APP_USER',
'DEAL_SEEKING_FLAG',
#'DINNER_IND',
'ENERGY_DRINKS_PURCHASE_IND_MAX',
'FOUNTAIN_PURCHASE_IND_MAX',
'GASDISCOUNT_IND',
#'LUNCH_IND',
'OPEN_AIR_COOLER_PURCHASE_IND_MAX',
'PRIVATELABEL_IND',
'PROMO_IND',
'RESTAURANT_PURCHASE_IND_MAX',
'ROLLER_GRILL_PURCHASE_IND_MAX',
'SALTY_SNACK_PURCHASE_IND_MAX',
'UNDET_CUST_FLG',
'WATER_PURCHASE_IND_MAX',
'MOBILE_DEALS_CUSTOMER_FLG',
'LOCAL_CUST_FLG',
'NONLOCAL_CUST_FLG',
'CIGS_PURCHASE_IND_MAX',
'GENERAL_MERCH_PURCHASE_IND_MAX',
'HIGHMERCHIND',
'AFTERNOON_CUSTOMER_TYPE',
'NIGHT_CUSTOMER_TYPE',
'WEEKEND_TYPE'
]].astype(str)
catColumnsPos = [Segmentation_Prepared_cat.columns.get_loc(col) for col in list(Segmentation_Prepared_cat.select_dtypes('object', 'category').columns)]
我想使用几个不是二元变量的分类变量来运行模型。我的理解是我不需要为这些创建虚拟变量,但是,只有在包含它们时我才会收到错误消息。