微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 CatBoostRegressor 中传递分类特征?

如何解决如何在 CatBoostRegressor 中传递分类特征?

我有数据框汽车。其结构描述如下:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 91313 entries,0 to 93099
Data columns (total 16 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   Manufacturer     91313 non-null  string 
 1   Model            91313 non-null  string 
 2   Year             91313 non-null  Int64  
 3   Category         91313 non-null  string 
 4   Mileage          91313 non-null  Int64  
 5   FuelType         91313 non-null  string 
 6   EngineVolume     91313 non-null  float64
 7   DriveWheels      91313 non-null  string 
 8   GearBox          91313 non-null  string 
 9   Doors            91313 non-null  string 
 10  Wheel            91313 non-null  string 
 11  Color            91313 non-null  string 
 12  InteriorColor    91313 non-null  string 
 13  LeatherInterior  91313 non-null  boolean
 14  Price            91313 non-null  Int64  
 15  Clearance        91313 non-null  boolean
dtypes: Int64(3),boolean(2),float64(1),string(10)
memory usage: 11.1 MB

我想制作一个使用 catboostRegressor 预测汽车价格的模型。我是这样尝试的:

train_dataset = cb.Pool(X_train,y_train) 
test_dataset = cb.Pool(X_test,y_test)
cat_features = ['Manufacturer','Model','Category','FuelType','DriveWheels','GearBox','Doors','Wheel','Color','InteriorColor','LeatherInterior','Clearance']
model = cb.catboostRegressor(loss_function = 'RMSE',eval_metric = 'R2',cat_features = cat_features)
grid = {'iterations': [250,300,400],'learning_rate': [0.1,0.2],'depth': [2,4,6,8],'l2_leaf_reg': [0.2,0.5,1,3],'cat_features' : cat_features
       }
model.grid_search(grid,train_dataset)

我也尝试将 cat_features 放入模型和网格中。但这两种情况都没有帮助。

TypeError                                 Traceback (most recent call last)
<ipython-input-34-2cb43214da9d> in <module>
----> 1 train_dataset = cb.Pool(X_train,y_train)
      2 test_dataset = cb.Pool(X_test,y_test)
      3 cat_features = ['Manufacturer','Clearance']
      4 model = cb.catboostRegressor(loss_function = 'RMSE',cat_features = cat_features)
      5 grid = {'iterations': [250,~\anaconda3\lib\site-packages\catboost\core.py in __init__(self,data,label,cat_features,text_features,embedding_features,column_description,pairs,delimiter,has_header,ignore_csv_quoting,weight,group_id,group_weight,subgroup_id,pairs_weight,baseline,feature_names,thread_count)
    586                     )
    587 
--> 588                 self._init(data,thread_count)
    589         super(Pool,self).__init__()
    590 

~\anaconda3\lib\site-packages\catboost\core.py in _init(self,thread_count)
   1100             baseline = np.reshape(baseline,(samples_count,-1))
   1101             self._check_baseline_shape(baseline,samples_count)
-> 1102         self._init_pool(data,thread_count)
   1103 
   1104 

_catboost.pyx in _catboost._PoolBase._init_pool()

_catboost.pyx in _catboost._PoolBase._init_pool()

_catboost.pyx in _catboost._PoolBase._init_features_order_layout_pool()

_catboost.pyx in _catboost._set_features_order_data_pd_data_frame()

TypeError: Cannot convert StringArray to numpy.ndarray

我该如何处理这个错误

解决方法

如果您在 cat_features 中使用功能的名称,您还必须在 features_name 参数中提供它们。否则,在 cat_features 中提供分类特征的索引就足够了。

在你的情况下:

cat_features = [0,1,3,5,7,8,9,10,11,12,13,15]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。