Beispiel #1
0
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;
}
Beispiel #2
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;
}
Beispiel #3
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;
}
Beispiel #4
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;
}
Beispiel #5
0
/**
 * @brief Load concert logos
 * @param tmdbId The Movie DB id
 */
void FanartTv::concertLogos(QString tmdbId)
{
    loadMovieData(tmdbId, ImageType::ConcertLogo);
}
Beispiel #6
0
/**
 * @brief Load concert cd arts
 * @param tmdbId The Movie DB id
 */
void FanartTv::concertCdArts(QString tmdbId)
{
    loadMovieData(tmdbId, ImageType::ConcertCdArt);
}
Beispiel #7
0
/**
 * @brief Load movie cd arts
 * @param tmdbId The Movie DB id
 */
void FanartTv::movieCdArts(QString tmdbId)
{
    loadMovieData(tmdbId, ImageType::MovieCdArt);
}
Beispiel #8
0
/**
 * @brief Load concert backdrops
 * @param tmdbId
 */
void FanartTv::concertBackdrops(QString tmdbId)
{
    loadMovieData(tmdbId, ImageType::ConcertBackdrop);
}
Beispiel #9
0
void FanartTv::movieThumbs(QString tmdbId)
{
    loadMovieData(tmdbId, ImageType::MovieThumb);
}
Beispiel #10
0
void FanartTv::movieBanners(QString tmdbId)
{
    loadMovieData(tmdbId, ImageType::MovieBanner);
}
Beispiel #11
0
/**
 * @brief Load movie logos
 * @param tmdbId The Movie DB id
 */
void FanartTv::movieLogos(QString tmdbId)
{
    loadMovieData(tmdbId, ImageType::MovieLogo);
}
Beispiel #12
0
/**
 * @brief Load movie backdrops
 * @param tmdbId
 */
void FanartTv::movieBackdrops(QString tmdbId)
{
    loadMovieData(tmdbId, ImageType::MovieBackdrop);
}
Beispiel #13
0
/**
 * @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);
}