다음 사용자 환경 설정 데이터가있는 경우 Mahout의 EuclideanDistanceSimilarity 클래스를 사용하여 여러 사용자의 유사성 순위를 매기고 있습니다. 환경 설정의 범위는 현재 모두 1에서 5까지의 정수입니다. 그러나 나는 규모에 대한 통제권을 가지므로 도움이된다면 그것을 바꿀 수 있습니다.Apache Mahout + 유클리드 거리 : 예기치 않은 결과
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
: 그것은 다음과 같은 결과를
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));
}
}
}
: 내가 여기에있는 테스트 클래스에 추가 한 다음 테스트 코드를 실행하면
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
나는 예기치 않은 결과를 얻고있다
누군가 내가 여기서 잘못하고있는 것을 이해할 수 있도록 도와 주시겠습니까? 분명히 사용자 1의 기본 설정은 사용자 3 & 5와 동일하지 않으므로 유사성 때문에 1.0을 얻는 이유는 무엇입니까?
유클리드가 작동하지 않으면 다른 알고리즘을 사용할 수 있습니다. 그러나 각 항목에 대해 동일한 환경 설정을 제출하는 사용자를 처리해야하기 때문에 Pearson이 작동하지 않아 " 급료 인플레이션. "
겹침의 변형은 문제가 아니어야합니다. 사용자가 여러 가지 필수 프로필 질문에 대한 답변으로 사용자를 검색하려고하므로 모든 사용자는 정확하게 동일한 '항목'집합에 대한 환경 설정을 가져야합니다. 또 다른 참고로, EuclideanDistanceSimilarity (http://javasourcecode.org/html/open-source/mahout/mahout-0.5/index.html?org/apache/mahout/cf/taste/impl/similarity/GenericUserSimilarity.html)에 대한 javadocs)는 "유사도가 1/(1 + 거리)로 계산되므로 결과 값이 범위 (0,1)에 있습니다"라고 말합니다. 따라서 n = 1 인 경우 1보다 큰 유사성은 올바르지 않아야합니다. – 10GritSandpaper
의사가 실제로 잘못되어 결과 값이 1보다 커질 수 있습니다. sqrt (n)과 같은 요소가 적절하다고 생각합니다. 변형은 여기에 적용되지 않습니다. 그렇습니다. 단지 왜 그렇게 높은 1.0의 유사점을 보았는지 설명해주십시오. –
고맙습니다. 그 점에 대해 설명해 드리겠습니다. 유사성 확률이 1.0을 초과하면 선호도 범위에 대한 차원 수의 비율이 증가합니다. 10과 100의 요인에 의해 일률적으로 선호도 값; 그리고 이것은 팬 아웃 것 같습니다. 난 단지 1.0 똑같은 성냥 이군. 그렇다면 환경 설정 범위를 확장하여 문제를 해결할 수 있어야합니다. 그게 맞는 것 같니? – 10GritSandpaper