Algoritmos de regresión, que parecen estar trabajando en las características representan como números.
Por ejemplo:

El análisis de regresión lineal con cadena/categórico características (variables)?

Este conjunto de datos no contiene categórica funciones/variables. Es muy claro cómo hacer la regresión sobre los datos y predecir el precio.


Pero ahora quiero hacer el análisis de regresión sobre los datos que contienen categórica características:

El análisis de regresión lineal con cadena/categórico características (variables)?

Hay 5 características: District, Condition, Material, Security, Type


¿Cómo puedo hacer la regresión de estos datos? ¿Tengo que transformar toda esta cadena/datos categóricos a los números manualmente? Me refiero a que si tengo que crear algunas reglas de codificación y de acuerdo a las reglas de transformar todos los datos a valores numéricos. ¿Hay alguna forma sencilla de transformar los datos de la cadena de números sin tener que crear las reglas de codificación de forma manual? Puede ser que hay algunas bibliotecas en Python que puede ser utilizado para que? Hay algunos riesgos que el modelo de regresión será de alguna manera incorrectas debido a la «mala codificación»?

OriginalEl autor Erba Aitbayev | 2015-11-30

3 Comentarios

  1. 55

    Sí, usted tendrá que convertir todo a números. Que requiere de un pensamiento acerca de lo que estos atributos representan.

    Por lo general, hay tres posibilidades:

    1. De una bañera de codificación para los datos categóricos
    2. Arbitraria de números para los datos ordinales
    3. Usar algo como grupo de medios para datos categóricos (e. g. la media de los precios de los distritos de la ciudad).

    Usted tiene que ser cuidadoso para no infundir información no tiene en el caso de aplicación.

    Una bañera de codificación

    Si usted tiene datos categóricos, se pueden crear variables ficticias con 0/1 valores para cada posible valor.

    E. g.

    idx color
    0   blue
    1   green
    2   green
    3   red

    a

    idx blue green red
    0   1    0     0
    1   0    1     0
    2   0    1     0
    3   0    0     1

    Esto se puede hacer fácilmente con los pandas:

    import pandas as pd
    
    data = pd.DataFrame({'color': ['blue', 'green', 'green', 'red']})
    print(pd.get_dummies(data))

    resultará en:

       color_blue  color_green  color_red
    0           1            0          0
    1           0            1          0
    2           0            1          0
    3           0            0          1

    Números para los datos ordinales

    Crear una asignación de su capacidad de ordenación de las categorías, e. g.
    edad < renovado < nuevo → 0, 1, 2

    Esto también es posible con pindas:

    data = pd.DataFrame({'q': ['old', 'new', 'new', 'ren']})
    data['q'] = data['q'].astype('category')
    data['q'] = data['q'].cat.reorder_categories(['old', 'ren', 'new'], ordered=True)
    data['q'] = data['q'].cat.codes
    print(data['q'])

    Resultado:

    0    0
    1    2
    2    2
    3    1
    Name: q, dtype: int8

    El uso de datos categóricos para agrupar operaciones

    Usted podría utilizar la media para cada categoría en los últimos (los acontecimientos conocidos).

    Dicen que usted tiene un DataFrame con la última media de precios para las ciudades:

    prices = pd.DataFrame({
        'city': ['A', 'A', 'A', 'B', 'B', 'C'],
        'price': [1, 1, 1, 2, 2, 3],
    })
    mean_price = prices.groupby('city').mean()
    data = pd.DataFrame({'city': ['A', 'B', 'C', 'A', 'B', 'A']})
    
    print(data.merge(mean_price, on='city', how='left'))

    Resultado:

      city  price
    0    A      1
    1    B      2
    2    C      3
    3    A      1
    4    B      2
    5    A      1
    Pero, ¿cómo podía hotencoding ayudar a usted cuando usted va a tratar de predecir un nuevo color ? Tal vez en tu caso, tienes de volver a entrenar el modelo. ¿Tiene alguna solución ?

    OriginalEl autor MaxNoe

  2. 8

    Puede utilizar «Dummy de Codificación» en este caso.
    Hay librerías de Python para hacer de maniquí de codificación, usted tiene algunas opciones.

    Puede utilizar scikit-learn biblioteca. Echa un vistazo a aquí.

    O, si se trabaja con los pandas, tiene una función integrada para crear variables ficticias. Compruebe este.

    Un ejemplo con los pandas es el siguiente:

    import pandas as pd
    
    sample_data = [[1,2,'a'],[3,4,'b'],[5,6,'c'],[7,8,'b']]
    df = pd.DataFrame(sample_data, columns=['numeric1','numeric2','categorical'])
    dummies = pd.get_dummies(df.categorical)
    df.join(dummies)

    OriginalEl autor burhan

  3. 3

    En la regresión lineal con variables categóricas se debe tener cuidado de la Variable Ficticia de la Trampa. La Variable Ficticia de la trampa es un escenario en el que las variables independientes son multicollinear – un escenario en el que dos o más variables están altamente correlacionadas; en términos simples, una variable puede ser predicho a partir de los otros. Esto puede producir la singularidad de un modelo, es decir, que su modelo no funciona. Leer sobre ello aquí

    Idea es utilizar la variable ficticia de la codificación con drop_first=True, este se omite una columna de cada categoría después de la conversión de variable categórica en maniquí/indicador variables. Usted NO perderá la información relevante y, al hacerlo, simplemente porque su todo punto en el conjunto de datos puede ser totalmente explicado por el resto de las características.

    Aquí es el código completo sobre cómo usted puede hacerlo por su vivienda del conjunto de datos

    Así que usted tiene categórica características:

    District, Condition, Material, Security, Type

    Y uno numérico de las características que usted está tratando de predecir:

    Price

    Primer lugar usted necesita para dividir el conjunto de datos inicial en las variables de entrada y de predicción, suponiendo que su pandas dataframe tendría este aspecto:

    Variables de entrada:

    X = housing[['District','Condition','Material','Security','Type']]

    Predicción:

    Y = housing['Price']

    Convertir variable categórica en maniquí/indicador variables y colocar uno en cada categoría:

    X = pd.get_dummies(data=X, drop_first=True)

    Así que ahora, si usted comprueba forma de X con drop_first=True verás que tiene 4 columnas menos uno para cada una de las variables categóricas.

    Ahora puede continuar con el uso de ellos en el modelo lineal. Para scikit-learn aplicación podría tener este aspecto:

    from sklearn import linear_model
    from sklearn.model_selection import train_test_split
        X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = .20, random_state = 40)
            regr = linear_model.LinearRegression() # Do not use fit_intercept = False if you have removed 1 column after dummy encoding
            regr.fit(X_train, Y_train)
        predicted = regr.predict(X_test)

    OriginalEl autor Harvey

Dejar respuesta

Please enter your comment!
Please enter your name here