Question
#include #include #include #include #include #include #include #include #include // A struct to represent a rating given by a user to an item struct Rating
#include
// A struct to represent a rating given by a user to an item struct Rating { int user_id; int item_id; float rating; };
// A struct to represent a predicted rating for an item struct PredictedRating { int id; int user_id; int item_id; float rating; };
// Reads the ratings from a .csv file and returns them as a vector std::vector
std::ifstream file(filename); if (file.is_open()) { std::string line; // Skip the first line (header) std::getline(file, line); while (std::getline(file, line)) { Rating rating; std::sscanf(line.c_str(), "%d,%d,%f", &rating.user_id, &rating.item_id, &rating.rating); ratings.push_back(rating); } file.close(); }
return ratings; }
// Reads the test cases from a .csv file and returns them as a vector std::vector
std::ifstream file(filename); if (file.is_open()) { std::string line; // Skip the first line (header) std::getline(file, line); while (std::getline(file, line)) { PredictedRating test_case; std::sscanf(line.c_str(), "%d,%d,%d", &test_case.id, &test_case.user_id, &test_case.item_id); test_cases.push_back(test_case); } file.close(); }
return test_cases; }
// Calculates the root mean squared error between the predicted ratings and the actual ratings float calculate_rmse(const std::vector
float predict_rating_mean_item(int user_id, int item_id, const std::unordered_map
int main() { // Read in the training and test sets std::vector
// Initialize a map to store the ratings received by each item std::unordered_map
std::fstream fout;
// opens an existing csv file or creates a new file. fout.open("report.csv", std::ios::out | std::ios::app);
// Predict the ratings for the test set using the mean rating of the item for (auto& predicted_rating : test_set) { predicted_rating.rating = predict_rating_mean_item(predicted_rating.user_id, predicted_rating.item_id, item_ratings); fout << std::to_string(predicted_rating.id) << "," << std::to_string(predicted_rating.rating) << " "; }
// Calculate the RMSE between the predicted ratings and the actual ratings float rmse = calculate_rmse(test_set, training_set); std::cout << "RMSE: " << rmse << std::endl;
return 0; }
I want to be able to lower the RMSE value even more by using matrix factorization. Can you rewrite this code accordingly? Understand my question thoroughly, do not write nonsense answers. Please DO NOT spam.
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started