int main(){ // Load Movie data loadMovieData("../../netflix/um/all_ut.dta"); //loadMovieData("../stats/probe.dta"); printf("test %d\n", movie_data[20]); // printf("test %f %f %f %f\n", userOffset[5], userOffset[num_users - 1], movieOffset[5], movieOffset[num_movies - 1]); // Set up offsets userOffset = calloc(num_users, sizeof(float)); movieOffset = calloc(num_movies, sizeof(float)); if (userOffset == NULL || movieOffset == NULL) { printf("Malloc failed\n"); return -1; } // Set up feature arrays for user and movies userFeatures = calloc(num_users, sizeof(float *)); movieFeatures = calloc(num_movies, sizeof(float *)); implicitFeatures = calloc(num_movies, sizeof(float *)); userImplicitData = calloc(num_users*2, sizeof(float)); itemBinBias = calloc(num_movies, sizeof(float *)); userAlphas = calloc(num_users, sizeof(float)); if (userFeatures == NULL || movieFeatures == NULL || userImplicitData == NULL) { printf("Malloc failed\n"); return -1; } // Load offsets loadData("features/f050_e030/user_offset.dta", userOffset); loadData("features/f050_e030/movie_offset.dta", movieOffset); loadData("features/f050_e030/user_alphas.dta", userAlphas); // Load item bin bias loadFileAvg("../stats/user_date_avg.dta"); loadUserDev("../stats/user_date_dev.dta", "features/f050_e030/user_time_bias.dta"); // Load user implicit data loadUserImplicit("../stats/user_implicit_2.dta", userImplicitData); // Load initializeImplicitMovies("../../implicit/user_implicit_movies.dta"); // Load featuress loadFeatures("features/f050_e030/user_features.dta", num_users, num_features, userFeatures); loadFeatures("features/f050_e030/movie_features.dta", num_movies, num_features, movieFeatures); loadFeatures("features/f050_e030/implicit_features.dta", num_movies, num_features, implicitFeatures); loadFeatures("features/f050_e030/item_bin_bias.dta", num_movies, num_time_bins, itemBinBias); printf("Test %f %f\n", userFeatures[1][num_features - 1], userFeatures[num_users-1][num_features-1]); predictions = calloc(num_lines*3, sizeof(float)); if (predictions == NULL) { return -1; } printf("--------------Predicting --------------\n"); int user, movie, line_number, item_bin, date, rating; int count = 0; int user_date_count = -1; float n = userImplicitData[1*2 + 1]; // get n for first user float feature_c, alpha, dev, user_time_b; int temp = 0; int date_temp = 0; for (unsigned int j = 0; j < total_size; j++) { line_number = j * 4; user = movie_data[line_number]; movie = movie_data[line_number + 1]; date = movie_data[line_number + 2]; rating = movie_data[line_number + 3]; if (temp != user) { // update implict feature for previous user n = userImplicitData[user*2 + 1]; getImplicitC(user, n); temp = user; date_temp = 0; user_date_count = -1; } // Update different date count if (date != date_temp) { //printf("date %d ", date); user_date_count ++; date_temp = date; } // if not in test set continue if (rating != 0) { continue; } // Get contribution from each feature feature_c = 0; for (unsigned int i = 0; i < num_features; i++) { feature_c += (userFeatures[user][i] + implicitC[i])* movieFeatures[movie][i]; } //printf("user %d movie %d date %d user_date_count %d rating %d total dates %d\n", // user, movie, date, user_date_count, rating, (int) timeAvg[user]); // Get user time bias and alpha alpha = userAlphas[user]; dev = userDev[user][(user_date_count)*2]; user_time_b = userDev[user][(user_date_count)*2 +1]; // Get item bin number and bias item_bin = (int) floor(date / 75.0); predictions[count] = user; predictions[count + 1] = movie; predictions[count + 2] = (GLOBAL_AVG + userOffset[user] + movieOffset[movie] + itemBinBias[movie][item_bin] + alpha*dev + user_time_b + feature_c); count += 3; } printf("-----------Saving results-----------\n"); saveResults("results/ut_test_f050_e030.dta"); free(userOffset); free(movieOffset); free(movie_data); return 0; }
int main(){ // Load Movie data loadMovieData("../../netflix/um/qual.dta"); //loadMovieData("../stats/probe.dta"); printf("test %d\n", movie_data[20]); // printf("test %f %f %f %f\n", userOffset[5], userOffset[num_users - 1], movieOffset[5], movieOffset[num_movies - 1]); // Set up offsets userOffset = calloc(num_users, sizeof(float)); movieOffset = calloc(num_movies, sizeof(float)); if (userOffset == NULL || movieOffset == NULL) { printf("Malloc failed\n"); return -1; } // Set up feature arrays for user and movies userFeatures = calloc(num_users, sizeof(float *)); movieFeatures = calloc(num_movies, sizeof(float *)); implicitFeatures = calloc(num_movies, sizeof(float *)); userImplicitData = calloc(num_users*2, sizeof(float)); if (userFeatures == NULL || movieFeatures == NULL || userImplicitData == NULL) { printf("Malloc failed\n"); return -1; } // Load offsets loadData("features/f220_e050/user_offset.dta", userOffset); loadData("features/f220_e050/movie_offset.dta", movieOffset); // Load user implicit data loadUserImplicit("../stats/user_implicit_2.dta", userImplicitData); // Load initializeImplicitMovies("../../implicit/user_implicit_movies.dta"); // Load featuress loadFeatures("features/f220_e050/user_features.dta", num_users, userFeatures); loadFeatures("features/f220_e050/movie_features.dta", num_movies, movieFeatures); loadFeatures("features/f220_e050/implicit_features.dta", num_movies, implicitFeatures); printf("Test %f %f\n", userFeatures[1][num_features - 1], userFeatures[num_users-1][num_features-1]); predictions = calloc(num_lines, sizeof(float)); if (predictions == NULL) { return -1; } printf("--------------Predicting --------------\n"); int user, movie, line_number; int count = 0; float n = userImplicitData[1*2 + 1]; // get n for first user float feature_c; int temp = 0; for (int j = 0; j < num_lines; j++) { line_number = j * 2; user = movie_data[line_number]; movie = movie_data[line_number + 1]; if (temp != user) { n = userImplicitData[user*2 + 1]; getImplicitC(user, n); temp = user; } feature_c = 0; for (int i = 0; i < num_features; i++) { feature_c += (userFeatures[user][i] + implicitC[i])* movieFeatures[movie][i]; } predictions[count] = clipScore(GLOBAL_AVG + userOffset[user] + movieOffset[movie] + feature_c); count++; } printf("-----------Saving results-----------\n"); saveResults("results/um_test_f220_e050.dta"); free(userOffset); free(movieOffset); free(movie_data); return 0; }
int main(){ // Load Movie data loadMovieData(); // printf("test %f %f %f %f\n", userOffset[5], userOffset[num_users - 1], movieOffset[5], movieOffset[num_movies - 1]); // Set up offsets and implicit data userOffset = calloc(num_users, sizeof(float)); movieOffset = calloc(num_movies, sizeof(float)); userImplicitData = calloc(num_users*2, sizeof(float)); if (userOffset == NULL || movieOffset == NULL || userImplicitData == NULL) { printf("Malloc failed\n"); return -1; } //loadData("../stats/user_offset_reg2.dta", userOffset); //loadData("../stats/movie_offset_reg.dta", movieOffset); loadUserImplicit("../stats/user_implicit_2.dta", userImplicitData); // Initialize features // Initialize random seed srand (time(NULL)); initializeUserFeatures(); initializeMovieFeatures(); initializeImplicitMovies("../../implicit/user_implicit_movies.dta"); //printf("test %f\n", userImplicitMovies[num_users - 1][2]); initializeImplicitFeatures(); printf("\n--------------Training --------------\n"); unsigned int user, movie, rating, line_number; unsigned int temp = 0; float err, feature_c; float train_err, val_err; train_errs = calloc(epochs, sizeof(float)); float n = userImplicitData[1*2 + 1]; // get n for first user float GLOBAL_AVG = 3.609516; for (unsigned int i = 1; i <= epochs; i++) { train_err = 0; val_err = 0; for (unsigned int j = 0; j < num_lines; j++) { line_number = j * 3; user = movie_data[line_number]; movie = movie_data[line_number + 1]; rating = movie_data[line_number + 2]; // Get rating from raw data if we have a new user if (temp != user) { // update implict feature for previous user if (temp > 0) { updateImplicitFeatures(temp, n); } n = userImplicitData[user*2 + 1]; getImplicitC(user, n); //baseline_c = userOffset[user] + movieOffset[movie]; temp = user; // if (user == 34821) { // printf("user %d err %f n %f implicitC %f tempC %f\n", user, total_err, n, implicitC[0], tempImplicitC[0]); // printf("base %f\n", baseline_c); // } } feature_c = 0; for (unsigned int i = 0; i < num_features; i++) { feature_c += (userFeatures[user][i] + tempImplicitC[i])* movieFeatures[movie][i]; } err = (float) rating - (GLOBAL_AVG + userOffset[user] + movieOffset[movie] + feature_c); //printf("err %f rating %d predict %f baseline_c %f feature_c %f\n", err, rating, GLOBAL_AVG + baseline_c + feature_c, baseline_c, feature_c); // if (idx[j] == 4) { // val_err += err * err; // } train_err += err * err; updateFeatures(user, movie, err, n); updateBaseline(user, movie, err); } // update last user updateImplicitFeatures(user, n); // Update gammas by factor gamma1 *= gamma_step; gamma2 *= gamma_step; train_errs[i-1] = sqrt(train_err / num_lines); printf("Epoch %d Train RMSE: %f\n", i, train_errs[i-1]); } printf("-----------Saving features-----------\n"); saveOffsets(); saveUserFeatures("features/f220_e050/user_features.dta"); saveMovieFeatures("features/f220_e050/movie_features.dta"); saveImplicitFeatures("features/f220_e050/implicit_features.dta"); saveErrors("features/f220_e050/error.dta"); free(userOffset); free(movieOffset); free(movie_data); return 0; }
int main(){ // Load Movie data loadMovieData(); // printf("test %f %f %f %f\n", userOffset[5], userOffset[num_users - 1], movieOffset[5], movieOffset[num_movies - 1]); // Set up offsets and implicit data userOffset = calloc(num_users, sizeof(float)); movieOffset = calloc(num_movies, sizeof(float)); userImplicitData = calloc(num_users*2, sizeof(float)); if (userOffset == NULL || movieOffset == NULL || userImplicitData == NULL) { printf("Malloc failed\n"); return -1; } loadData("../stats/user_offset_reg2.dta", userOffset); loadData("../stats/movie_offset_reg.dta", movieOffset); loadUserImplicit("../stats/user_implicit_2.dta", userImplicitData); // Initialize features // Initialize random seed srand (time(NULL)); initializeUserFeatures(); initializeMovieFeatures(); initializeImplicitMovies("../../implicit/user_implicit_movies.dta"); //printf("test %f\n", userImplicitMovies[num_users - 1][2]); initializeImplicitFeatures(); printf("\n--------------Training --------------\n"); int user, movie, line_number; float rating, predict, err; float total_err; for (int i = 1; i <= epochs; i++) { total_err = 0; for (int j = 0; j < num_lines; j++) { line_number = j * 3; user = movie_data[line_number]; movie = movie_data[line_number + 1]; rating = (float)movie_data[line_number + 2]; // printf("User %d Movie %d Rating %d Baseling %f\n", user, movie, rating, baseline); getImplicitC(user); predict = predictRating(user, movie); err = rating - predict; total_err += err * err; updateFeatures(user, movie, err); updateBaseline(user, movie, err); updateImplicitFeatures(user, err); } // Update gammas by factor gamma1 *= gamma_step; gamma2 *= gamma_step; printf("Epoch %d RMSE: %f\n", i, sqrt(total_err / num_lines)); } printf("-----------Saving features-----------\n"); saveOffsets(); saveUserFeatures("f010_e020/user_features.dta"); saveMovieFeatures("f010_e020/movie_features.dta"); saveImplicitFeatures("f010_e020/implicit_features.dta"); free(userOffset); free(movieOffset); free(movie_data); return 0; }
/** * @brief Load concert logos * @param tmdbId The Movie DB id */ void FanartTv::concertLogos(QString tmdbId) { loadMovieData(tmdbId, ImageType::ConcertLogo); }
/** * @brief Load concert cd arts * @param tmdbId The Movie DB id */ void FanartTv::concertCdArts(QString tmdbId) { loadMovieData(tmdbId, ImageType::ConcertCdArt); }
/** * @brief Load movie cd arts * @param tmdbId The Movie DB id */ void FanartTv::movieCdArts(QString tmdbId) { loadMovieData(tmdbId, ImageType::MovieCdArt); }
/** * @brief Load concert backdrops * @param tmdbId */ void FanartTv::concertBackdrops(QString tmdbId) { loadMovieData(tmdbId, ImageType::ConcertBackdrop); }
void FanartTv::movieThumbs(QString tmdbId) { loadMovieData(tmdbId, ImageType::MovieThumb); }
void FanartTv::movieBanners(QString tmdbId) { loadMovieData(tmdbId, ImageType::MovieBanner); }
/** * @brief Load movie logos * @param tmdbId The Movie DB id */ void FanartTv::movieLogos(QString tmdbId) { loadMovieData(tmdbId, ImageType::MovieLogo); }
/** * @brief Load movie backdrops * @param tmdbId */ void FanartTv::movieBackdrops(QString tmdbId) { loadMovieData(tmdbId, ImageType::MovieBackdrop); }
/** * @brief Loads given image types * @param movie * @param tmdbId * @param types */ void FanartTv::movieImages(Movie *movie, QString tmdbId, QList<int> types) { loadMovieData(tmdbId, types, movie); }