Algunos métodos de tratamiento para las variables categóricas

1, breve introducción

Las variables categóricas fueron similares para enumerar, tenemos un cierto número de tipos de valor.

Por ejemplo: clasificación de los colores rojo y azul de los elementos, un elemento en forma de mediana y pequeña clasificación.

Y un gran valor tan dada sustancialmente cadena de Inglés o similares como datos de color rojo, esta vez, tenemos que llevar a cabo algunas operaciones, terminaron valor puede ser asignada directamente al proceso o eliminar.

 

2, tres métodos (junto con la interpretación de código)

En primer lugar, vamos a pretratamiento

 

importación pandas como pd
 de sklearn.model_selection importación train_test_split 

# leer los datos 
X = pd.read_csv ( ' ../input/train.csv ' , INDEX_COL = ' Id ' ) 
X_test = pd.read_csv ( ' ../input/test .csv 'INDEX_COL = ' Id ' ) 

# filas retirar con objetivo faltante, objetivo separado de predictores 
X.dropna (eje = 0, subconjunto = [ ' SalePrice ' ], inplace = true) #Debido a que nuestra variable dependiente es SalePrice, tenemos que soltar algunos de los objetivos que faltan 

y = X.SalePrice # Seleccionar variable dependiente 
X.drop ([ ' SalePrice ' ], eje = 1, inplace = True) 

# Para simplificar, vamos a soltar las columnas con los valores que faltan 
cols_with_missing = [col para col en X.columns si X [col] .isnull (). cualquier ()] 
X.drop (cols_with_missing, eje = 1, inplace = True) 
X_test.drop (cols_with_missing, eje = 1, inplace = True)
 # Ahora tenemos la trama de datos sin perder los valores 

#Romper conjunto de validación de datos de entrenamiento 
X_train, X_valid, y_train, y_valid = train_test_split (X, Y, 
                                                      train_size = 0,8, test_size = 0,2 , 
                                                      random_state = 0)
Ver código

 

 

1) Eliminar las variables categóricas

drop_X_train = X_train.select_dtypes (excluir = [ ' objeto ' ]) 
drop_X_valid = X_valid.select_dtypes (excluir = [ ' objeto ' ])
 # excluyen = [ 'objeto'] significa datos categóricos
Ver código

A continuación, puede comprobar el valor de una ola de su mean_absolute_error

 

2) etiqueta codificada

Construcción es decir mapeo valores.

 

 

Pero aquí ① especial atención, dividimos el tren comenzó como una válida y dos muestras, vamos dentro de las variables categóricas tren etiquetar directamente si la violencia directa, sería error de compilación porque no se puede decir que muestra válida habrá algunos no aparecen en el tren por encima de la parte superior de las variables categóricas.

② En este caso, esta hipótesis tiene sentido, porque no solamente está clasificado categorías. No todos variable categórica tiene un valor definido en orden, pero tendremos que esas variables se llama el orden 有序变量. Para el modelo basado en árboles (por ejemplo, árboles de decisión y los bosques al azar), etiqueta de codificación de variables ordinales puede ser un buen efecto.

# Todas las columnas categóricas 
object_cols = [col para col en X_train.columns si X_train [col] .dtype == " objeto " ] 

# columnas que pueden de forma segura ser etiqueta codificados 
good_label_cols = [col para col en object_cols si  
                   conjunto (X_train [col] ) == conjunto (X_valid [col])]
 # ver que hay que garantizar X_train conjunto de datos tienen la misma etiqueta codificada como X_valid 

# columnas problemático que será dado de baja del conjunto de datos 
bad_label_cols = lista (juego (object_cols) -set (good_label_cols))
Ver código
de sklearn.preprocessing importación LabelEncoder 

# gota columnas categóricas que no va a ser codificados 
label_X_train = X_train.drop (bad_label_cols, eje = 1 ) 
label_X_valid = X_valid.drop (bad_label_cols, eje = 1 ) 

# Aplicar etiqueta codificador 
label_encoder = LabelEncoder () 
 para col en good_label_cols: 
    label_X_train [col] = label_encoder.fit_transform (label_X_train [col]) 
    label_X_valid [col] = label_encoder.transform (label_X_valid [col])
Ver código

 

3) Una-Hot codificación

 

 ① puede ver que queremos añadir un número de columnas de los datos, el número de categorías añadimos el número de columnas, de ser así muchas categorías, significa que queremos ampliar la lista de muy grande, por lo que normalmente sólo por una base relativamente baja la codificación de la columna en caliente. Entonces, la columna se puede concentrar a partir de un borrado de datos de alta cardinalidad, se pueden usar etiquetas codificadas. En circunstancias normales, la elección de 10 categorías como los criterios de eliminación

② no se supone diferente secuencia de codificación de la etiqueta de categoría codificada de una sola caliente. Por lo tanto, si no hay datos claros de clasificación en la secuencia (por ejemplo, "rojo" ni más ni menos que la "amarilla" que "amarilla"), este método puede ser particularmente eficaz. No tenemos ninguna orden intrínseco de las variables categóricas llamadas variables nominales.

# Columnas que se una en caliente codificados 
low_cardinality_cols = [col para col en object_cols si X_train [col] .nunique () <10 ] 

# columnas que se lanzan desde el conjunto de datos 
high_cardinality_cols = lista (conjunto (object_cols) -set (low_cardinality_cols ))
Ver código
de sklearn.preprocessing importación OneHotEncoder 

# Aplicar codificador de una sola caliente para cada columna con los datos categóricos 
OH_encoder = OneHotEncoder (handle_unknown = ' ignorar ' , escaso = False) 
OH_cols_train = pd.DataFrame (OH_encoder.fit_transform (X_train [low_cardinality_cols])) 
OH_cols_valid = pd.DataFrame (OH_encoder.transform (X_valid [low_cardinality_cols])) 

# One-caliente codificación índice eliminado; poner de nuevo 
OH_cols_train.index = X_train.index 
OH_cols_valid.index = X_valid.index 

#Eliminar columnas categóricas (reemplazará con una codificación en caliente) 
num_X_train = X_train.drop (object_cols, eje = 1 ) 
num_X_valid = X_valid.drop (object_cols, eje = 1 ) 

# Añadir columnas codificadas uno en caliente a las características numéricas 
OH_X_train = pd. concat ([num_X_train, OH_cols_train], eje = 1 ) 
OH_X_valid = pd.concat ([num_X_valid, OH_cols_valid], eje = 1)
Ver código

 

Supongo que te gusta

Origin www.cnblogs.com/Y-Knightqin/p/12556156.html
Recomendado
Clasificación