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); }
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); }
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 }
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(); }