Мой код прибывает из адаптации примера кода на странице в руководстве scikitlearn (scikit-learn 0.22.2) под названием «Преобразователь столбцов со смешанными типами». Оригинальный код использует примеры данных из Titani c. Мои данные поступают из файла данных pandas. Пример кода показывает, как в любом случае справиться только с этой ситуацией (только что прокомментировал).
Моя цель: я хочу преобразовать все категориальные переменные в числа c единиц, двух, трех. То есть иметь такие категориальные переменные, как Китай, США и др. c. преобразован в столбец [1,1,1,1,0,0] ie. Везде, где эта страна указана в коде, она становится собственным числом в пронумерованном столбце, где она существует
Я бы хотел то же самое для остальных категориальных переменных. Что расстраивает, так это то, что это прекрасно работает в простых ситуациях, когда данные не так неоднородны. В чем моя ошибка мышления здесь? Как я могу go об устранении неполадок? Я вменял, указывал, что такое категориальные и поплавки, OneHotEcoded, Чего не хватает?
Вот мой код
import numpy as np
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, GridSearchCV
df = pd.read_csv('CorVid19_Proteins_Lean.csv')
X = df.iloc[:, :-1].values
y = df.iloc[:, -1:].values
# We will train our classifier with the following features:
# Numeric Features:
Length: float
Collection_Date: float
# Categorical Features:
Geo_Location: {'China', 'USA', 'Japan', 'Phillipines', 'Thailand', 'Australia', 'South Korea', 'Finland', 'Malaysia', 'Italy'}
protein: {'orf1ab polyprotein', 'ORF10 protein', 'ORF7b', 'surface glycoprotein', 'nucleocapsid phosphoprotein', 'envelope protein', 'membrane glycoprotein', 'ORF7a protein', 'ORF8 protein', 'ORF3a protein'}
categorical_features = ['Geo_Location', 'protein]
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('onehot', OneHotEncoder(handle_unknown='ignore'))])
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('onehot', OneHotEncoder(handle_unknown='ignore'))
preprocessor = ColumnTransformer(
transformers=[
('num'),
('cat', categorical_transformer, categorical_features)])
#However at the end NOTHING has been transformed
X
array([['China', 'orf1ab polyprotein', '2019-12'],
['China', 'ORF10 protein', '2019-12'],
['China', 'orf1a polyprotein', '2019-12'],
['China', 'ORF8 protein', '12/30/19'],
['China', 'nucleocapsid phosphoprotein', '12/30/19'],
['China', 'ORF10 protein', '12/30/19']], dtype=object)
y
array([[7096],
[ 38],
[4405],
[ 43],
[1273],
[ 275],
[ 75],
[ 222],
[ 61],
.
.
.
'''
It is as if the intervening code has done nothing.