Использование numpy.ndarray против Pandas Dataframe в методе sklearn's .fit () - PullRequest
0 голосов
/ 21 января 2019

Я использую модель логистической регрессии для своих данных.Из того, что я понимаю (например, отсюда: Pandas против Numpy Dataframes ), лучше использовать numpy.ndarray со sklearn, чем использовать Pandas Dataframes.Это можно сделать с помощью атрибута .values ​​на фрейме данных.Я сделал это, но получил ValueError: Указание столбцов с использованием строк поддерживается только для панд DataFrames.Очевидно, я делаю что-то не так с моим кодом.Любые идеи приветствуются.

Как ни странно, мой код работает, когда я не использую .values, и просто использую X в качестве DataFrame и y в качестве серии Pandas.

# We will train our classifier with the following features:
# Numeric features to be scaled: LIMIT_BAL, AGE, PAY_X, BIL_AMTX, and PAY_AMTX
# Categorical features: SEX, EDUCATION, MARRIAGE

# We create the preprocessing pipelines for both numeric and categorical data
numeric_features = ['LIMIT_BAL', 'AGE', 'PAY_1', 'PAY_2', 'PAY_3', 'PAY_4', 'PAY_5', 'PAY_6', 
                 'BILL_AMT1', 'BILL_AMT2', 'BILL_AMT3', 'BILL_AMT4', 'BILL_AMT5', 'BILL_AMT6', 
                 'PAY_AMT1', 'PAY_AMT2', 'PAY_AMT3', 'PAY_AMT4', 'PAY_AMT5', 'PAY_AMT6']

data['PAY_1'] = data.PAY_1.astype('float64')
data['PAY_2'] = data.PAY_2.astype('float64')
data['PAY_3'] = data.PAY_3.astype('float64')
data['PAY_4'] = data.PAY_4.astype('float64')
data['PAY_5'] = data.PAY_5.astype('float64')
data['PAY_6'] = data.PAY_6.astype('float64')
data['AGE'] = data.AGE.astype('float64')


numeric_transformer = Pipeline(steps=[
('scaler', MinMaxScaler())
])

categorical_features = ['SEX', 'EDUCATION', 'MARRIAGE']
categorical_transformer = Pipeline(steps=[
('onehot', OneHotEncoder(categories='auto'))
])

preprocessor = ColumnTransformer(
transformers=[
    ('num', numeric_transformer, numeric_features),
    ('cat', categorical_transformer, categorical_features)
])

y = data['default'].values
X = data.drop('default', axis=1).values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, 
random_state=10, stratify=y)

# Append classifier to preprocessing pipeline.
# Now we have a full prediction pipeline.
lr = Pipeline(steps=[('preprocessor', preprocessor),
                 ('classifier', LogisticRegression(solver='liblinear'))])

param_grid_lr = {
'classifier__C': np.logspace(-5, 8, 15)
}

lr_cv = GridSearchCV(lr, param_grid_lr, cv=10, iid=False)

lr_cv.fit(X_train, y_train)

ValueError: указание столбцов с использованием строк поддерживается только для панд DataFrames

1 Ответ

0 голосов
/ 21 января 2019

Вы используете ColumnTransformer, как если бы у вас был кадр данных, но у вас его нет ...

столбец (столбцы) : строка или целое число, массив в виде строки или целого, фрагмент, массив логических масок или вызываемый

Индексирует данные по своей второй оси. Целые числа интерпретируются как позиционные столбцы, , тогда как строки могут ссылаться на столбцы DataFrame по имени . Скалярная строка или int должны использоваться там, где преобразователь ожидает, что X будет 1-мерным массивом (вектором), в противном случае 2d-массив будет передан преобразователю. Вызываемому элементу передаются входные данные X, и он может возвращать любое из вышеперечисленного.

Если вы передаете строки для столбцов, вам нужно передать кадр данных. Если вы хотите использовать массив NumPy, то сначала может не потребоваться перестановка, и вам нужно указать целые числа, а не строки в качестве индекса.

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