TypeError:__init __()在Python中为CatBoost获得了意外的关键字参数'early_stopping_rounds' - python

当我尝试运行CatBoost算法时出现此错误。这是参数之一,所以我不明白为什么在注释掉early_stopping_rounds时会发生此错误,但cat_features参数却出现了相同的错误


from catboost import CatBoostClassifier

categorical_indexes = np.where(X.dtypes == 'object')[0]
X.drop(["id"], axis = 1, inplace = True)

params = {'loss_function':'Logloss', 
          'eval_metric':'AUC', 
          'verbose': 200, 
          "early_stopping_rounds": 200,
          "cat_features": categorical_indexes,
          'random_seed': 17}
cat = CatBoostClassifier(**params)
cat.fit(X,y)

编辑:
现在通过pip升级了catboost软件包,我遇到了另一个错误
但是,在我的代码中,我正在过滤类别值,然后将其分配给cat_features参数

TypeError                                 Traceback (most recent call last)
_catboost.pyx in _catboost.get_float_feature()

_catboost.pyx in _catboost._FloatOrNan()

_catboost.pyx in _catboost._FloatOrNanFromString()

TypeError: Cannot convert 'b'Triangle'' to float

During handling of the above exception, another exception occurred:

CatBoostError                             Traceback (most recent call last)
<ipython-input-13-1190699fd260> in <module>
     74 
     75 cat = CatBoostClassifier(loss_function='Logloss', eval_metric='AUC', verbose=200, early_stopping_rounds=200, cat_features=np.array([ 6,  7,  8,  9, 10, 11, 12, 13, 14, 18, 19, 20]), random_seed=17)
---> 76 cat.fit(X,y)
     77 
     78 

c:\users\m\appdata\local\programs\python\python37\lib\site-packages\catboost\core.py in fit(self, X, y, cat_features, text_features, sample_weight, baseline, use_best_model, eval_set, verbose, logging_level, plot, column_description, verbose_eval, metric_period, silent, early_stopping_rounds, save_snapshot, snapshot_file, snapshot_interval, init_model)
   3786         self._fit(X, y, cat_features, text_features, None, sample_weight, None, None, None, None, baseline, use_best_model,
   3787                   eval_set, verbose, logging_level, plot, column_description, verbose_eval, metric_period,
-> 3788                   silent, early_stopping_rounds, save_snapshot, snapshot_file, snapshot_interval, init_model)
   3789         return self
   3790 

c:\users\m\appdata\local\programs\python\python37\lib\site-packages\catboost\core.py in _fit(self, X, y, cat_features, text_features, pairs, sample_weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, use_best_model, eval_set, verbose, logging_level, plot, column_description, verbose_eval, metric_period, silent, early_stopping_rounds, save_snapshot, snapshot_file, snapshot_interval, init_model)
   1670             use_best_model, eval_set, verbose, logging_level, plot,
   1671             column_description, verbose_eval, metric_period, silent, early_stopping_rounds,
-> 1672             save_snapshot, snapshot_file, snapshot_interval, init_model
   1673         )
   1674         params = train_params["params"]

c:\users\m\appdata\local\programs\python\python37\lib\site-packages\catboost\core.py in _prepare_train_params(self, X, y, cat_features, text_features, pairs, sample_weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, use_best_model, eval_set, verbose, logging_level, plot, column_description, verbose_eval, metric_period, silent, early_stopping_rounds, save_snapshot, snapshot_file, snapshot_interval, init_model)
   1558 
   1559         train_pool = _build_train_pool(X, y, cat_features, text_features, pairs, sample_weight, group_id,
-> 1560                                        group_weight, subgroup_id, pairs_weight, baseline, column_description)
   1561         if train_pool.is_empty_:
   1562             raise CatBoostError("X is empty.")

c:\users\m\appdata\local\programs\python\python37\lib\site-packages\catboost\core.py in _build_train_pool(X, y, cat_features, text_features, pairs, sample_weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, column_description)
    968             raise CatBoostError("y has not initialized in fit(): X is not catboost.Pool object, y must be not None in fit().")
    969         train_pool = Pool(X, y, cat_features=cat_features, text_features=text_features, pairs=pairs, weight=sample_weight, group_id=group_id,
--> 970                           group_weight=group_weight, subgroup_id=subgroup_id, pairs_weight=pairs_weight, baseline=baseline)
    971     return train_pool
    972 

c:\users\m\appdata\local\programs\python\python37\lib\site-packages\catboost\core.py in __init__(self, data, label, cat_features, text_features, column_description, pairs, delimiter, has_header, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, feature_names, thread_count)
    369                         )
    370 
--> 371                 self._init(data, label, cat_features, text_features, pairs, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, feature_names)
    372         super(Pool, self).__init__()
    373 

c:\users\m\appdata\local\programs\python\python37\lib\site-packages\catboost\core.py in _init(self, data, label, cat_features, text_features, pairs, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, feature_names)
    949             baseline = np.reshape(baseline, (samples_count, -1))
    950             self._check_baseline_shape(baseline, samples_count)
--> 951         self._init_pool(data, label, cat_features, text_features, pairs, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, feature_names)
    952 
    953 

_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()

_catboost.pyx in _catboost.create_num_factor_data()

_catboost.pyx in _catboost.get_float_feature()

CatBoostError: Bad value for num_feature[non_default_doc_idx=0,feature_idx=5]="Triangle": Cannot convert 'b'Triangle'' to float

参考方案

似乎您错过了为类别特征的特征索引或特征名称指定为“ feature_idx = 5”且值为“ Triangle”的情况。 Catboost尝试将二进制字符串值转换为float并获得了CatBoostError

构造类categorical_indexes时,可以将分类特征索引或名称更新为变量CatBoostClassifier,或者可以提供分类特征索引列表或cat_features的参数fit()的名称

单行的'if'/'for'语句是否使用Python样式好? - python

我经常在这里看到某人的代码,看起来像是“单线”,这是一条单行语句,以传统的“if”语句或“for”循环的标准方式执行。我在Google周围搜索,无法真正找到可以执行的搜索类型?任何人都可以提出建议并最好举一些例子吗?例如,我可以一行执行此操作吗?example = "example" if "exam" in exam…

为什么使用'=='或'is'比较字符串有时会产生不同的结果? - python

我有一个Python程序,其中将两个变量设置为'public'值。在条件表达式中,我有比较var1 is var2失败,但如果将其更改为var1 == var2,它将返回True。现在,如果我打开Python解释器并进行相同的“是”比较,则此操作成功。>>> s1 = 'public' >>…

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

python JSON对象必须是str,bytes或bytearray,而不是'dict - python

在Python 3中,要加载以前保存的json,如下所示:json.dumps(dictionary)输出是这样的{"('Hello',)": 6, "('Hi',)": 5}当我使用json.loads({"('Hello',)": 6,…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…