El filtrado colaborativo simplemente utiliza las preferencias de un grupo con intereses similares y experiencia común para recomendar información que los usuarios estén interesados. Las personas responden a la información en un grado considerable (como la calificación) a través de mecanismos cooperativos y registrarla para lograr el propósito de filtrar para ayudar a otros a filtrar la información. La respuesta no se limita necesariamente a los registros de información que están particularmente interesados, y los registros de información que no están interesados también son muy importantes.
El filtrado colaborativo se puede dividir en calificación o filtrado social. El filtrado colaborativo es muy popular en el campo global de Internet con su excelente velocidad y robustez.
La idea central de UserCF es simular la similitud vectorial basada en los datos del usuario. Según esta similitud, encontramos usuarios similares del usuario especificado y luego recomendamos cosas que los usuarios similares han comprado pero que el usuario especificado no ha comprado al usuario especificado. El cálculo del grado de recomendación también combina la similitud entre usuarios similares y el usuario especificado al usuario especificado. Tenga en cuenta que nos defraudamos el comportamiento de retroalimentación oculta del usuario, por lo que el factor de influencia de cada elemento es 1 de forma predeterminada.
paquete cn.csu.cfutils; import java.util.hashmap; import java.util.hashset; import java.util.iterator; import java.util.map; import java.util.map.entry; import java.util.scanner; import java.util.set;/** * Implementación de una ABD B * @Author Administrator * */public class UsERCf {public static void main (string [] args) {/** * Ingrese el usuario-> El usuario de entrada de entrada corresponde a múltiples elementos * ID de usuario ID de ID de ID COLECCIÓN * A ABD * B AC * C BE * D CDE */Scanner Scanner = New Scanner (System.in); System.out.Println ("Ingrese el número total de usuarios:");//Input the Input de usuarios (System.in); scanner.nextInt (); int [] [] sparsematrix = new int [n] [n]; // Cree una matriz dispersa de usuario para el cálculo de la similitud de usuario [Simility Matrix] Map <String, Integer> UserItemLength = Hashmap <> (); // Cree una tabla invertida de los elementos a los usuarios, por ejemplo, un conjunto AB set <String> elementos = new Hashset <> (); // Mapa de colección de elementos de almacenamiento auxiliar <String, Integer> usuario de usuario = new Hashmap <> (); // Mapa de usuarios de almacenamiento de Auxiliares System.out.println ("Ingrese el usuario-Items Información de mapeo: <Eg: A AB D>"); Scanner.NextLine (); for (int i = 0; i <n; i ++) {// Process n Datos de entrada del usuario en secuencia con intervalos de espacio String [] user_item = Scanner.NextLine (). Split ("); int Longin user_item.length; userItemLength.put (user_item [0], longitud-1); // Eg: A 3 userId.put (user_item [0], i); // Cree una correspondencia entre la ID de usuario y la matriz de matriz. ++) {if (items.contains (user_item [j])) {// Si el elemento correspondiente se ha incluido el mapa de usuario, agregue directamente el usuario Correspondiente itemusUsCollection.get (user_item [j]). Agregar (user_item [0]);} else {/ de otra manera crea el mapa de colección de elementos correspondiente items.Add (user_item [j]); itemUserCollection.put (user_item [j], new Hashset <String> ()); // Crear elemento-User Relación inversa itemUserCollection.get (user_item [j]). add (user_item [0]);}}} system.println (elementuserCollection.TostRing (); [SPARSE] SET <Entry <String, Set <String>>> EntrySet = itemUserCollection.EntrySet (); Iterator <Entry <String, Set <String>> iterator = EntrySet.Iterator (); while (iterator.hasNext ()) {set <string> comunesUsers = iterator.next (). getValue (); for (string user_u: comunsUsers) {for (string user_v: comunsUsers) {if (user_u.equals (user_v)) {continúa;} sparsematrix [userId.get (user_u)] [userId.get (user_v)] += 1; // Calcule el número total de elementos que tienen retroalimentación positiva de los usuarios de User y User UNS USER US USUD UNSE USUR v}}}} system.out.println (userItemLength.ToString ()); system.out.println ("Ingrese al usuario para la recomendación: <eg: a>"); string recomendación = Scanner.nextline (); system.out.outln (userid.get (recomendación recomendación)); // calcule el similitud entre los usuarios [Cosine Similimentidad de similitudes similacentes. userId.get (recomendador); for (int j = 0; j <sparsematrix.length; j ++) {if (j! = RecomenduserId) {System.out.println (iduser.get (recomendación de recomendación)+"-"+iduser.get (j)+"similitud:"+sparsematrix [recomendar duserid] [j] /math.sqrt (userItemLength.get (iduser.get (recomendación de recomendación))*userItemLength.get (iduser.get (j)));}} // calcule El grado de recomendación del elemento del Usuario especificado Recomendado para (String items: elementos) {// Transtraight Cada elemento establece <String> ussers = itemUserCollection.get (elemento); // Obtenga todas las colecciones de usuario para comprar el elemento actual si (! Uss.ContainSer (recomendar) {// si el usuario recomendado no compra el elemento actual, el elemento de recomendación se realiza un elemento de doble ítem, realiza un elemento doble que el artículo tiene un rendimiento de doble ítemReReeReeRee; for (String User: users) {itemRecommendDegree+= SparsEmatrix [userId.get (recomendador)] [userId.get (user)]/math.sqrt (userItemLength.get (recomendación de recomendación)*userItItemLength.get (user); // Recomendación Cálculo} System.out.Println ("El ítem"+item+"para" para "+" Recomendado) Grado: "+itemRecommendDegree);}} Scanner.close ();}}resultado:
Ingrese el número de usuarios totales: 6 Entradas Usuario-Itementa de mapeo Información: <Eg: A AB D> aassdddjshgjh2415231424dsjkj dklsjf ladkjsfdf8g78dfg78 8787 48787 sdfasd {dklsjf = [dsjkj], sdfas 8787 = [DF8G78DFG78], LADKJSF = [DSJKJ]} {AASSDD = 0, DF8G78DFG78 = 1, 48787 = 1, 2415231424 = 0, DJSHGJH = 0, DSJKJ = 2} Entrado El usuario para Recomendación: <Eg: A> aassdd0aassdd-djshgjh Similitud: nanaassdd --2415231424 Similitud: nanaassdd-dsjkj similitud: nanaassdd-df8g78dfg78 Similitud: nanaassdd-48787 Similitud: nantthe item dklsjf para Assdd's SDFASD para el título recomendado de AASSDD: Nantthe Artículo 8787 para el título recomendado de AASSDD: Nantthe item Ladkjsf para el título recomendado de AASSDD: NANResumir
Lo anterior es todo el contenido de este artículo sobre la programación de Java para implementar ejemplos de código de algoritmo recomendado basado en el filtrado colaborativo basado en el usuario. Espero que sea útil para todos. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!