Datos de la cesta de la compra de Python (análisis de asociación)
pip?install?mlxtend
Como ya está en formato csv, introduce directamente:
Cada línea: una cesta de la compra
Cada Una columna: artículos en la cesta de la compra
Primero comprueba si la lectura del pd es correcta:
Luego imprímelo línea por línea:
Luego guárdalos en una matriz:
1. ¿Qué es un código one-hot?
Un código one-hot se llama código one-hot en la literatura inglesa. Intuitivamente, hay tantos bits como. hay estados y un sistema de código en el que solo un bit es 1 y los demás bits son todos 0. Para obtener más detalles, consulte el código one_hot (Wikipedia). En el aprendizaje automático, es necesario digitalizar datos categóricos discretos. Por ejemplo, el atributo de género solo puede tener tres valores: masculino, femenino u otros tres valores. Una forma sencilla de hacer esto sería 0 para hombres, 1 para mujeres y 2 para todo lo demás.
Después de usar la secuencia simple anterior para representar el valor de clasificación, puede surgir un problema al entrenar el modelo. Debido a que los diferentes valores numéricos de las características afectan el efecto de entrenamiento del modelo, diferentes valores. Durante el proceso de entrenamiento del modelo, el peso de la misma característica en la muestra puede cambiar. Si se codifica directamente como 1000, ¿tendrá un mayor impacto en el modelo que codificarlo como 1? Para resolver los problemas anteriores y evitar que el proceso de entrenamiento se vea afectado negativamente por el problema de la representación de valores categóricos en el modelo, se introducen códigos one-hot para codificar las características categóricas con códigos one-hot.
Se puede entender que para cada característica, si tiene m valores posibles, luego de la codificación one-hot, se convierte en m características binarias (por ejemplo, la característica de calificaciones tiene buena, media, La diferencia se convierte en one-hot, que es 100, 010, 001). Además, estas funciones son mutuamente excluyentes y sólo una está activa a la vez. Por lo tanto, los datos se vuelven escasos.
Los principales beneficios de hacer esto son:
(1) Resuelve el problema de que el clasificador no puede manejar bien los datos de atributos
(2) Hasta cierto punto Hasta cierto punto, también desempeña el papel de expandir funciones
M
Lo siguiente es lo que extraje de otros, y se adjunta el enlace original/hellozhxy/article/details/80600845 p>
Cerveza y pañales famosos, este es un problema típico de la cesta de la compra, llamado Conjuntos de elementos frecuentes en la comunidad de minería de datos
Nota: el tipo de datos está escrito en formato Python
<. p> 1. Objetivos y definiciones1. Antecedentes del problema
Siempre hay algunos artículos en la lista de compras en los supermercados que los consumidores compran juntos si podemos descubrir estas reglas de asociación. (reglas de asociación) y hacer un uso razonable de ellas, podemos lograr ciertos resultados. Por ejemplo, descubrimos que existe esta relación entre los hot dogs y la mostaza. Redujimos el precio de los hot dogs y aumentamos el precio de la mostaza de manera adecuada. Como resultado, las ventas de los supermercados pueden aumentar significativamente.
2. Objetivo
Encontrar artículos que aparecen juntos con frecuencia en los recibos de compra de los consumidores (como cerveza y pañales) para promocionarlos juntos, atraer entre sí y aumentar las ventas
3. Definición
Soporte: en realidad es la frecuencia en la teoría de la probabilidad
Umbral de soporte umbral de soporte: denotado como s. , se refiere a distinguir elementos frecuentes El valor crítico del conjunto.
Conjunto de elementos frecuentes: si I es un conjunto de elementos (conjunto de elementos) y la frecuencia de aparición (es decir, soporte) de I es mayor o igual a s , entonces decimos que I es un conjunto de elementos frecuente.
Elementos uniarios, elementos binarios, elementos ternarios: Conjuntos de elementos que contienen uno, dos o tres productos.
4. Reglas de asociación
Reglas de asociación: la forma es I-gt;j, lo que significa que si todos los artículos del tipo I aparecen en una cesta de la compra, es muy probable que j también aparezca en esta cesta de la compra. valor de confianza correspondiente (puede Confianza, es decir, el grado de confianza en la teoría de la probabilidad).
Entre ellos, la credibilidad de esta regla de asociación se calcula como Confianza = I∪{j} / I, que a su vez es muy intuitivo y de sentido común. Por ejemplo, decimos que la regla de asociación {perro, gato} -gt tiene una credibilidad de 0,6, porque {perro, gato} aparece en cinco cestas de la compra 1, 2, 3, 6 y. 7, y y aparece en 1, 2, 7, por lo que podemos calcular Confianza = frecuencia[{perro, gato y}] / frecuencia[{perro, gato}] = 3/5 = 0,6
Tenga en cuenta que la parte del numerador La frecuencia siempre es menor que el denominador, porque el número de apariciones de {perro, gato} siempre es mayor o igual que el número de apariciones de {perro, gato y}.
2. Cesta de la compra y algoritmo a priori
1. Representación de los datos de la cesta de la compra
Tendremos un archivo de entrada de texto, como por ejemplo allBills.txt, o allBills.csv. Cada línea que contiene es una cesta de la compra.
Las dos primeras líneas del archivo podrían verse así (df.show(2)):
{23, 456, 1001}
{3, 18, 92, 145}
Supongamos que se trata de una gran cadena de supermercados, como Wal-Mart.
, por lo que este archivo de texto es muy grande, como 20 GB. Por lo tanto, no podemos leer el archivo en la memoria al mismo tiempo. Por lo tanto, el principal costo de tiempo del algoritmo es la E/S del disco.
También asumimos que. todas las compras El tamaño promedio de la cesta es pequeño, por lo que el tiempo necesario para generar conjuntos de artículos de todos los tamaños en la memoria será mucho menor que el tiempo de lectura de la cesta de la compra.
Podemos calcular, para n artículos Para una cesta de la compra, el tiempo de generación de todos los subconjuntos de tamaño k es aproximadamente (n, k) = n! / ((n-k)!k!) = O(n^k/k!), donde solo nos centramos en el los más pequeños Conjuntos de elementos pequeños y frecuentes, por lo que acordamos k=2 o k=3. Por lo tanto, el tiempo de generación de todos los subconjuntos es T = O(n^3).
Nuevamente, pensamos que todos son grandes. y los artículos pequeños se generan en la memoria. El costo de tiempo del conjunto será mucho menor que el tiempo de lectura de la cesta de compras.
2. Uso de la memoria durante el proceso de conteo del conjunto de artículos
Debemos. coloque todo el diccionario k, v en la memoria; de lo contrario, será muy, muy lento leer el diccionario desde el disco duro cuando llegue un Itemset.
Aquí, el diccionario tiene la forma k=( 18, 145), v=15 Aquí, se debe tener en cuenta que si hay una entrada de tipo Cadena como {pan, leche, naranja}, se debe asignar de antemano al código de valor entero correspondiente utilizando un diccionario, como por ejemplo. como 1920, 4453, 9101.
Entonces, como máximo ¿Cuántos tipos de productos se pueden almacenar en un diccionario?
Veamos primero cuántos valores de recuento almacenamos .
Asumimos que el número total de artículos es n, es decir, hay n tipos de productos en el supermercado, cada producto tiene un número numérico, por lo que necesitamos un tamaño de (n, 2 ) = n^2/2 para almacenar el recuento de todas las combinaciones binarias. Suponiendo que int ocupa 4 bytes, entonces necesitamos (2·n^2) bytes de memoria. Se sabe que 2 GB de memoria = 2^31 bytes. , 2^31/2 = 2^30 gt; = n^2 --gt; n lt; = 2^15, es decir nlt;
Sin embargo, hay un problema con este método de cálculo. No hay 10 tipos de productos, por lo que aparecerá cualquier combinación binaria de estos 10 productos. Para aquellos, no necesitamos almacenar las combinaciones que no. No aparece en el diccionario en absoluto, ahorrando así espacio.
Al mismo tiempo, no olvides que también tenemos que almacenar la clave = (i, j), que son al menos dos números enteros adicionales. .
Entonces, ¿cómo almacenamos exactamente estos valores de recuento?
El diccionario se puede construir en forma de triples. Usamos la forma [i, j, recuento] para almacenar. Entre ellos, i representa el tipo de producto 1, j representa el tipo de producto 2, los dos primeros valores representan la clave y el siguiente valor es el recuento, que es el recuento de esta combinación binaria.
Ahora, dejemos que Notemos que (1) Suponemos que el tamaño medio de la cesta de la compra es pequeño, y (2) utilizamos un diccionario triple (2 claves) y (3) no almacenamos, no hay ventaja de combinación. Supongamos que hay 100k =. 10 ^ 5 productos y 10 millones = 10 ^ 7 cestas de compras, cada cesta de compras tiene 10 artículos, entonces el espacio adicional del diccionario es (10, 2) · 10 ^ 7 = 45 x 10 ^ 7 x 3 = 4.5x10 ^ 8x3 = 1,35x10^9 elementos enteros. Esto se calcula en aproximadamente 4x10^8 bytes = 400 MB, que está dentro del rango de la memoria normal de la computadora.
3. Monotonicidad del conjunto de elementos
Si el conjunto de elementos I es frecuente, entonces todos sus subconjuntos también lo son. Este principio es consistente con el sentido común, porque {perro,.
El número de apariciones de gato} es siempre mayor o igual que el número de apariciones de {perro, gato y}.
El corolario de esta regla es que, estrictamente, el número de nuestros frecuentes uno- tupla gt; el número de dos tuplas frecuentes Número gt; el número de triples frecuentes.
4. Algoritmo a priori
Hemos dejado claro que siempre tenemos suficiente por contar el uso de memoria en Itemset La memoria de se utiliza para contar todos los conjuntos de elementos binarios existentes (como {cat, dog} aquí, nuestro diccionario no almacena ningún conjunto de elementos binarios que no exista en la cesta de la compra, ni el número). de artículos binarios frecuentes será mayor que el triplete frecuente gt...
Podemos escanear el archivo de la cesta de la compra unilateralmente. Para cada cesta de la compra, utilizamos un bucle doble para generar todos los pares de artículos. (es decir, tupla). Siempre que generamos un par de elementos, le asignamos el valor 1 en el diccionario correspondiente (también llamado contador). Finalmente, verificamos los resultados del recuento de todos los pares de elementos y encontramos aquellos con gt;=umbral El elemento). los pares de s son pares de elementos frecuentes.
1) El primer escaneo del algoritmo A-Priori
En el primer escaneo, crearemos dos tablas. La primera tabla convierte el nombre. del artículo en un número entero entre 1 y n, convirtiendo así una clave como el tipo String en un tipo int con un tamaño de espacio más pequeño. La segunda tabla registra cada artículo del 1 al n. en el formulario
tabla 0 (tabla de nombres): {'dolphin': 7019, 'cat': 7020}? // formulario dict, de hecho, también se puede convertir en un formulario de lista [[' delfín', 7019], ['cat', 7020]]
tabla 1 (tabla de contador de un solo elemento): {7019: 15, 7020: 18} //forma de dictado, De hecho, también se puede convertir en forma de matriz A[7019] = 2, A[7020] = 18
2) Procesamiento después del primer paso de escaneo
Después del primer paso de escaneo, Mapearemos toda la tabla 1 nuevamente de acuerdo con los umbrales que establecimos, porque solo nos enfocamos en los elementos cuyo último valor de contador es mayor o igual que el umbral y no nos importa el valor de contador específico. la estrategia de mapeo es:
Para todos los counterlt;s, establezca siempre el contador en 0; para countergt;=s, configúrelo en un valor de 1 a m en orden (hay un total de m elementos que cumplen los requisitos)
3) El segundo escaneo
El segundo escaneo hace tres cosas:
(1) Para cada cesta de la compra, en la tabla 1 Verificar todo sus artículos de producto y mantenga todos los artículos que son frecuentes para crear una lista.
(2) Genere todos los pares de artículos en la lista a través de un bucle doble.
(3) Repita el ciclo nuevamente e ingrese la posición 1 correspondiente en la nueva tabla de estructura de datos 2 (dict o lista). El efecto en este momento es dicta = {48: {13: 5}, 49: {71, 16}} o lista [ [48, 13, 5], [49, 71, 16], ... ]
Tenga en cuenta la estructura almacenada en el bloque de memoria en este momento: tabla1(nombre de la tabla), tabla2( tabla de contador de un solo artículo), tabla 3 (tabla de contador de dos artículos)
5. Generalización: algoritmo a priori en conjuntos de elementos frecuentes de tamaño arbitrario
Generalizamos el algoritmo anterior.
Transferencia de cualquier tamaño de conjunto k al siguiente tamaño k 1 El patrón puede ser dijo lo siguiente:
(1) Para cada carrito de compras, verifique todos sus artículos de productos en la tabla 1 y conserve todos los artículos frecuentes para crear una lista.
(2) Nosotros generar todas las (k 1) tuplas en la lista a través de un bucle k de 1 pliegue
(3) Para cada k 1 tupla, generamos sus (k 1 elija k) k tuplas y verificamos si estas k tuplas están en la tabla anterior k (Tenga en cuenta que cuando k = 1, este paso se repite con (1) y se puede omitir)
(4) Repita el ciclo nuevamente y establezca la posición correspondiente 1. en la nueva tabla de estructura de datos k 1 (dict o lista). El efecto en este momento es k = 2, k 1 = 3 y dicta = {48: {13: {19: 4}}, 49: {71:). {51: 10}}, ?... } o generar lista [ [48, 13, 19, 4], [49, 71, 51, 10], .. ]
Ten en cuenta que antes. Al ingresar al siguiente escaneo, también necesitamos registrar adicionalmente los valores de conteo de las tuplas cuyo valor en el contador es menor que s como 0.
El patrón general es: C1 después de filtrar L1 después de contar C2 después de poner a cero C2' después de filtrar L2 después de contar C3 después de poner a cero C3'...
FIN.
Tipos de productos generados en forma de conjunto: convertir a forma de lista
Primero tabla: convierte los nombres de los elementos a números enteros del 1 al n:
En cuanto a contar, dijo el maestro, puedes usar Just Counter: ¿Eh?
Jaja, cariño, comencemos el análisis~LuluLalalala~LuluLalalaal~
Generar una matriz todo ceros:
Cambiar ceros:
Cuenta la suma de cada columna, es decir, el número total de compras de cada producto:
Cada fila:
La primera fila:
Crear una nueva matriz de cesta de la compra que contiene sólo conjuntos frecuentes de un artículo:
Conjuntos binomiales frecuentes: