Hodnotící algoritmus – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hodnotící algoritmus – PHP – Fórum – Programujte.comHodnotící algoritmus – PHP – Fórum – Programujte.com

 

Kobi
~ Moderátor
+1
Věrný člen
6. 7. 2009   #1
-
0
-

Potřebuji implementovat nějaký algoritmus na hodnocení "věcí". O co jde:

Mám databázi "věcí" a uživatel může jednotlivé věci ohodnotit známkami 1 - 5 (5 je nejlepší). Potřebuji sestavit žebříček věcí podle celkového hodnocení. Teď nastává ta otázka, jakým způsobem vypočítat celkové hodnocení jednotlivé "věci".

Většina lidí by mi jistě poradila [ celkove_hodnocení = (hodnoceni_1 + hodnoceni_2 + ... + hodnoceni_n)/(n*5) ]. Jenže u tohoto způsobu mi nahoru vyskočí "věc" s jedním pětibodovým hodnocením, zatímco jiná "věc", která má třeba 10 hodnocení a celkové skóre 4.72, se umístí až pod touto "věcí". Čili bych potřeboval něco, co vezme v potaz počet hodnocení a bude počítat s jejich vahou.

Stačí mi i název takového algoritmu, který toto spočítá, zbytek si vygooglím. Nerad bych znova vynalézal kolo, toto už určitě někdo řešil... Díky

Nahlásit jako SPAM
IP: 83.240.25.–
Bald3rr0
Super člen
6. 7. 2009   #2
-
0
-
Nahlásit jako SPAM
IP: 82.100.0.–
Kobi
~ Moderátor
+1
Věrný člen
6. 7. 2009   #3
-
0
-

Jj, tohle jsem četl, ale pokud sem četl pozorně, tak je to jen pro "líbí - nelíbí" systém, zatímco já mám stupnici 1- 5.

Nahlásit jako SPAM
IP: 83.240.25.–
Bald3rr0
Super člen
6. 7. 2009   #4
-
0
-

To Kobi : Moje chyba, přehlídl jsem :). Bohužel o ničem jiném nevím

Nahlásit jako SPAM
IP: 82.100.0.–
Jura
~ Anonymní uživatel
637 příspěvků
6. 7. 2009   #5
-
0
-
Nahlásit jako SPAM
IP: 85.207.192.–
Kobi
~ Moderátor
+1
Věrný člen
6. 7. 2009   #6
-
0
-

Díky, prostuduju ;)

Nahlásit jako SPAM
IP: 83.240.25.–
fari
~ Anonymní uživatel
2 příspěvky
6. 7. 2009   #7
-
0
-

co takhle uvazovat nejaky dostatecne velky pocet N nejnovejsich hodnoceni a prumer spocitat z nich tak, ze jestli ze jou data k dyzspozici tak s spocita prumer obycejne suma / pocet, jestlize nejsou tak se ta co jsou k duspozici a doplni se do N hodnocenimi se prostredni hodnotu (3),
to by melo byt dostatecne rychle, jediny problem je ze musis omezit ta posledni ohodnoceni

Nahlásit jako SPAM
IP: 193.165.13.–
Krychlik
~ Anonymní uživatel
195 příspěvků
7. 7. 2009   #8
-
0
-

Vazeny prumer tady moc nepomuze, leda ze by lide, co hodnoti, mely nejake urovne "duveryhodnosti" a pak jejich znamky maji ruznou vahu, i tak to neodstrani problem s malym poctem extremnich hodnot.
Nejjednoduzsi by bylo tam dat "vypisovat veci s vice nez ____ hodnoceni" kde si uzivatel napise pocet hodnoceni.
Mimochodem je lepsi novinka, co je na strance den a ma hodnoceni 4,90 z 50 hodnoceni, nebo neco co ma po roce 4,79 z 1500 hodnoceni? Pro obe by se nasli argumenty, je potreba jenom najit pocet hodnoceni kde se tomu uz da verit. To muze byt napr 1/100 z nejvetsiho poctu hodnoceni, nebo natrvdo nejake cislo.

Nebo druha tezsi moznost- cim ma vec min hodnoceni, tim se posune vic ke stredu. tj napr pod 10 hodnoceni -+0.5 (4,6->4,1, 2,2->2,7, 2,8->3) pod 100 -+0,2 (4,4->4,2 3,1->3) pod 1000 -+0,1 . Toto jde napsat i bez hranic jako -+nejakakonstanta/pocethodnoceni. tady by to bylo napriklad pro nejaka konstanta 5:
pocethodnoceni aritmetickyprumer upravenahodnota
3 3,8 3,8-5/3=2,13 (nesmi pri uprave prekrocit 3 ) =3
4 3,8 3,8-5/4=3
10 3,8 3,8-5/10=3,3
50 3,8 3,8-5/50=3,7
100 3,8 3.8-5/100=3,795
1000 3,8 3,8-5/1000=3,7995
70 1,9 1,9+5/70=1,971
Jenom je potreba pohlidat, jestli je prumer pod nebo nad 3, aby se vedelo, jestli pricitat nebo odcitat a take, jestli je upravena hodnota pod nebo nad 3, aby ji neprekrocila.
Tim se mirne poupravi hodnota zalozena na nizkem poctu hodnoceni, zase je ale potreba najit primerene cisla a pocty kdy uz se tomu da verit.

Nahlásit jako SPAM
IP: 212.111.4.–
hrach
~ Redaktor
+1
Boss
7. 7. 2009   #9
-
0
-

To Krychlik : Díky za moc pěknou odpověď. Ještě bych se zeptal na dopřesnění. Jak najdu tu konstantu 5 + jak najdu / vytvořím ten střed 3. Platí že konstanta = počet možností a 3 se tedy rovná střed z daných 5 možností? :)

Celkem se mi to líbí :) A ještě bych se ujistil, v posledním řádku přičítáš, protože to číslo bude pořád menší, než 3, ale v prvním řádků odčítáš, protože by po přičtení už se přes 3 přehouplo. Je to tak?

Nahlásit jako SPAM
IP: 90.179.27.–
http://jan.skrasek.com@hrachcz – webdeveloper
Krychlik
~ Anonymní uživatel
195 příspěvků
7. 7. 2009   #10
-
0
-

To hrach : Tu konstantu si zvolis, muze to by jakekoli realne cislo, podle nalady proste (teda nemelo by byt zaporne :-) . Cim vetsi tim vetsi uprava, 5 sem dal jako priklad, to ze je to zrovna pocet moznosti byla nahoda.Klidne dej PI nebo sqrt(2), je to uplne jedno. Stred je stred hodnot tj 1-5 ma stred 3, 0-100 by melo 50.
To upresneni: Ne, pro >3 se vzdy odcita, pokud je vysledek mensi nez 3 tak bude 3. pro <3 presne naopak. Samozrejme misto 3 muze byt jiny stred hodnot.

Nahlásit jako SPAM
IP: 212.111.4.–
Kobi
~ Moderátor
+1
Věrný člen
7. 7. 2009   #11
-
0
-

Taky se mi ten nápad od Krychlíka líbí... Měl bys o tom napsat článek, určitě to využije vícero lidí ;)

Nahlásit jako SPAM
IP: 83.240.25.–
fari
~ Anonymní uživatel
2 příspěvky
7. 7. 2009   #12
-
0
-

To Krychlik:
ta aditivni konstanta je docela dobry napda, ale povede k tomu, ze se vsechna hodnoceni z [stred +- ta konstanta] prepoctou na [stred], imho by byla lespi jako multiplikativni, protoze potom se to bude prepocitavat spojite. Kvuli implementaci by pak asi taky bylo lepsi neuvazovat hodnoceni 1 .. 5 ale -2 .. 2 (pri prenasobovani nebude treba nic osetrovat kvuli prostrednistredni hodnote) a v zobrazeni vysledne hodnoceni zobrazovat s posunem o tu 3

Nahlásit jako SPAM
IP: 193.165.13.–
Krychlik
~ Anonymní uživatel
195 příspěvků
7. 7. 2009   #13
-
0
-

To fari : Jenze kdyby se to jeste nasobilo treba rozdilem Aritmetickeho prumeru a stredu, tak moc extremni pripady se upravi az moc. Snad trochu to zmensit treba logaritmem.
Takze cely algoritmus upravy bude takhle:
Kdyz Aprumer=stred nic nedelat (neni to potreba upravovat a navic matematici nemaj radi logaritmus 0, nejaka porucha asi :-)
kdyz Aprumer>stred
noveHodnoceni= Aprumer- konstanta*log(abs(Aprumer-stred))/pocetHodnoceni //php neovladam
kdyz Aprumer<stred
noveHodnoceni= Aprumer+ konstanta*log(abs(Aprumer-stred))/pocetHodnoceni

Toto zabrani pretekani pres stred a take to bude velke extremy upravovat vic,ale zase ne moc, proste tak primerene. Jeste je ale potraba nastavit zaklad logarytmu, ale 10 je primerene, kdyby se nekdo nudil muze si to vysetrit, pekne namalovat grafy, badat, sledovat pekne krivky...

Nahlásit jako SPAM
IP: 212.111.4.–
Krychlik
~ Anonymní uživatel
195 příspěvků
7. 7. 2009   #14
-
0
-

Omlouvam se za "logarytmu" , nekamenujte me.

Nahlásit jako SPAM
IP: 212.111.4.–
Krychlik
~ Anonymní uživatel
195 příspěvků
7. 7. 2009   #15
-
0
-

Jeste jedna posledni vec- pri uprave kodu, aby neprekracoval stred a vetsi extremy se upravovali vic, sem zapomnel na "malou drobnost" a to hodnota log pro (0,1) takze finalni vzorec je takovy
pro Aprumer=3 noveHodnoceni= Aprumer
pro Aprumer>3 noveHodnoceni= Aprumer- konstanta*log(abs(Aprumer+1-stred))/pocetHodnoceni
pro Aprumer<3 noveHodnoceni= Aprumer+ konstanta*log(abs(Aprumer-1-stred))/pocetHodnoceni
Tak ted to neprekracuje stred, upravuje hodnoty u 3 na jine cislo nez 3, velke extremy to upravuje vic nez male a pri malem poctu hodnoceni to upravuje vic nez pri velkem. Snad uz hotovo. Kdybych byl prvni na svete tak necht je to znamo jako Krychlikova rovnice :-)

Nahlásit jako SPAM
IP: 212.111.4.–
marioff0
Expert
7. 7. 2009   #16
-
0
-

a co tak zobrazovat poradie len tych "veci" ktore boli hodnotene aspon 10 krat...?...

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Podobná vlákna

Hodnotící systém — založil Tester

Algoritmus — založil LuckaH

Algoritmus — založil Jirina.K

Algoritmus — založil RePRO

C++ algoritmus — založil silent

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý