Winfo Geschrieben 29. Juli 2011 Teilen Geschrieben 29. Juli 2011 Ich suche nach einem einfachen nicht zu komplexen Empfehlungssystem (Recommender Systems) das in der Lage ist anhand der Bewertungen die der User abgibt (Benutzer Bewerten Bilder), weitere Empfehlungen abzugeben. BSP: Benutzer bewertet ein Foto mit 5 Sternen , das nächste Bild mit 3 Sternen, dann soll das Empfehlungssystem neue Fotos bereitstellen die zu dem Benutzer passen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
i � unicode Geschrieben 29. Juli 2011 Teilen Geschrieben 29. Juli 2011 Jo. Gratuliere. Und nun möchtest du, dass WIR das für dich machen, oder was stellst du dir vor? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Winfo Geschrieben 29. Juli 2011 Autor Teilen Geschrieben 29. Juli 2011 nein ich suche nach Anregungen wie man das Realisieren kann und ob es schon Open Source Frameworks existieren die nicht zu komplex sind um mein Vorhaben zu realisieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 29. Juli 2011 Teilen Geschrieben 29. Juli 2011 Google kann das doch schon Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
i � unicode Geschrieben 29. Juli 2011 Teilen Geschrieben 29. Juli 2011 Wie SilentDemise sagte... Es gibt mittlerweile Techniken und Best-Practices, mit denen man mit durchaus wenig Aufwand eine relativ umfangreiche Ergebnisliste bekommt. Falls du Google zu umständlich oder wirr findest, wird das sicherlich der ein oder andere im Forum für dich übernehmen. Für solche Dienstleistungen wird man allerdings eine gewisse monetäre Gegenleistung verlangen. Niemand wird (kostenlos) deine Hausaufgaben machen. Wenn du spezielle Fragen hast, hilft man dir jedoch gern. Das erfordert allerdings eine gewisse eigenverantwortliche Vorleistung. Deine (momentane) Eigenleistung beschränkt sich jedoch auf ein "ich will". Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Winfo Geschrieben 29. Juli 2011 Autor Teilen Geschrieben 29. Juli 2011 (bearbeitet) Danke für die hilfreichen Antworten ich wollte eigentlich nur wissen welchen Algo man braucht und ob es dafür schon Klassen in Java gibt aber nach einiger Suche hab ich gesehn das ich dafür einen "Item based Callobaritve Algorithmus" benötige und dies genau auf meine Problemstellung passt. Bearbeitet 29. Juli 2011 von Winfo Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thelvan Geschrieben 29. Juli 2011 Teilen Geschrieben 29. Juli 2011 Das kommt ganz auf deine Bedürfnisse an. Vorallem welche Informationen noch zu deinen Fotos angegeben werden. Tags, Kategorie... Nur anhand der Bewertung wirst du nicht viel empfehlen können. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Winfo Geschrieben 29. Juli 2011 Autor Teilen Geschrieben 29. Juli 2011 (bearbeitet) Also die Fotos besitzen als Objekt die Attribute Title, Tags ...., wenn nun ein Foto mit 5 Sternen vergeben wird und ein anderes mit 3 Sternen dann soll der Algorithmus anhand der Attribute ein Foto vorschlagen das zu den vergegeben Bewertungen passt Bearbeitet 29. Juli 2011 von Winfo Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thelvan Geschrieben 29. Juli 2011 Teilen Geschrieben 29. Juli 2011 text - What tried and true algorithms for suggesting related articles are out there? - Stack Overflow Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 29. Juli 2011 Teilen Geschrieben 29. Juli 2011 (bearbeitet) Da das hier im Java Forum ist, erst einmal folgendes: Um solche Systeme zu implementieren brauchst Du numerische Methoden (z.B. SVD), mir ist keine native Java Bibliothek, die das kann, bekannt. Zusätzlich hast Du bei solchen Algorithmen sehr große Datenmengen, NxM dimensionale sparse Matrizen, die entsprechend verarbeitet werden müssen. Der Ansatz zum "Collaborative Filtering" ist schon der richtige, je nach Daten muss natürlich noch eine entsprechende Vorverarbeitung machen bzw. man geht über in "clustering colloborativ filtering" bz "co-clustering" Generell der naive Ansatz nach den Bewertungen zu beurteilen wird nicht gut funktionieren, da die Bewertung pro User immer individuell ist und man eben gegen die userspezifische Bewertung normalisieren muss. Zusätzlich kannst Du Daten (Fotos), die noch keine Bewertungen haben nicht direkt verarbeiten, denn Du musst hier algorithmisch die Frage stellen "wie würde User X das noch nicht bewertete Foto Y bewerten". Das Problem ergibt sich aus der mathematischen Formulierung, denn mit einem Null-Element in Deiner Datenmatrix kannst Du nichts anfangen. Ich entwickle zurzeit unter anderem ein solches Framework (LGPL Lizenz), nicht für Java, da Java diese Datenmengen nicht mehr effizient verarbeiten kann, sondern für C++ (in C++ kann ich numerische / mathematische Bibliotheken wie LAPack oder ATLAS verwenden). Natürlich kannst Du mit Hilfe von JNI die entsprechenden C++ Routinen aufrufen. Ein fertiges System mit dem gewünschten Umfang ist mir aber nicht bekannt. Bearbeitet 29. Juli 2011 von flashpixx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Winfo Geschrieben 29. Juli 2011 Autor Teilen Geschrieben 29. Juli 2011 Danke für die Antworten da komm ich meinen Ideen schon etwas näher ich möchte das mit mehreren Hashmaps realisieren ( eine besteht aus einer eindeutigen PhotoID, UserID und Bewertungszahl in float) Diese wird nach und nach mit den Bewertungen gefüllt pro Foto. Dann wird diese Matrix erzeugt und die Differenz berechnet. Bei Abgabe weiterer Bewertungen wird werden weitere Hashmaps benötigt die das Ergebnis von Matrix 1 übergeben. Dann wird mit einer Matrixfunktion nur die Einträge miteinander vergleichen die >1 sind und schon Bewertungen zu abgegeben wurden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 29. Juli 2011 Teilen Geschrieben 29. Juli 2011 Das Vorgehen in allen Ehren, aber naiv das ganze zu machen funktioniert nicht, da Du einmal eine dünnbesetzte Datenstruktur + extrem schnell wachsende Datenmenge verarbeitet werden müssen. Wenn ein neues Foto eingestellt wird, muss Deine Matrix eine neue Spalte (oder Zeile) bekommen, analog für einen neuen User (Anzahl User mal Anzahl Bilder). Eine einfache Differenzbildung funktioniert nicht, denn was sagt sie aus? Vor allen was passiert bei den Einträge die Null sind? Außerdem muss man berücksichtigen, wie ein User im Mittel bewertet, es gibt allgemein User, die sehr gut und andere sehr schlecht bewerten. Man muss die User entsprechend der Bewertung normalisieren. Wenn z.B. ein User ein Foto nicht bewertet hat, kannst Du dieses nicht in das Ranking aufnehmen, denn die Einträge sind 0. Im Realbetrieb hat man das häufig, die User bewerten nur ihre Daten und nicht andere, aber genau auf diese nicht bewerteten Daten musst Du Rückschlüsse ziehen. Außerdem lassen sich Korrelationen, die man bei der Analyse braucht, mir kleinen Datenmengen überhaupt nicht sinnvoll berechnen, weil sie zu Null bzw NaN werden. Hashmaps als Datenstruktur sind extrem langsam, wie schon gesagt dünnbesetzte Matrizen sind eigentlich die primär eingesetzte Datenstruktur. Eine naives Vorgehen wird nicht funktionieren. Ebenso ist Java für diese Datenstrukturen eine schlechte Wahl, da die Datenmenge sehr schnell wächst und man diese numerisch / vektoriell verarbeiten muss. Ich empfehle hier sich wirklich mit den genannten Verfahren + die dafür benötigte Mathematik zu befassen, damit das System auch stabil und zuverlässig funktioniert Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.