Ошибка Catboost: "TypeError: массив Singleton не может считаться допустимой коллекцией. - PullRequest
0 голосов
/ 19 июня 2020

Я впервые в жизни пытаюсь внедрить 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)
            

1 Ответ

0 голосов
/ 19 июня 2020

Эта ошибка может возникнуть по ряду причин. Например,

  1. Определение переменной, маскирующее объявление вашей функции
  2. Передача позиционного аргумента в качестве аргумента ключевого слова
  3. , если имя столбца в ваших данных совпадает с именем атрибут / метод объекта, содержащего данные.

Я склонен думать, что ваша ошибка, скорее всего, связана со вторым пунктом. Где-то в вашем коде вам может не понадобиться определять kwarg. Я бы порекомендовал вам использовать метод проб и ошибок, в котором вы можете добавить / удалить строку кода, чтобы определить, откуда возникает ошибка.

Вы также можете найти решения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...