1. Recuento de procesamiento
1.1 Binarización
Establezca el número mayor o igual que un número determinado en 1, y el número menor que este número en 0
La variable de destino binario es una medida de preferencia de usuario simple y fuerte
Ejemplo: La distribución original del número de veces que escucha una canción y el número de personas es la siguiente. Se encontrará que el número original de momentos de escucha no es un fuerte indicador de las preferencias del usuario, por lo que se puede binarizar. Si el usuario ha escuchado una canción al menos una vez, entonces se considera que al usuario le gusta La canción
import pandas as pd
listen_count = pd.read_csv('millionsong/train_triplets.txt.zip',header=None, delimiter='t')# The table contains triples in the form of "user-song-number of times of listening". Only include non-zero number of listens. # Therefore, to binarize the number of listening times, just set the entire list of listening times to 1.
listen_count[2] = 1
1.1.1 Cuantificación del intervalo (binning)
La cuantificación de intervalos puede asignar valores continuos a valores discretos, que se pueden considerar como una secuencia binning ordenada, lo que representa una medición de la densidad
Para cuantificar el intervalo de datos, se debe determinar el ancho de cada ubicación. Hay dos maneras de determinar el ancho de la ubicación: contenedor de ancho fijo y ubicación adaptable
Ejemplo: Los datos sobre el número de revisiones de una empresa, el número de revisiones y la distribución del número de usuarios son los siguientes, encontrará que la mayoría de las empresas tienen un pequeño número de revisiones, pero algunas empresas tienen miles de opiniones, y el número original de revisiones abarca varios números, una solución El método es realizar la cuantificación de intervalos en el valor de recuento , y luego utilice el resultado cuantificado. En otras palabras, divida el número de revisiones en varias casillas y elimine el valor de recuento real
(1) Sub-caja de ancho fijo
Al fijar el ancho de las ubicaciones, cada ubicación contendrá un valor dentro de un rango específico. Estos rangos se pueden personalizar manualmente o generar mediante segmentación automática. Pueden ser lineales o exponenciales.
Por ejemplo, las personas se pueden dividir en rangos de edad múltiples según un período de 10 años: 0-9 años en la caja 1 y 10-19 años en la caja 2
Para asignar el valor de recuento a la ubicación, simplemente divida el valor de recuento por el ancho de la ubicación y, a continuación, tome la parte entera
Ejemplo: Cuantificación de intervalos de valores de recuento a través de ubicaciones de ancho fijo
import numpy as np
small_counts = np.random.randint(0, 100, 20)# Generate 20 random integers, uniformly distributed between 0~99
small_counts# Map to evenly spaced bins by division, and the value range of each bin is 0~9
np.floor_divide(small_counts, 10)#Map to evenly spaced bins by division, and the value range of each bin is 0~9
Cuando el valor abarca múltiples órdenes de magnitud, es mejor agruparse por la potencia de 10 (o la potencia de cualquier constante), tales como: 0-9, 10-99, 100-999, 100-999, 1000-9999
En este momento, el ancho de la bandeja aumenta exponencialmente. Para asignar el valor de recuento a la ubicación, debe tomar el logaritmo del valor de recuento. La relación entre el binning de ancho exponencial y la transformación logarítmica es muy estrecha
Ejemplo: Cuantificación de intervalos de valores de recuento a través de ubicaciones de ancho fijo
large_counts = [296, 8286, 64011, 80, 3, 725, 867, 2215, 7689, 11495, 91897,44, 28, 7971, 926, 122, 22222]# Array of count values spanning several orders of magnitude
(2) Binning quantile
Si hay un gran espacio en el valor de recuento, habrá una gran cantidad de cajas vacías sin ningún dato. De acuerdo con las características de distribución de los datos, el posicionamiento adaptativo del gabinete se puede realizar utilizando el cuantilo de la distribución de datos. El cuantilo es el valor que puede dividir los datos en partes iguales, tales como: la mediana (es decir, dicotomía) dígitos), cuartiles, deciles, etc.
Ejemplo: Calcula las deciles del número de opiniones de negocios de Yelp
#Draw the deciles on the histogram
>>> deciles = biz_df['review_count'].quantile([.1, .2, .3, .4, .5, .6, .7, .8, .9])
>>> deciles
0.1 3.0
0.2 4.0
0.3 5.0
0.4 6.0
0.5 8.0
0.6 12.0
0.7 17.0
0.8 28.0
0.9 58.0
Para calcular cuantilos y asignar datos a ubicaciones cuantilo, puede utilizar la biblioteca Pandas, como se muestra en el ejemplo siguiente.
Pandas. DataFrame.quantile puede calcular el cuantilo
Pandas. Series.quantile puede calcular cuantilos
pandas.qcut puede asignar los datos al valor cuantilo requerido
Ejemplo: binning el valor de recuento por quantile
import pandas as pd # Continue to use large_couts in Example 4
pd.qcut(large_counts, 4, labels=False)# Map the count value to the quantile
# Calculate the actual quantile value
large_counts_series = pd.Series(large_counts)
large_counts_series.quantile([0.25, 0.5, 0.75])
2. Transformación logarítmica
La función logarítmica comprime el intervalo de alto valor y amplía el intervalo de bajo valor
Ejemplo: Visualice la distribución del número de revisiones antes y después de la transformación logarítmica.
Análisis: Compara los histogramas del número de opiniones de los comerciantes de Yelp antes y después de la transformación logarítmica. Como se muestra a continuación, el eje y en ambos gráficos está en escala normal (lineal). En el gráfico siguiente, el espaciado de la caja en el intervalo (0,5, 1]es muy grande porque sólo hay 10 posibles recuentos enteros entre 1 y 10. Tenga en cuenta que el número inicial de opiniones está muy concentrado en el área de recuento bajo, pero algunos valores atípicos superaron los 4000. Después de la transformación logarítmica, la tendencia central del histograma en valores de recuento bajo se debilita, y la distribución en el eje X es más uniforme.
2.1 Demostración de transformación logarítmica
Demo de código: predecir la calificación media de un negocio utilizando el número de opiniones de Yelp después de la transformación logarítmica
# Use the Yelp review data frame to calculate the logarithmic transformation value of the number of Yelp reviews
# Note that we add 1 to the original number of reviews, so that when the number of reviews is 0, the logarithmic operation results in negative infinity.
>>> biz_df['log_review_count'] = np.log10(biz_df['review_count'] + 1)
Demostración de código: Utilice el número de palabras después de la transformación del logaritmo en las noticias en línea datos de popularidad establecidos para predecir la popularidad del artículo
# Download the online news popularity dataset from UCI, and perform logarithmic transformation on the n_tokens_content feature. This feature represents the number of words # (token) in a news article.
>>> df['log_n_tokens_content'] = np.log10(df['n_tokens_content'] + 1)
Como se puede ver en la figura siguiente, la transformación logarítmica reorganiza el eje x. Para artículos con valores de variable de destino extremadamente grandes (>200000 recursos compartidos), la transformación logarítmica los tira más a la derecha del eje X. Para el modelo lineal, se ganó más «espacio de respiración» en el extremo bajo del espacio de entidades de entrada. Si no se realiza la transformación logarítmica (la figura superior a continuación), el modelo se enfrentará a una mayor presión y será necesario ajustarse a un valor objetivo muy grande cuando los cambios de entrada sean pequeños.
2.2 Transformación exponencial: la extensión de la transformación logarítmica
La transformación exponencial es una familia de transformaciones, y la transformación logarítmica es sólo un caso especial de ella. En términos estadísticos, todas son transformaciones de estabilización de varianza
La distribución de Poisson es una distribución de cola pesada, y su varianza es igual a su media. Por lo tanto, cuanto mayor sea su centroide, mayor será la varianza y mayor será el grado de cola pesada. La transformación exponencial puede cambiar la distribución de variables para que la varianza ya no dependa de la media
Por ejemplo, supongamos que una variable aleatoria X tiene una distribución de Poisson. Si lo transformas tomando su raíz cuadrada, la varianza de su raíz cuadrada es aproximadamente una constante, en lugar de igual a la media.
La siguiente figura muestra una representación aproximada de la distribución de Poisson, que es un ejemplo de una distribución donde la varianza aumenta con la media. Muestra la influencia de λ en la distribución de Poisson, y λ representa el valor medio de la distribución de Poisson. Cuando λ se hace más grande, no sólo todo el patrón de distribución cambia a la derecha, sino que la calidad está más dispersa, y la varianza se hace más grande.
Tanto la transformación de la raíz cuadrada como la transformación logarítmica se pueden generalizar fácilmente a la transformación de Box-Cox
La siguiente figura muestra la transformación Box-Cox cuando λ = 0 (transformación logarítmica), λ = 0,25, λ = 0,5 (una forma de escala y traducción de transformación de raíz cuadrada), λ = 0,75 y λ = 1,5. Cuando λ es menor que 1, el valor de gama alta se puede comprimir; cuando λ es mayor que 1, el efecto es opuesto.
La fórmula Box-Cox solo es válida cuando los datos son positivos. Para los datos no positivos, podemos agregar una constante fija para cambiar los datos.
Demo de código: Transformación de Box-Cox del número de opiniones de los comerciantes de Yelp
>>> from scipy import stats
# Following the previous example, suppose biz_df contains Yelp business review data.
# Box-Cox transformation assumes that the input data are all positive.
# Check the minimum value of the data to make sure that the assumption is met.
>>> biz_df['review_count'].min()
3
# Set the input parameter λ to 0 and use logarithmic transformation (without fixed-length displacement).
>>> rc_log = stats.boxcox(biz_df['review_count'], lmbda=0)
# By default, SciPy will find the λ parameter that makes the output closest to the normal distribution when it implements the Box-Cox conversion.
>>> rc_bc, bc_params = stats.boxcox(biz_df['review_count'])
>>> bc_params
-0.4106510862321085
A continuación se muestra el histograma del número de críticas de los comerciantes de Yelp después de la transformación de Box-Cox (abajo), así como el histograma del número de opiniones iniciales (superior) y el histograma del número de comentarios después de la transformación de logaritmo (medio)
El gráfico de probabilidad es un método de visualización muy simple para comparar la distribución real y la distribución teórica de los datos. Es esencialmente un gráfico de dispersión que muestra la relación entre el cuantilo medido y el cuantilo teórico.
La siguiente figura muestra dos gráficos de probabilidad de los datos de revisión de Yelp. Son los gráficos de probabilidad del número inicial de revisiones y el número de revisiones después de la transformación, y en comparación con la distribución normal.
Debido a que los datos observados deben ser positivos, y la distribución gaussiana puede ser negativa, es imposible que el cuantilo medido y el cuantilo teórico coincidan en el lado negativo. Por lo tanto, sólo nos centramos en la parte positiva. Por lo tanto, podemos ver que en comparación con la distribución normal, el número inicial de revisiones tiene características obvias de cola pesada. (El valor ordenado puede alcanzar más de 4000, pero el cuantilo teórico sólo puede alcanzar aproximadamente 4.) Tanto la transformación logarítmica ordinaria como la transformación óptima de Box-Cox pueden acercar la cola positiva a la distribución normal.
Se puede ver claramente en el gráfico que la transformación óptima de Box-Cox comprime la cola con más fuerza que la transformación logarítmica. Hace que la cola se aplane y corre por debajo de la isolina roja.
3. Escala/normalización de características
Algunos valores de entidad están delimitados, como longitud y latitud
Pero algunas características numéricas se pueden aumentar sin límite, como el valor de recuento
Algunos modelos son funciones fluidas de entrada, como modelos de regresión lineal, modelos de regresión logística o modelos que contienen matrices, y se ven afectados por la escala de entrada.
Por el contrario, a esos modelos basados en árboles no les importa cuán grande sea la escala de entrada.
Si el modelo distingue a la escala de las entidades de entrada, se requiere el escalado de entidades.
El escalado de características cambiará la escala de características, algunas personas llaman a it normalización de características
El escalado de entidades se realiza normalmente de forma independiente para cada entidad
Escala de 3,1 min-max
Deje que x sea un valor de entidad independiente (es decir, el valor de entidad en un determinado punto de datos), min(x) y max(x) son los valores mínimos y máximos de esta entidad en todo el conjunto de datos, respectivamente. El escalado min-max puede comprimir (o expandir) todos los valores de eigen en el [0, 1] Intervalo
La fórmula para el escalado min-max es la siguiente:
3.2 escala de estandarización/varianza de características
Estandarización de entidades: primero resta el valor medio de la entidad (para todos los puntos de datos) y, a continuación, se divide por la varianza, por lo que también se denomina escalado de varianza. El valor medio de la operación escalada es 0 y la desviación es 1. Si la característica inicial obedece a la distribución gaussiana, la característica a escala también obedece a la distribución gaussiana.
La fórmula para la estandarización de entidades es la siguiente:
3.3 ρ 2 rho^2 Ρ2Normalizado
Esta técnica de normalización consiste en dividir el valor eigen inicial por un valor llamado ρ 2 rho^2 Ρ2La cantidad de norma, ρ 2 rho^2 Ρ2La norma también se llama norma euclidiana, y se define de la siguiente manera:
ρ 2 rho^2 Ρ2La norma es una medida de la longitud de un vector en el espacio de coordenadas. Su definición puede derivarse del famoso teorema pitágoras (dada la longitud de dos lados angulares rectos de un triángulo en ángulo recto, se puede encontrar la longitud de la hipotenusa):
La norma primero suma el cuadrado del valor de la entidad en todos los puntos de datos y, a continuación, calcula la raíz cuadrada. Pasar por ρ 2 rho^2 Ρ2 Después de la normalización, la norma de la columna de entidades es 1
Independientemente del método de escalado utilizado, el escalado de entidades siempre divide la entidad por una constante (denominada constante de normalización). Por lo tanto, no cambia la forma de la distribución de una sola operación
Demostración de código: ejemplo de escalado de características
# Load online news popularity data set
>>> df = pd.read_csv('OnlineNewsPopularity.csv', delimiter=', ')
# View the original data-the number of words in the article
>>> df['n_tokens_content'].as_matrix()
array([ 219., 255., 211., ..., 442., 682., 157.])
# min-max zoom
>>> df['minmax'] = preproc.minmax_scale(df[['n_tokens_content']]) >>> df['minmax'].as_matrix()
array([ 0.02584376, 0.03009205, 0.02489969, ..., 0.05215955,0.08048147, 0.01852726])
# Standardization-Note that according to the definition of standardization, some results will be negative
>>> df['standardized'] = preproc.StandardScaler().fit_transform(df[['n_tokens_ content']])
>>> df['standardized'].as_matrix()
array([-0.69521045, -0.61879381, -0.71219192, ..., -0.2218518 ,0.28759248, -0.82681689])
# L2-Normalization
>>> df['l2_normalized'] = preproc.normalize(df[['n_tokens_content']], axis=0)
>>> df['l2_normalized'].as_matrix()
array([ 0.00152439, 0.00177498, 0.00146871, ..., 0.00307663, 0.0047472 , 0.00109283])
La siguiente figura muestra el número de palabras en el artículo de noticias original y ampliado. Tenga en cuenta que solo ha cambiado la escala del eje X y la forma de la distribución a escala de entidades permanece sin cambios
Cuando las escalas de un conjunto de entidades de entrada son muy diferentes, se requiere el escalado de entidades. Por ejemplo, un sitio web comercial popular puede tener cientos de miles de visitas diarias, mientras que el comportamiento real de compra puede ser sólo unos pocos miles de veces. Si el modelo utiliza ambas entidades, el modelo debe equilibrar la escala antes de decidir cómo utilizarlas. Si la escala de las entidades de entrada es muy diferente, causará problemas de estabilidad numérica para el algoritmo de entrenamiento del modelo. En este caso, las características deben estandarizarse.
4. Características interactivas
El producto de dos características puede formar un par de características interactivas simples
Esta relación de multiplicación se puede comparar con el operador lógico AND, que puede expresar el resultado formado por un par de condiciones: «El comportamiento de compra proviene de la zona con el código postal 98121» Y «El usuario tiene entre 18 y 35 años».
Ejemplo: Los pares de características interactivas del conjunto de datos de popularidad de noticias en línea de UCI se utilizan para predecir el número de artículos de noticias compartidas.
>>> from sklearn import linear_model
>>> from sklearn.model_selection import train_test_split
>>> import sklearn.preprocessing as preproc
# Assuming df is a Pandas data frame, which contains UCI online news popularity data set >>> df.columns
Index(['url', 'timedelta', 'n_tokens_title', 'n_tokens_content',
'n_unique_tokens', 'n_non_stop_words', 'n_non_stop_unique_tokens','num_hrefs', 'num_self_hrefs', 'num_imgs', 'num_videos',
'average_token_length', 'num_keywords', 'data_channel_is_lifestyle',
'data_channel_is_entertainment', 'data_channel_is_bus',
'data_channel_is_socmed', 'data_channel_is_tech',
'data_channel_is_world', 'kw_min_min', 'kw_max_min', 'kw_avg_min',
'kw_min_max', 'kw_max_max', 'kw_avg_max', 'kw_min_avg', 'kw_max_avg',
'kw_avg_avg', 'self_reference_min_shares', 'self_reference_max_shares',
'self_reference_avg_sharess', 'weekday_is_monday', 'weekday_is_tuesday',
'weekday_is_wednesday', 'weekday_is_thursday', 'weekday_is_friday',
'weekday_is_saturday', 'weekday_is_sunday', 'is_weekend', 'LDA_00',
'LDA_01', 'LDA_02', 'LDA_03', 'LDA_04', 'global_subjectivity',
'global_sentiment_polarity', 'global_rate_positive_words',
'global_rate_negative_words', 'rate_positive_words',
'rate_negative_words', 'avg_positive_polarity', 'min_positive_polarity',
'max_positive_polarity', 'avg_negative_polarity',
'min_negative_polarity', 'max_negative_polarity', 'title_subjectivity',
'title_sentiment_polarity', 'abs_title_subjectivity',
'abs_title_sentiment_polarity', 'shares'],
dtype='object')
# Select content-related features as the single features of the model, and ignore those derived features
>>> features = ['n_tokens_title','n_tokens_content','n_unique_tokens', 'n_non_stop_words', 'n_non_stop_unique_tokens','num_hrefs', 'num_self_hrefs', 'num_imgs', 'num_videos', 'average_token_length','num_keywords','data_channel_is_lifestyle','data_channel_is_entertainment', 'data_channel_is_bus', 'data_channel_is_socmed', 'data_channel_is_tech', 'data_channel_is_world']
>>> X = df[features]
>>> y = df[['shares']]
# Create an interactive feature pair, skip the fixed offset item
>>> X2 = preproc.PolynomialFeatures(include_bias=False).fit_transform(X) >>> X2.shape
(39644, 170)
# Create training set and test set for two feature sets
>>> X1_train, X1_test, X2_train, X2_test, y_train, y_test = train_test_split(X, X2, y, test_size=0.3, random_state=123)
>>> def evaluate_feature(X_train, X_test, y_train, y_test):
... """Fit a linear regression model on the training set and
... score on the test set"""
... model = linear_model.LinearRegression().fit(X_train, y_train)
... r_score = model.score(X_test, y_test)
... return (model, r_score)
# Train the model on two feature sets and compare R-square scores
>>> (m1, r1) = evaluate_feature(X1_train, X1_test, y_train, y_test)
>>> (m2, r2) = evaluate_feature(X2_train, X2_test, y_train, y_test)
>>> print("R-squared score with singleton features: %0.5f" % r1)
>>> print("R-squared score with pairwise features: %0.10f" % r2)
R-squared score with singleton features: 0.00924
R-squared score with pairwise features: 0.0113276523
Nota:
La construcción de características interactivas es muy simple, pero es caro de usar. Si el modelo lineal contiene pares de entidades interactivos, su tiempo de entrenamiento y tiempo de puntuación aumentarán de O(n) a O(n2), donde n es el número de entidades individuales
Hay varias maneras de omitir el costo computacional de las características interactivas de alto orden. Podemos realizar la selección de características después de construir todas las características interactivas, o podemos diseñar un pequeño número de características complejas con más cuidado.
5. Selección de características
La tecnología de selección de características puede optimizar las características inútiles para reducir la complejidad del modelo final. Su objetivo final es obtener un modelo simplificado, que puede aumentar la velocidad de cálculo sin reducir la precisión de la predicción o tener poco efecto en la precisión de la predicción.
La selección de características no es para reducir el tiempo de entrenamiento, sino para reducir el tiempo de puntuación del modelo
Las técnicas de selección de entidades se pueden dividir en las tres categorías siguientes:
(1) Filtro
La tecnología de filtrado preprocesa las entidades para eliminar aquellas entidades que es poco probable que sean útiles para el modelo. Por ejemplo, podemos calcular la correlación o la información mutua entre cada entidadd la variable de respuesta y, a continuación, filtre aquellas entidades que están por debajo de un determinado umbral. El costo de las técnicas de filtrado es mucho menor que las técnicas de embalaje descritas a continuación, pero no consideran el modelo que queremos utilizar, por lo que es posible que no puedan seleccionar las características correctas para el modelo. Lo mejor es utilizar cuidadosamente las técnicas de prefiltrado para evitar eliminar involuntariamente características útiles antes de entrar en la etapa de entrenamiento del modelo.
(2) Método de embalaje
Estas tecnologías son muy costosas, pero pueden experimentar con varios subconjuntos de características, lo que significa que no eliminaremos accidentalmente características que no proporcionan mucha información por sí mismas, sino que son muy útiles en combinación con otras características. El método de empaquetado trata el modelo como una caja negra que puede dar una puntuación razonable al subconjunto de características recomendado. Utilizan otro método para optimizar iterativamente el subconjunto de entidades.
(3) Método integrado
Este método utiliza la selección de entidades como parte del proceso de entrenamiento del modelo. Por ejemplo, la selección de entidades es una función inherente de los árboles de decisión, ya que selecciona una entidad para dividir el árbol en cada etapa de entrenamiento. Otro ejemplo es el término regular l1, que se puede agregar al objetivo de entrenamiento de cualquier modelo lineal. l1 El término regular anima al modelo a utilizar menos características en lugar de más características, por lo que también se denomina restricción de espasmos del modelo. Los métodos integrados integran la selección de características como parte del proceso de formación del modelo. No son tan potentes como el método de embalaje, pero el costo no es tan alto como el método de embalaje. En comparación con las técnicas de filtrado, los métodos incrustados pueden seleccionar entidades que son especialmente adecuadas para un determinado modelo. En este sentido, el método integrado logra un cierto equilibrio entre el coste computacional y la calidad del resultado.
Referencia:
«Competente en ingeniería de largometrajes» Alice Zheng Amanda Casali
Pensamientos rotos de los niños pequeños
Terminado el 21 de noviembre de 2020
.