Moin,
bodo hat geschrieben:Momentan über 5,379 Bewertungen von 1628 Filmen von 1429 Usern
Also mein erster Gedanke dazu ging ungefähr so: um die Empfehlungen für einen User X zu berechnen, berechne zuerst die Ähnlichkeit von X zu allen anderen Usern (d.h. Suche für alle anderen User Y alle Sendungen raus die X und Y gleichzeitig bewertet haben und berechne da irgendein Übereinstimmungsmaß). Um dann für jede Sendung die X noch nicht bewertet hat auszurechnen wie er sie bewerten würde macht man dann einfach eine Art gewichteten (nach der Ähnlichkeit) Mittelwert über die Bewertungen aller anderen User. Das ist ..äh.. aufwendig.
Da aber so wenige Bewertungen vorliegen, kann man das vielleicht einfacher machen. Wie liegen die denn vor? SQL-Datenbank? Ich würde die vermutlich einfach primär nach Filmen und sekundär nach Bewertung sortiert rausholen, alle für einen Film zusammentragen, dann für alle beteiligten User ihre Ähnlichkeit in einer großen (Anzahl der User x Anzahl der User) Tabelle aktualisieren und mit dem nächsten Film fortfahren. Der Aufwand dafür ist ungefähr linear zur Anzahl der Bewertungen, braucht dafür aber (Anzahl der User)² Speicher. Diese Tabelle muß man auch gar nicht ständig aktualisieren, es reicht wenn man das einmal am Tag tut (oder so).
Wenn man dann für einen User die wahrscheinlichste Bewertung für einen Film erraten will, holt man nur noch alle Bewertungen für den Film hervor, schlägt den User in der Ähnlichkeitstabelle nach und rechnet die Bewertungen gewichtet zusammen.
Ich hab mal Google gefragt (
http://www.google.de/search?q=generate+recommendations) und schon das erste Ergebnis (
http://dsonline.computer.org/0301/d/wp1lind.htm) ist sehr interessant. (Das bezeichnet meine oben skizzierte Idee - mehr oder weniger - als Traditional Collaborative Filtering) Das Clustering-Verfahren da fände ich für die Anwendung auch eine gute Idee: Es würden da wahrscheinlich Gruppen wie "SciFi-Fans", "Western-Fans", etc. rausfallen die pi*Daumen auch gute Ergebnisse erzielen würden.
--
Henryk Plötz
Grüße von der Ostsee