Я впервые в жизни пытаюсь внедрить Catboostregresor в свой код, так что пока он меня убивает. Я столкнулся с несколькими ошибками и решаю их. Но в этом последнем есть все, что я пробовал до сих пор.
Наконец, я удалил почти все функции из своего набора данных для отладки, независимо от того, касается ли он набора входных данных или нет. Есть несколько числовых столбцов, названных в num_cols; а также 1 категориальный столбец (который состоит из строк, а не чисел et c.) с именем cat_cols, только оставшиеся столбцы после отладки. Но ошибка по-прежнему сохраняется.
class 'pandas .core.frame.DataFrame' RangeIndex: 395 записей, от 0 до 394 Столбцы данных (всего 5 столбцов): T_CUST_TRI 395 ненулевое значение int32 TRIESTE_CNT 395 ненулевое значение int32 LANECNT 395 ненулевое значение int32 TRADELANE 395 ненулевой категории TIME_DUE 395 ненулевое значение int32 dtypes: category (1), int32 (4)
Я постоянно получаю эту ошибку в конце. Спасибо за вашу помощь и время:
Файл "C: \ Continuum \ anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py", строка 650, в соответствии с X, y, groups = indexable (X, y, groups)
* File "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 lengths = [_num_samples (X) для X в массивах, если X не равен None]
File "C: \ Continuum \ anaconda3 \ lib \ site-packages \ sklearn \ utils \ validation.py ", строка 208, в listcomp lengths = [_num_samples (X) для X в массивах, если X не равно None]
Файл "C: \ Continuum \ anaconda3 \ lib \ site-packages \ sklearn \ utils \ validation.py ", строка 152, в _num_samples "действительная коллекция". % x)
TypeError: массив одиночного массива (объект catboost.core.Pool в 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)