我正在尝试将 Catboostregresor 实现到我的代码中,这是我生命中的第一次,所以到目前为止它杀死了我。我遇到了几个错误并解决了它们。但是这最后一个是我迄今为止尝试过的任何东西。
最后,我从我的数据集中删除了几乎所有的特征,以便调试它是否与输入集有关。在 num_cols 下命名了几个数值列;以及在 cat_cols 下命名的 1 个分类列(由字符串组成,而不是数字等),只有调试后的剩余列。但错误仍然存在。
class 'pandas.core.frame.DataFrame'
RangeIndex:395 个条目,0 到 394
数据列(共 5 列):
T_CUST_TRI 395 non-null int32
TRIESTE_CNT 395 non-null int32
LANECNT 395 non-null int32
TRADELANE 395 non-null category
TIME_DUE 395 个非空 int32数据类型
:category(1), int32(4)
我一直在最后得到这个错误。感谢您的帮助和时间:
文件“C:\Continuum\anaconda3\lib\site-packages\sklearn\model_selection_search.py”,第 650 行,适合 X, y, groups = indexable(X, y, groups)
*文件“C:\Continuum\anaconda3\lib\site-packages\sklearn\utils\validation.py”,第 248 行,在可索引的 check_consistent_length(结果)中
文件“C:\Continuum\anaconda3\lib\site-packages\sklearn\utils\validation.py”,第 208 行,check_consistent_length 长度 = [_num_samples(X) for X in arrays if X is not None]
文件“C:\Continuum\anaconda3\lib\site-packages\sklearn\utils\validation.py”,第 208 行,listcomp
长度 = [_num_samples(X) for X in arrays if X is not None]文件“C:\Continuum\anaconda3\lib\site-packages\sklearn\utils\validation.py”,第 152 行,_num_samples
“一个有效的集合。” % X)TypeError: Singleton array array(catboost.core.Pool object at 0x0000025CF69CFD68, dtype=object) 不能被认为是一个有效的集合。
if feature_selection == 1:
models = dict()
paramsrf = {
'est__max_depth':[5, 9, 18, 32],
'est__n_estimators': [10, 50, 100, 200],
'est__min_samples_split': [0.1, 1.0, 2],
'est__min_samples_leaf': [0.1, 0.5, 1]
}
paramscat = {
'est__depth': np.linspace(4,10,4,endpoint=True),
'est__iterations':[250,100,500,1000],
'est__learning_rate':[0.001,0.01,0.1,0.3],
'est__bagging_temperature': [0,5,10,25,50],
'est__border_count':[5,10,20,50,100]
}
#models['rf'] = [RandomForestRegressor(), paramsrf]
models['catb'] = [CatBoostRegressor(cat_features = cat_cols, verbose = 0), paramscat]
for key, value in models.items():
start_time = timeit.default_timer()
scorer = ['neg_mean_squared_error', 'neg_mean_absolute_error', 'r2']
if key == 'catb':
preprocessor = ColumnTransformer(transformers = [('num', MinMaxScaler(feature_range = (0,1)), num_cols)])
all_pipe = Pipeline(steps = [('prep', preprocessor), ('est', value[0])])
search_space = value[1]
pooled = Pool(data = FeaturesData(
num_feature_data = np.array(df_x[num_cols].values, dtype = np.float32),
cat_feature_data = np.array(df_x[cat_cols].values, dtype= object),
num_feature_names = num_cols,
cat_feature_names = cat_cols),
label = np.array(df_y.values.ravel(), dtype = np.float32))
grid_search = GridSearchCV(all_pipe, search_space, cv=5, verbose=1, refit = 'neg_mean_squared_error', scoring = scorer, return_train_score = True, n_jobs = -1)
grid_search.fit(pooled)