es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Estandarice únicamente las características numéricas con StandardScaler.

Pregunta

Tengo el siguiente conjunto de datos:

df=pd.read_csv('https://raw.githubusercontent.com/michalis0/DataMining_and_MachineLearning/master/data/HR_comma_sep.csv')

Primero codifiqué la variable salary con un codificador de etiquetas le_salary y luego con un codificador ordinal oe_salary. Después, codifiqué department con OneHotEncoder ohe_department. Todo lo concatené y ahora tengo un concat_df.
Ahora quiero hacer una regresión logística, pero con estandarización y ahí es donde tengo un problema.
Estos son mis valores y mi división de entrenamiento/prueba:

X=concat<em>df[[ 'satisfaction</em>level', 'last<em>evaluation', 'number</em>project', 'average<em>monthly</em>hours', 'time<em>spent</em>company', 'work<em>accident', 'promotion</em>last<em>5years', ('IT',), ('RandD',), ('accounting',), ('hr',), ('management',), ('marketing',), ('product</em>mng',), ('sales',), ('support',), ('technical',), 'oe<em>salary', 'eval</em>spent']].values
y=concat_df["left"].values</p>

<p>X<em>train, X</em>test, y<em>train, y</em>test = train<em>test</em>split(X, y, test<em>size=0.2, random</em>state=72)
<code>
Luego intenté estandarizar solo los valores numéricos con el siguiente código:
</code>
from sklearn.compose import ColumnTransformer
scaler = StandardScaler()</p>

<h1>seleccionar columnas a estandarizar</h1>

<p>Cols = ['satisfaction<em>level', 'last</em>evaluation', 'number<em>project', 'average</em>monthly<em>hours', 'time</em>spent<em>company', 'eval</em>spent']</p>

<h1>configurar el preprocesador</h1>

<p>preprocessor = ColumnTransformer([('standard', scaler, Cols)], remainder = 'passthrough')</p>

<h1>ajustar el preprocesador</h1>

<p>X<em>train</em>std = preprocessor.fit<em>transform(X_train)
X<em>test</em>std = preprocessor.transform(X_test)

Sin embargo, obtengo el siguiente error que no entiendo, ya que ya estandaricé antes sin ningún problema.

AttributeError                            Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/sklearn/utils/<strong>init</strong>.py in <em>get</em>column<em>indices(X, key)
    408         try:
--> 409             all</em>columns = X.columns
    410         except AttributeError:

AttributeError: 'numpy.ndarray' object has no attribute 'columns'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
3 frames
/usr/local/lib/python3.7/dist-packages/sklearn/utils/<strong>init</strong>.py in <em>get</em>column_indices(X, key)
    410         except AttributeError:
    411             raise ValueError(
--> 412                 "Specifying the columns using strings is only "
    413                 "supported for pandas DataFrames"
    414             )

ValueError: Specifying the columns using strings is only supported for pandas DataFrames

¿Por qué obtengo este error y qué significa?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Recibe este error porque está intentando utilizar el atributo columns de un objeto de tipo numpy.ndarray, el cual no existe. Este error indica que solo se pueden especificar las columnas utilizando cadenas de texto cuando se trabaja con un pandas DataFrame.

    Para solucionarlo, debería convertir sus variables X y X_train a pandas DataFrames antes de utilizar el preprocesador ColumnTransformer.

Comments are closed.