webForumDet fria alternativet

progg för NetflixPrize - Hur?

6 svar · 648 visningar · startad av eriks

eriksMedlem sedan apr. 20011 418 inlägg
#1

Hej,

Jag har under ett par månader gått och funderat på en algoritm för att rekommendera filmer utifrån betygsättningar. Nu har jag kommit fram till vad jag vill göra och behöver alltså "bara" skriva koden. Mer specifikt vill jag alltså göra ett försök på NetFlix Prize, då de har en massa testdata tillgängligt.

Problemet är att jag inte vet hur jag ska gå tillväga för detta. Jag har läst Java-programmering i skolan, men detta har snarare gjort att jag hjälpligt kan läsa kod snarare än att skriva själv. I och med att jag faktiskt kan något om detta känns det mycket lättare att fortsätta med Java än att byta till något annat språk.

Jag tänkte fylla på med frågor efter hand men börjar från början. Jag kommer alltså att ladda hem 100 miljoner betygsättningar, sedan kommer jag jobba med dessa för att skapa rekommendationsregler. Som jag förstår det kommer jag att ha alla rekommendationer i en fil i mitt javaprogram, alltså inte någon databas (eftersom jag har läst att detta blir för långsamt).

Fråga: När vi läste i skolan jobbade vi i Eclipse. Vi gjorde ju dock inga program som liknar detta jag nu ska göra. Är det fortfarande lämpligt att använda eclipse för detta? Behöver jag något annat att komplettera med? (Kanske dum fråga, men det är på den nivån jag är.)

Mvh Erik

LimeMedlem sedan sep. 2001961 inlägg
#2

Vi börjar bakifrån: Om jag kan skriva radarstyrningsprogram, börsanalysverktyg, otal antal webbapplikationer och massorm med annat skräp i Eclipse så ska du nog också klara dig.

Om man jämför med att arbeta med en 100 miljoner rader stor fil, och vi antar att varje rad innehåller max 256 tecken så får man en fil som är 25.600.000.000 bytes stor, eller drygt 25 Gigabyte. Självklart är det då snabbare om man kan hålla hela den filen i minnet. Själv funderar jag på vilket operativsystem som klarar av att hantera den storleken på fil utan att dö... Nä, du behöver ha en databas i botten. Att söka och läsa i filer blir på tok för långsamt. Den som har sagt att databas blir för långsamt bör släpas ut på bakgården och hängas upp i tummarna tills den kommer på bättre tankar.

Och hur du ska gå till väga: du skall sätta dig ner och rita hur din applikations-struktur ska se ut, och då menar jag inte GUI utan hur dataflöden går i applikationen, vad du måste hålla reda på och göra en rejäl analys på vilka kraven är. Sedan kan du börja fundera på hur du ska koda det.

Tjingelng!!

eriksMedlem sedan apr. 20011 418 inlägg
#3

Tacktack, väldigt sakligt svar!

Just det här med filstorlekar och dataflöden är jag ingen expert på, det har inte precis behövt när man har gjort en telefonkatalog för 10 pers i skolan... Dock jag har läst en del på netflix forum, där de bl.a. anger tekniker för att datan endast ska ta upp 200 meg i minnet

Hur går jag bäst tillväga för att lära mig om prestanda och dataflöden? (Föredrar siter och inte bok). Jag söker just nu bara på netflix egna forum, men vilka sökfraser ska jag ta i google för att få lite kött på benen här?

LimeMedlem sedan sep. 2001961 inlägg
#4

Ja, om du hyperstrukturerar den ja. Jag skulle kunna få ner det i Java på runt 380-440 Mb med lite optimeringar och en del fusk. Om du får ner det under 1 Gb på första försöket är du duktig...

eriksMedlem sedan apr. 20011 418 inlägg
#5

Lime skrev:

Ja, om du hyperstrukturerar den ja. Jag skulle kunna få ner det i Java på runt 380-440 Mb med lite optimeringar och en del fusk. Om du får ner det under 1 Gb på första försöket är du duktig...

Går det att använda datan när den är "hyperstrukturerad". T.ex. räkna ut korrelationer mellan filmer. Eller blir det istället jättesegt då?

Och ännu viktigare, vad ska jag söka på för att få lära mig mer om detta?

LimeMedlem sedan sep. 2001961 inlägg
#6

eriks skrev:

Går det att använda datan när den är "hyperstrukturerad". T.ex. räkna ut korrelationer mellan filmer. Eller blir det istället jättesegt då?

Och ännu viktigare, vad ska jag söka på för att få lära mig mer om detta?

Ja, nej och det tar några år att klura ut...

Seriöst. Du klassar dig själv som nybörjare och ger dig på ett problem som jag skulle få tänka till på både en och två gånger för att få till det effektivt och snyggt.

Utan att vara nedlåtande, men att försöka förklara vilka cache-strukturer du borde använda, vilka arkitektur och design-mönster som kan passa, vilka dataklasser som ska relateras till vilka och vad du ska ha för taktik för parallellitet och liknande OCH göra det via ett forum är inte helt trivialt...

Men börja hacka och när du kör fast, ställ konkreta frågor, så svarar vi. Det är görligt och jag bedömmer att själva logikmotorn i det hela tar mellan 200 och 500 timmar att göra. Sedan kommer ett snyggt grafiskt gränssnitt eller en web-service-port på det så man kan fråga efter saker också... :D

eriksMedlem sedan apr. 20011 418 inlägg
#7

Tackar återligen för svaren. Jag tror nog precis som du att det är ett väldigt svårt projekt att ge sig på, men jag gillar att försöka med svåra saker och att folk tror att jag inte ska lyckas ger mig lite mer bensin också :)

130 ms totalt · 3 externa anrop · v20260731065814-full.cf67ef55
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)