您是否见过 Netflix 如何根据您之前看过并喜欢观看的电影向您推荐某些电影?我正在尝试做同样的事情,但只是为了一套书。
我有 53 本书和 32 个用户。32 位用户对每本书的评分从 5 到 -5,其中 5 分是我喜欢的。用于计算两本书之间“相似”程度的公式如下:
x1*y1
表示用户一个对书 x 和书 y 的评分,x2*y2
表示第二个用户对同一 2 本书的评分,对所有用户都继续。
传递给此方法的数组是主数组。主数组的每一个元素对应一个用户,用户数组的每一个元素对应一本书。(32 个用户数组,每个数组本身就是一个 53 元素的数组)
保存每个用户评分的数组是按顺序排列的,compValuehold[0][0]
代表第一个用户对第一本书的评分,compValuehold[0][2]
代表第一个用户对第二本书的评分,等等。
public static void DisplayRatings(double[][] compValuehold)
{
double eachUserProduct = 0;
double denominatorXSum = 0;
double denominatorYSum = 0;
double Score = 0;
int counterForScore = 0;
double[] calculatedValues = new double[52];
//this for loop should calculate each book's ratings and store it
//in an array
for (int i = 0; i < 52; i++)
{
for (int j = 0; j < 32; j++)
{
eachUserProduct += compValuehold[j][i] * compValuehold[j][i + 1];
denominatorXSum += compValuehold[j][i] * compValuehold[j][i];
denominatorYSum += compValuehold[j][i + 1] * compValuehold[j][i + 1];
}
denominatorXSum = Math.Sqrt(denominatorXSum);
denominatorYSum = Math.Sqrt(denominatorYSum);
Score = eachUserProduct / (denominatorXSum * denominatorYSum);
calculatedValues[counterForScore] = Score;
counterForScore += 1;
denominatorXSum = 0;
denominatorYSum = 0;
eachUserProduct = 0;
}
}
我能够编写代码来比较第一本书和其他书。我的问题是我需要找出每本书最相似的书。这意味着要多次计算该公式。我不知道如何为所有的书做到这一点。