He dividido mi pandas trama de datos en train_X
y train_y
partes, donde train_X
tiene todas las columnas N, y train_y
tiene sólo N-ésima columna, que representa la variable que quiero predecir. Actualmente estoy haciendo:
train_X.drop("N-th column name", axis=1, inplace=True)
model = SomeSklearnModel()
model.fit(train_X, train_y)
¿Tengo que hacerlo "a mano" (es decir, utilizando drop()
el train_X
), o puedo hacer la tercera línea y scikit-learn "sabrá" qué columna train_y
es y lo utilice para el entrenamiento del modelo (sólo para la comprobación de los resultados)?
Debe declarar X
y y
explícitamente al llamar fit
en un sklearn
estimador. En general, en el momento en que esté listo para dividir los datos en la formación y las pruebas conjuntos, X
debe incluir modelo cuenta única, por lo que no debe incluir su objetivo y
.
Hay muchas maneras de hacerlo, pero aquí un par de formas comunes usando el iris conjunto de datos como un ejemplo:
# Setup
df_iris = pd.DataFrame({'sepal_length': [5.0, 4.8, 5.8, 5.7, 4.5, 6.0, 6.3, 4.8, 5.6, 6.4],
'sepal_width': [3.2, 3.4, 2.8, 4.4, 2.3, 3.0, 2.5, 3.4, 3.0, 2.8],
'petal_length': [1.2, 1.6, 5.1, 1.5, 1.3, 4.8, 5.0, 1.9, 4.5, 5.6],
'petal_width': [0.2, 0.2, 2.4, 0.4, 0.3, 1.8, 1.9, 0.2, 1.5, 2.1],
'target': ['setosa', 'setosa', 'virginica', 'setosa', 'setosa','virginica',
'virginica', 'setosa', 'versicolor', 'virginica']})
Si su objetivo y
es el "enésimo" la columna de "n", se puede utilizar iloc
rebanar:
X = df_iris.iloc[:, :-1]
y = df_iris.iloc[:, -1]
Otra manera sería utilizar pop
el que ambas gotas y devuelve la columna para la asignación:
X = df_iris.copy()
y = X.pop('target')
O utilizar su propio método con drop
:
X = df_iris.drop('target', axis=1)
y = df_iris['target']