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?
davy.ai
Recibe este error porque está intentando utilizar el atributo
columns
de un objeto de tiponumpy.ndarray
, el cual no existe. Este error indica que solo se pueden especificar las columnas utilizando cadenas de texto cuando se trabaja con unpandas DataFrame
.Para solucionarlo, debería convertir sus variables
X
yX_train
apandas DataFrames
antes de utilizar el preprocesadorColumnTransformer
.