Я использую класс Mahout EuclideanDistanceSimility для ранжирования сходства нескольких пользователей с учетом следующего набора данных пользовательских предпочтений.Диапазон предпочтений в настоящее время все целые числа от 1 до 5 включительно.Однако у меня есть контроль над шкалой, так что это может измениться, если это поможет.
User Preferences:
Item 1 Item 2 Item 3 Item 4 Item 5 Item 6
1 2 4 3 5 1 2
2 5 1 5 1 5 1
3 1 5 1 5 1 5
4 2 4 3 5 1 2
5 3 3 4 5 2 2
Я получаю неожиданные результаты, когда запускаю следующий тестовый код, который я добавил в класс Test, найденный здесь: http://www.massapi.com/source/mahout-distribution-0.4/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarityTest.java.html
@Test
public void testSimple2() throws Exception {
DataModel dataModel = getDataModel(
new long[]{1, 2, 3, 4, 5},
new Double[][]{
{2.0, 4.0, 3.0, 5.0, 1.0, 2.0},
{5.0, 1.0, 5.0, 1.0, 5.0, 1.0},
{1.0, 5.0, 1.0, 5.0, 1.0, 5.0},
{2.0, 4.0, 3.0, 5.0, 1.0, 2.0},
{3.0, 3.0, 4.0, 5.0, 2.0, 2.0},});
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
System.out.println( i + "," + j + ": " + new EuclideanDistanceSimilarity(dataModel).userSimilarity(i, j));
}
}
}
Он дает следующие результаты:
1,1: 1.0
1,2: 0.7129109430106292
1,3: 1.0
1,4: 1.0
1,5: 1.0
2,1: 0.7129109430106292
2,2: 1.0
2,3: 0.5556605665978556
2,4: 0.7129109430106292
2,5: 0.8675434911352263
3,1: 1.0
3,2: 0.5556605665978556
3,3: 1.0
3,4: 1.0
3,5: 0.9683428667784535
4,1: 1.0
4,2: 0.7129109430106292
4,3: 1.0
4,4: 1.0
4,5: 1.0
5,1: 1.0
5,2: 0.8675434911352263
5,3: 0.9683428667784535
5,4: 1.0
5,5: 1.0
Кто-нибудь, пожалуйста, помогите мне понять, что я здесь делаю неправильно?Очевидно, что предпочтения пользователя 1 не идентичны пользователям 3 и 5, так почему я получаю 1,0 за сходство?
Я открыт для использования другого алгоритма, если евклидов не сработает, однако Пирсон этого не делает.это не работает для меня, потому что мне нужно работать с пользователями, которые представляют одинаковые настройки для каждого элемента, и я не хочу исправлять «инфляцию».