background image

 

ZASTOSOWANIE ALGORYTMÓW GRUPOWANIA  

W SIECI WWW I E-BIZNESIE 

 

 

 

Sprawozdanie II 

 

Algorytmy w systemach rekomendujących

 

 

 

 

Czemiel Paulina 

Hałaburda Krzysztof 

 

 

 

 

background image

Zadanie 1 

 

Dla podanego zbioru dotyczącego zakupów (0 - oznacza przedmiot nie kupiony, 1 - kupiony przez 

uŜytkownika) stworzyć listę rekomendacji dla klienta który kupił przedmioty 5 i 7.  

 

Kod funkcji:

 

 

function licz_cos($p_i, $p_j, $dane) { 
    $licznik = 0; 
 

$ilosc_osob = count($dane)+1; 

    for ($i = 1; $i < $ilosc_osob; $i++) { 
        $licznik += $dane[$i][$p_i] * $dane[$i][$p_j]; 
    } 
    $pierwiastek[1] = 0; 
    $pierwiastek[2] = 0; 
    for ($i = 1; $i < $ilosc_osob; $i++) { 
        $pierwiastek[1]+= $dane[$i][$p_i]; 
        $pierwiastek[2]+= $dane[$i][$p_j]; 
    } 
    $mianownik = sqrt($pierwiastek[1]) * sqrt($pierwiastek[2]); 
    if ($mianownik == 0) { 
        return 0; 
    } 
    return $licznik / $mianownik; 
}
 

Otrzymane wyniki: 

 

Przedmiot 5 

Przedmiot 7 

p1 

cos(1,5) = 0.35355   

cos(1,7) = 0.00000  

p2 

cos(2,5) = 0.25000   

cos(2,7) = 0.00000  

p3 

cos(3,5) = 0.00000   

cos(3,7) = 0.00000  

p4 

cos(4,5) = 0.00000   

cos(4,7) = 0.00000  

p6 

cos(6,5) = 0.00000 

cos(5,7) = 0.43290 

p7 

cos(7,5) = 0.43290   

cos(6,7) = 0.00000  

p8 

cos(8,5) = 0.43301   

cos(8,7) = 0.83333  

p9 

cos(9,5) = 0.00000   

cos(9,7) = 0.00000  

p10 

cos(10,5) = 0.00000   

cos(10,7) = 0.00000  

p11 

cos(11,5) = 0.00000   

cos(11,7) = 0.00000  

p12 

cos(12,5) = 0.00000   

cos(12,7) = 0.00000  

p13 

cos(13,5) = 0.40089   

cos(13,7) = 0.61721  

p14 

cos(14,5) = 0.00000   

cos(14,7) = 0.00000  

p15 

cos(15,5) = 0.40089 

cos(15,7) = 0.61721 

 

PoniŜej przedstawiono listę rekomendacji dla klienta: 

Przedmiot 5 

Przedmiot 7 

brak 

Przedmiot 8 

Przedmiot 13 

Przedmiot 15 

 

Lista rekomendacji zostaje utworzona wówczas, gdy porównując popularność przedmiotu 

otrzymamy wynik > 0,5. W przypadku klienta, który zakupił przedmiot 5 nie zostanie utworzona 

lista rekomendacji, poniewaŜ z wykonanych obliczeń nie otrzymaliśmy wyników większych niŜ 

0,5. Dla klienta kupującego przedmiot 7 w liście rekomendacji pojawią się przedmioty 8, 13, 15. 

background image

Zadanie 2 

 

1.  Podzielić dane na zbiór testowy (elementy o1 io4) i uczący (pozostałe 8 elementów). 

2.  Dla zbioru uczącego obliczyć średnie róŜnice Dij. 

 

Otrzymane wyniki: 

 

D12:-0.15 

D13:- 

D14:- 

D15:5.14 

D16:- 

D17:15.09 

D18:17.96 

D19:- 

D110:- 

D21:0.15 

D23:- 

D24:- 

D25:4.08 

D26:- 

D27:10.07 

D28:9.515 

D29:- 

D210:- 

D31:- 

D32:- 

D34:- 

D35:- 

D36:- 

D37:- 

D38:- 

D39:- 

D310:- 

D41:- 

D42:- 

D43:- 

D45:- 

D46:- 

D47:- 

D48:- 

D49:- 

D410:- 

D51:-5.14 

D52:-4.08 

D53:- 

D54:- 

D56:- 

D57:2.005 

D58:1.336 

D59:- 

D510:3.64 

D61:- 

D62:- 

D63:- 

D64:- 

D65:- 

D67:- 

D68:- 

D69:- 

D610:- 

D71:-15.09 

D72:-10.07 

D73:- 

D74:- 

D75:- 2.005 

D76:- 

D78:- 0.669 

D79:- 

D710:14.8 

D81:-17.96 

D82:-9.515 

D83:- 

D84:- 

D85:-1.336 

D86:- 

D87:0.669 

D89:- 

D810:11.31 

D91:- 

D92:- 

D93:- 

D94:- 

D95:- 

D96:- 

D97:- 

D98:- 

D910:- 

D101:- 

D102:- 

D103:- 

D104:- 

D105:-3.64 

D106:- 

D107:-14.8 

D108:-11.31 

D109:- 

 

3.  Dla kaŜdego przypadku i ze zbioru testowego wyznaczyć błąd RMSE. 

3.1 dla kaŜdej oceny j danego uŜytkownika i naleŜy obliczyć wartość przewidywaną Pi i 

porównać ją z rzeczywistą Ri. 

3.2 obliczyć RMSEi jako pierwiastek z wyraŜenia 1/noi(Pi0Ri)2, gdzie noi oznacza liczbę ocen 

danego uŜytkownika. 

 

 

Oceny dla: o1 

Oceny dla: o4 

p1 

14.21667 

7.38750 

p2 

9.37500 

10.03333 

p3 

 

0 

p4 

 

0 

p5 

5.43389 

-1.23105 

p6 

 

0 

p7 

1.51222 

-3.63842 

p8 

-2.48611 

-5.24684 

p9 

 

0 

p10 

-8.43000 

-12.76333 

 

4.  Ostateczny błąd RMSE=RMSE1+RMSE2+...+RMSEn01+RMSEn, gdzie n oznacza liczbę 

wszystkich przypadków w zbiorze testowym. 

 

Suma:

 

 

RóŜnice w ocenach o1 RMSE: 

RóŜnice w ocenach o4 RMSE: 

0.08150  

0.25187 

0.06158 

0.05783 
0.36335  
0.47653  
0.13191 

0.39495

 

1.02962

 

 

Suma wszystkich przypadków zbioru testowego: 1,4245749458647. 

background image

Kod funkcji: 

 

function wylicz_Dij($dane){ 
 

$Dij = array(); 

 

$ilosc_produktow = count($dane[1]); 

 

$ilosc_osob = count($dane)+1; 

 

for($i=1;$i<$ilosc_produktow;$i++){ 

 

 

for($j=1;$j<$ilosc_produktow;$j++){ 

 

 

 

if($i<>$j){ 

 

 

 

 

$suma=0;$ilosc_par=0; 

 

 

 

 

for($o=1;$o<$ilosc_osob;$o++){ 

 

 

 

 

 

if(($dane[$o][$i]<>'-')&&($dane[$o][$j]<>'-')) 

 

 

 

 

 

 

 

 

 

 

 

$suma += (($dane[$o][$i]) - ($dane[$o][$j])); 

 

 

 

 

 

 

$ilosc_par++; 

 

 

 

 

 

 

 

 

 

 

 

 

 

if($ilosc_par==0){ 

 

 

 

 

 

$Dij[$i.$j]['wartosc'] = $Dij[$i.$j]['ilosc'] = "-"; 

 

 

 

 

}else{ 

 

 

 

 

 

$Dij[$i.$j]['wartosc'] = $suma/$ilosc_par; 

 

 

 

 

 

$Dij[$i.$j]['ilosc'] = $ilosc_par; 

 

 

 

 

 

 

 

 

 

 

 

return $Dij; 


 
 
 
function licz_ocene($p_i,$Dij,$dane){ 
 

$ocena = 0; 

 

$ilosc_produktow = count($dane); 

 

$p = array(); 

 

for($i=1;$i<$ilosc_produktow;$i++){ 

 

 

if($dane[$i]<>"-" && $Dij[$p_i.$i]['wartosc']<>"-"){ 

 

 

 

$p[$i]['wartosc'] = $dane[$i] + $Dij[$p_i.$i]['wartosc'];  

 

 

 

$p[$i]['ilosc'] = $Dij[$p_i.$i]['ilosc']; 

 

 

 

 

$licznik = 0;$mianownik = 0; 

 

for($i=1;$i<$ilosc_produktow;$i++){ 

 

 

if(isset($p[$i])) 

 

 

 

 

 

$licznik += $p[$i]['wartosc']*$p[$i]['ilosc']; 

 

 

 

$mianownik += $p[$i]['ilosc']; 

 

 

 

 

if($mianownik == 0){ 

 

 

return '-'; 

 

}else{ 

 

 

return $licznik/$mianownik;