示例#1
0
        void Recomendador.realizaAnalisis()
        {
            tiempo++;
            coldStart.realizaAnalisis();

            InicializaSVD();

            for (int f = 0; f < nFeatures; f++)
            {
                double antRMSE = 0.0;
                for (int iterarion = 0; iterarion < nIterations && Math.Abs(rmse - antRMSE) >= difConvergencia; iterarion++)
                {
                    foreach (var u in uVector)
                    {
                        foreach (var p in u.Value)
                        {
                            train(f, pUser[u.Key], pProblem[p.Key], p.Value);
                        }
                    }
                    antRMSE = rmse;
                    actualizaRMSE();
                    //Registra RMSE


                    EventoManager.Instance.registraEvento("RMSE-SVD", rmse.ToString());
                }
            }
            //gurada los features
            db.guardaUserF(nFeatures, usuarios, userFeatrure);
            db.guardaProblemF(nFeatures, problemas, problemFeature);
        }
示例#2
0
        void Recomendador.realizaAnalisis()
        {
            coldStart.realizaAnalisis();
            tiempo++;
            pId    = new int[problemas.Count];
            invPId = new Dictionary <int, int>();
            sim    = new double[problemas.Count, problemas.Count];

            int p     = 0;
            var pEnum = problemas.GetEnumerator();

            while (pEnum.MoveNext())
            {
                var problem = pEnum.Current;
                pId[p] = problem.idProblema;
                invPId[problem.idProblema] = p;
                p++;
            }
            calificaciones = db.calificacionesProblema();
            for (int i = 0; i < pId.Length; i++)
            {
                for (int j = 0; j < pId.Length; j++)
                {
                    //sim[i, j] = similitud(calificaciones[pId[i]], calificaciones[pId[j]]);
                    sim[i, j] = sim2(pId[i], pId[j]);
                }
            }
            db.registraSimilitudes(pId, sim);
        }
示例#3
0
 void Recomendador.realizaAnalisis()
 {
     /// TODO: encontrar Usuarios Similares.
     /// TODO: solo calcular similitudes necesarias, no toda la matriz
     coldStart.realizaAnalisis();
     tiempo++;
     uVector   = db.usuariosVector();
     usuarios  = uVector.Keys.ToArray();
     similitud = new double[usuarios.Length, usuarios.Length];
     for (int i = 0; i < usuarios.Length; i++)
     {
         for (int j = 0; j < usuarios.Length; j++)
         {
             //similitud[i, j] = sim(uVector[usuarios[i]], uVector[usuarios[j]]);
             similitud[i, j] = sim2(usuarios[i], usuarios[j]);
         }
     }
     db.guardaSimilitudes(usuarios, similitud);
     similitud = null;
     GC.Collect(); // para que se limpie memoria
 }
示例#4
0
        void Recomendador.realizaAnalisis()
        {
            coldStart.realizaAnalisis();
            tiempo++;
            historias          = db.historiasUsuarios();
            historiasOrdenadas = new Dictionary <int, List <int> >();
            usuarioResolvioP   = new Dictionary <int, Dictionary <int, bool> >();
            foreach (var historia in historias)
            {
                historiasOrdenadas[historia.Key] = new List <int>(historia.Value);
                historiasOrdenadas[historia.Key].Sort();
                usuarioResolvioP[historia.Key] = new Dictionary <int, bool>();
                foreach (var problema in historia.Value)
                {
                    usuarioResolvioP[historia.Key][problema] = true;
                }
            }
            List <int> usuariosId = new List <int>(historias.Keys);

            usuarios    = usuariosId.ToArray();
            inversiones = new int[usuarios.Length, usuarios.Length];
            iguales     = new int[usuarios.Length, usuarios.Length];
            complemento = new int[usuarios.Length, usuarios.Length];
            GC.Collect();
            score = new double[usuarios.Length, usuarios.Length];
            for (int i = 0; i < usuarios.Length; i++)
            {
                for (int j = 0; j < usuarios.Length; j++)
                {
                    inversiones[i, j] = cuentaInversiones(historias[usuarios[i]], historias[usuarios[j]]);
                    iguales[i, j]     = nIguales;
                    complemento[i, j] = nComplemento;
                    score[i, j]       = (126.0 - Math.Sqrt(2.0 * inversiones[i, j])) * iguales[i, j] * complemento[i, j];
                }
            }
            db.guardaAnalisis(usuarios, inversiones, iguales, complemento, score);
            score = null;
            GC.Collect();
        }