K 原型模型给我一个断言错误:分类索引大于列数

问题描述 投票:0回答:0

我正在研究 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)]


我想使用几个不是二元变量的分类变量来运行模型。我的理解是我不需要为这些创建虚拟变量,但是,只有在包含它们时我才会收到错误消息。

python machine-learning cluster-analysis
© www.soinside.com 2019 - 2024. All rights reserved.