background image

ZASTOSOWANIE ALGORYTMÓW GRUPOWANIA 

W SIECI WWW I E-BIZNESIE

Sprawozdanie III

Algorytmy grupujące w systemach rekomendujących

Czemiel Paulina

Hałaburda Krzysztof

background image

Zadanie 1

Dla podzbioru danych MovieLens zawierających 50 użytkowników i ich oceny dla 10 filmów:

podzielić dane na zbiór uczący (45) i testowy (5), 

w zbiorze uczącym wyodrębnić grupy za pomocą algorytmu EM 

oszacować wybrane oceny w zbiorze testowym (po jednej dla każdego użytkownika):   

dla każdego użytkownika ze zbioru testowego:

na podstawie odległości euklidesowej przydzielamy grupę 

pobieramy odpowiednią wartość średnią tej grupy i przydzielamy ją 
dla nieznanej oceny 

Rozwiązanie

Otrzymane dane grup:

Number of clusters selected by cross validation: 2
f1
  mean        3.6318  1.9928
  std. dev.   0.9677  1.1139
f2
  mean        3.4999  3.5004
  std. dev.   0.2767  0.0147
f3
  mean             0       0
  std. dev.        0       0
f4
  mean             4       4
  std. dev.        0       0
f5
  mean        3.3333  3.3333
  std. dev.   0.1231  0.3381
f6
  mean           3.5  3.4999
  std. dev.   0.3084  0.2174
f7
  mean        4.0263  3.8235
  std. Dev.   0.4208  0.3829
f8
  mean             3       3
  std. dev.        0       0
f9

background image

  mean             4       4
  std. dev.        0       0
f10
  mean        4.4289  4.4262
  std. dev.   0.2088  0.0318
Time taken to build model (full training data) : 0.52 seconds

Profil po zaokrągleniu:
f1  mean    4  2
f2  mean    3  4
f3  mean    0  0
f4  mean    4  4
f5  mean    3  3
f6  mean    4  3
f7  mean    4  4
f8  mean    3  3
f9  mean    4  4
f10 mean    4  4

Zbiór testowy:
f1

f2

f3

f4

f5

f6

f7

f8

f9

f10

4

1

"?"

"?"

"?"

"?"

"?"

"?"

"?"

"?"

1

"?"

"?"

"?"

"?"

3

5

"?"

"?"

"?"

5

1

"?"

"?"

"?"

"?"

"?"

"?"

"?"

"?"

1

1

"?"

"?"

"?"

"?"

"?"

"?"

"?"

5

5

"?"

"?"

"?"

4

4

5

"?"

5

"?"

Kod funkcji liczącej odległość euklidesową i zwracająca bliższą ocenę:

function licz_ocene($i,$aOceny,$aProfile){

$iPodPierwiastkiem[0]=0;
$iPodPierwiastkiem[1]=0;

for($f=1;$f<count($aOceny);$f++){

if($f<>$i&&$aOceny[$f]<>"?"){

$iPodPierwiastkiem[0]+=pow(($aOceny[$f]-$aProfile[$f][0]),2);
$iPodPierwiastkiem[1]+=pow(($aOceny[$f]-$aProfile[$f][1]),2);

}

}

if(sqrt($iPodPierwiastkiem[0])<sqrt($iPodPierwiastkiem[1])){

return 0;

}return 1;

}

background image

Tabela wyników wyliczona dla f1:

nr  ocena rzeczywista   ocena oszacowana 

1

4

4

2

1

2

3

5

4

4

1

4

5

5

4