달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2008. 2. 4. 21:46

day 26 netflix prize/일지2008. 2. 4. 21:46

netflix prize research day 26

오늘 한일은 다음과같다

  • N(i; u)를 구했다. 즉, u가 rating했던 아이템중 i와 비슷한 아이템 20개를 선정한다.(20이 안되는 경우는 assert걸어둔다.)

이를 위해서 오늘

  • recommender.cpp작성
  • similarity_loader 모듈작성
  • matrix_loader 모듈작성
  • userdata_loader 모듈작성

TODO

각 유져와 무비 페어에 대해.
• N(i;u)를 구한다. 즉 u가 rating했던 아이템중 i와 비슷한 아이템 20개를 선정한다.(20이 안되는 경우는 assert걸어둔다.)
• 20 * 20 매트릭스 A, 20 * 1 벡터 b를 작성하고, 알고리즘을 이용하여 w를 구한다.
• 레이팅을 채운다..


  - 통계프로그램을 구했으니 슬슬 자료 분석도 시작해 봐야지

문제해결법에 대한 IDEA

*. 영화제목으로부터 연관관계를 끌어낼 수 있을까(시리즈물, 어두운 분위기, 공포 등)

 - WWE
 - soldier
 - Dark
 - dragon ball
 - national geographic
 - 영화제목에 위의 단어가 들어있다면. 이용자가 시리즈물을 보고 평가한 결고를 반영할 수 있다.
 - (user base + item base)
 - 자주 검색되는 단어를 이용해도 된다.
 
*. 시간적으로 '최근' 취향이 비슷할 수록 가중치가 높아진다.
 - user간에 얼마나 '많은' 영화의 평점이 얼마나 '많이'같은지, 그 각각의 영화가 얼마나 시기적으로 '가까운'지에
대하여 유사도를 계산한다..

=> 뭐 이딴것들은 다 논문에 나와있더라.. user-based approach와 item-based approach는 이미 다 나와있고... 상대적으로 item-based approach가 더 좋은 속도와 결과를 내지만,
나중에 데이터 짬뽕시키는게 적중률을 향상시키기에 시도는 했다 하더라.
:
Posted by Kwang-sung Jun
2008. 2. 3. 22:10

시간측정 클래스 삽질예방/시간측정 클래스2008. 2. 3. 22:10

TimeStamp.h

#ifndef _TIME_STAMP_H_
#define _TIME_STAMP_H_

#include <sys/timeb.h>
#include <assert.h>
#include <stdio.h>

class TimeStamp {
private:
    static const int TIME_STRING_SIZE = 20;
    struct timeb timeData;
    char timeString[TIME_STRING_SIZE];

public:
    TimeStamp() {return;}
    ~TimeStamp() {return;}

    void stamp(void) { ftime(&timeData); return; }
    void subtract(TimeStamp& before);

    int getSecond(void) { return timeData.time;}
    int getMicroSecond(void) { return timeData.millitm; }
    const char* toString(void);
};

#endif

TimeStamp.cpp

#include "TimeStamp.h"

// 2008.02.25 수정본
void TimeStamp::subtract(TimeStamp& before)
{
    if (timeData.millitm >= before.timeData.millitm) {
        timeData.time -= before.timeData.time;
        timeData.millitm -= before.timeData.millitm;
    }  
    else {
        timeData.time = timeData.time - 1 - before.timeData.time;
        timeData.millitm = timeData.millitm + 1000 - before.timeData.millitm;
    }

    return;

}

const char* TimeStamp::toString(void)
{
    snprintf(timeString, TIME_STRING_SIZE, "%d.%03u", (unsigned)timeData.time,
            (unsigned)timeData.millitm);
    return timeString;
}

// 2008.02.17 추가분
// 2008.02.25 수정본
const char* TimeStamp::diffWithNow(void)
{
    ftime(&curTimeData);

    if (curTimeData.millitm >= timeData.millitm) {
        curTimeData.time -= timeData.time;
        curTimeData.millitm -= timeData.millitm;
    }
    else {
        curTimeData.time = curTimeData.time - 1 - timeData.time;
        curTimeData.millitm = curTimeData.millitm + 1000 - timeData.millitm;
    }

    snprintf(timeString, TIME_STRING_SIZE, "%d.%03u",
             (unsigned)curTimeData.time,
             (unsigned)curTimeData.millitm);
    return timeString;

}


사용법
    TimeStamp a, b;

    a.stamp();
    DoSomething();
    b.stamp();

    b.subtract(a);
    printf("%s\n", b.toString());

출력
23.123

그냥 최소한의 필요한 기능만 만들어놨습니다. 알고리즘 작성하다 보니 시간측정해서 비교할 일이 생기더라구요. 정확히 시간재는일 밖에는 할줄 모릅니다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ2008.02.17 추가분 ㅡㅡㅡㅡㅡㅡㅡ
사용법
    // another usage(same behavior)
    TimeStamp a;
    a.stamp();
    printf("(%s sec)\n", a.diffWithNow());

좀더 간편하게..


자세히 보면 알겠지만... 이전에는 milli세컨드에서 오버플로우가 발생하는 경우가 있도록 했었는데 수정하였다.(2008.02.25)
:
Posted by Kwang-sung Jun
2008. 2. 3. 21:51

day19~25 netflix prize/일지2008. 2. 3. 21:51

netflix prize research day 19 ~ 25
일본여행을 1월29일부터 2월 1일까지 3박 4일로 다녀오는 바람에 제대로 한게 아무것도 없다.

다만 이전에 계산해 두었던 매트릭스 A^ 를 읽어보니 nan이 무척이나 많아서 당황..

  • 시간측정모듈 작성(클래스..)
  • nan(Not A Number)버그 수정.(0으로 나누게 되는 경우가 있던것이 그 원인이다.)
  • 알고리즘 정상적으로 수행하여 A^를 계산해냄
처음 시작할 때는 똑같이 논문을 보고 쓴건데 논문 저자는 계산을 15분 내로 해낸다고 했다. 무척 열받았었는데, 이제는 나도 7분내로 끝낸다 T_T.
처음에는 120시간정도는 돌려야 끝이나는 알고리즘을 짰던 것이 생각난다...우웩.

TODO

각 유져와 무비 페어에 대해.
• N(i;u)를 구한다. 즉 u가 rating했던 아이템중 i와 비슷한 아이템 20개를 선정한다.(20이 안되는 경우는 assert걸어둔다.)
• 20 * 20 매트릭스 A, 20 * 1 벡터 b를 작성하고, 알고리즘을 이용하여 w를 구한다.
• 레이팅을 채운다..


  - 통계프로그램을 구했으니 슬슬 자료 분석도 시작해 봐야지

문제해결법에 대한 IDEA

*. user들을 군집화시킨 후 알고리즘을 적용한다.(합리적...)
 
*. 영화제목으로부터 연관관계를 끌어낼 수 있을까(시리즈물, 어두운 분위기, 공포 등)
 - WWE
 - soldier
 - Dark
 - dragon ball
 - national geographic
 - 영화제목에 위의 단어가 들어있다면. 이용자가 시리즈물을 보고 평가한 결고를 반영할 수 있다.
 - (user base + item base)
 - 자주 검색되는 단어를 이용해도 된다.
 
*. 시간적으로 '최근' 취향이 비슷할 수록 가중치가 높아진다.
 - user간에 얼마나 '많은' 영화의 평점이 얼마나 '많이'같은지, 그 각각의 영화가 얼마나 시기적으로 '가까운'지에
대하여 유사도를 계산한다..

=> 뭐 이딴것들은 다 논문에 나와있더라.. user-based approach와 item-based approach는 이미 다 나와있고... 상대적으로 item-based approach가 더 좋은 속도와 결과를 내지만,
나중에 데이터 짬뽕시키는게 적중률을 향상시키기에 시도는 했다 하더라.
:
Posted by Kwang-sung Jun