달력

08

« 2010/08 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
2010.08.20 18:11

Watchmaker Demo 테스트하기 Watchmaker2010.08.20 18:11

1) 먼저 Git 로 소스를 다운 받는다.
git clone git://github.com/dwdyer/watchmaker.git


2) 받은 위치에서 Build.xml 위치로 이동후 Ant 빌드를 한다. (단, Ant는 1.7.1이상 버전이여야 한다 - 1.7.0에서 했더니 오류남)
ant dist


3) 테스트가 필요하면 역시 ant 로 테스트 한다.
ant release


4) jar파일로 직접 테스트 하기
만약, 원한다면, 빌드된 watchmaker-examples.0.7.1.jar를 찾아서 실행하면 된다.
java -jar watchmaker-examples.0.7.1.jar {옵션}

옵션은 biomorphs, bits, gp, monalisa, salesman, strings, sudoku 등을 테스트 할수 있다.

아래는 그중 monalisa를 돌려본후, 그 변화를 켑쳐한 것이다.
(더 이상은 시간이 없어서 못돌리고 껐음)
Posted by summerwars
2010.08.20 16:32

Watchmaker Framework 관련 링크 Watchmaker2010.08.20 16:32



(watchmaker framework logo에 대한 이야기)


1) 홈페이지 : http://watchmaker.uncommons.org

2) 메뉴얼(Reference는 아닌...) : http://watchmaker.uncommons.org/manual/index.html

3) 저장소 : http://github.com/dwdyer/watchmaker

4) 커뮤니티 : http://groups.google.com/group/watchmaker

5) EA에 대해서 읽어 볼만한 내용들...

TAG EA, GA, Watchmaker
Posted by summerwars
2010.08.20 15:55

일반인이 봐야 할 과학 상식 도서 Tips2010.08.20 15:55

꽤 친철하게 정리 해 주셨네. http://psycheview.egloos.com/1904736

1) 수학/컴퓨터과학 : http://gall.dcinside.com/list.php?id=science&no=221680&page=1&search_pos=-216151&k_type=1100
2) 물리/천문 : http://gall.dcinside.com/list.php?id=science&no=221681&page=1&search_pos=-216151&k_type=1100
3) 생물/심리/뇌 : http://gall.dcinside.com/list.php?id=science&no=221685&page=1&search_pos=-216151&k_type=1100
4) 과학사/철학/기타 : http://gall.dcinside.com/list.php?id=science&no=221688&page=1&search_pos=-216151&k_type=1100

역시 수학은..... 책이 턱없이 부족하단 말이지...
TAG 도서
Posted by summerwars
User-based Recommender와 테스트는 같으며, 단지 사용한 ItemSimilarity, GenericItemBasedRecommender 메서드만 다르다.
Fixture Code
	@Before
	public void fixture() throws IOException {
		// row data 100,000
		dataModel = new FileDataModel(new File("C:/Users/yunsunghan/Desktop/data_ml.txt"));
		userId = 303L;
	}

Test Code
	@Test
	public void item() throws IOException, TasteException{
		
		// 1) 원시 데이터를 읽음
		// fixture
		
		// 2) 유사성 상관관계 분석
		ItemSimilarity itemSimilarity = new PearsonCorrelationSimilarity(dataModel); // 너무 느리다.
		// 야생에서는 유사성을 미리 계산해 놓은 형태를 많이 쓴다. 그것이 GenericItemSimilarity 이다.
		// 미리 계산하는 구조는 아래와 같다.
//		List similarities = new ArrayList(4);
//		similarities.add(new GenericItemSimilarity.ItemItemSimilarity(1417, 440, 0.9));
//		similarities.add(new GenericItemSimilarity.ItemItemSimilarity(440, 1128, 0.7));
//		similarities.add(new GenericItemSimilarity.ItemItemSimilarity(1128, 1351, 0.5));
//		similarities.add(new GenericItemSimilarity.ItemItemSimilarity(1351, 1413, 0.3));
//		ItemSimilarity itemSimilarity = new GenericItemSimilarity(similarities);
//		// 유사도 출력!!!
//		System.out.println("===========================================");
//		System.out.println("Similarity");
//		System.out.println("-------------------------------------------");
//		System.out.println(itemSimilarity.itemSimilarity(1417, 440));
//		System.out.println(itemSimilarity.itemSimilarity(440, 1128));
//		System.out.println(itemSimilarity.itemSimilarity(1128, 1351));
//		System.out.println(itemSimilarity.itemSimilarity(1351, 1413));
//		System.out.println("-------------------------------------------");
//		System.out.println();

		// 3) 사용자 기준의 추천
		Recommender recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity);
		// 3.1) 캐시에 넣고
		Recommender cachingRecommender = new CachingRecommender(recommender);
		// 3.2) 특정 사용자 기준의 추천 아이템 추출
		List recommendations = cachingRecommender.recommend(userId, 7);
		
		// 추천 아이템 출력!!!
		System.out.println("==========================================");
		System.out.println(userId + "님이 추천하는 상품 베스트 7 [Item-based]");
		System.out.println("-------------------------------------------");
		int count = 1;
		for(RecommendedItem item : recommendations){
			System.out.println(count + ") 추천 상품 : " + item.getItemID() +" \t 추천 지수 : "+ item.getValue());
			count++;
		}
		System.out.println("-------------------------------------------");
		Assert.assertEquals(7, recommendations.size());
	}

테스트 결과
==========================================
303님이 추천하는 상품 베스트 7 [Item-based]
-------------------------------------------
1) 추천 상품 : 1417   추천 지수 : 2.70215978E16
2) 추천 상품 : 440   추천 지수 : 53.677456
3) 추천 상품 : 1128   추천 지수 : 29.359428
4) 추천 상품 : 1351   추천 지수 : 17.797129
5) 추천 상품 : 1413   추천 지수 : 14.551755
6) 추천 상품 : 863   추천 지수 : 14.285224
7) 추천 상품 : 1170   추천 지수 : 12.785092
-------------------------------------------

==========================================
303님이 추천하는 상품 베스트 7 [Slope-One]
-------------------------------------------
1) 추천 상품 : 1500   추천 지수 : 5.8740354
2) 추천 상품 : 1449   추천 지수 : 5.4110007
3) 추천 상품 : 1398   추천 지수 : 5.388581
4) 추천 상품 : 1467   추천 지수 : 5.356462
5) 추천 상품 : 1642   추천 지수 : 5.2709184
6) 추천 상품 : 1367   추천 지수 : 5.123192
7) 추천 상품 : 1064   추천 지수 : 5.115589
-------------------------------------------

Slope-One Recommender도 크게 다르지 않다.

이쯤되면, 어떻게 User-baesed와 Item-based는 각각 Item에 대해서 또 User에 대해서, 위와 같은 추천지수와 유사지수를 구해 냈을까 궁금하지 않을수 없다. 도대체 무슨 근거로..., 단순히 산술평균은 아니다. 그럼 어떤 보이지 않은 것이 안에 숨어 있을까? 이것이 다음에 정리할 알고리즘을 봐야 할 이유다.
Posted by summerwars