독도 광고 모금 캠페인
최근 알고리즘에 대해서 다시 공부하고 있습니다.
한번씩 생각해두지 않으면 너무 쉽게 잊혀지는 것 같습니다. 그래서라도 자꾸 보게되는데요...
오늘은 가장 처음에 나오는 정렬에 관한 실험입니다.

java로 구현해보았는데요, 재미있는 부분은 정렬된 변수들을 저장할 때에 그냥 단순히 list에 담아서 반환하면 편하지 않을까 생각했습니다. 왜냐하면 array에 있다면 매번 메모리를 복사해주어야 하는 부담이 있기 때문입니다.

결론부터 말씀드리면 memory-based-insertion-sort 의 완승!!!

랜덤숫자 : list-based-sort : memory-based-sort ( unit: msec)
1000 : 120 : 13
2000 : 1529 : 26
3000 : 6758 : 35

즉, 1000개의 단위 랜덤숫자를 증가할 때에 memory 기반의 insertion-sort는 거의 linear하게 증가하는 반면에 LinkedList를 사용할 때에는 지수적으로 증가하고 있습니다.

제가 아직 Java라는 언어에 익숙치 않아서 그런가 봅니다. 어쨌든 Java의 LinkedList를 사용할 때에는 절대로 1만개를 넘어가는 아니 5000개의 아이템 이상의 경우에는 사용을 자재하는 편이 좋을 것 같다는 생각이 듭니다.

p.s) 혹시 제가 잘못 이해하고 있는 부분이 있다면 언제든 댓글주시면 수정하도록 하겠습니다. 감사합니다. 제가 작성한 소스를 첨부해 봅니다.


이올린에 북마크하기(0) 이올린에 추천하기(0)

'programming > java' 카테고리의 다른 글

List와 Memory 복사를 이용한 Insertion Sort의 차이...  (3) 2008/07/21
Posted by dm4ir
계속 모드 상세보기
오오하시 에츠오 지음 | 다산라이프 펴냄
작심삼일은 가라! 성공을 결정짓는 '계속하는 기술'! 『계속모드』는 결심한 일을 포기하지 않고 계속해서 실천할 수 있는 방법을 알려준다. 성공한 사람들이 입을 모아 말하는 비결은 '계속'이다. 자신의 목표를 향해 꾸준히 노력하였기 때문에 성공을 이룩하였다. 그들은 계획한 일을 '계속'하기 위해 주변 환경을 개선하고 자신의 감정을 조절했다. 이 책에는 이렇게 목표달성이 쉬워지는 '계속'의 기술, 즉 '계속모드'에

 지난 주에 우연히 버스에서 일간지를 폈는데, 제목이 끌리는 책이 있어 덥석 사본 책입니다.
이러한 자기계발서는 일본에서 많이 발간되는 느낌입니다. 책 제목도 전형적인 일본 책 같지요? ^^ 예전에 읽었던 책들에 비해서 임팩트는 좀 적었습니다. 물론 이런류의 자기계발서를 관심을 두고 읽는 편이라 중복되는 부분이 많아서 그럴 수도 있겠습니다만, 어쨌거나 이전에 읽었던 '메모의 기술', '1일 30분' 등의 책이 저에게는 더 많은 영향을 주었다고 할 수 있습니다.

 저 같은 경우는 스스로가 동기부여를 하고 불타오르는 스타일이 아니라 외부의 자극을 적절히 받아야만 움직이는 스타일 같습니다. 뭐랄까, 이러한 서적들을 주기적으로 읽어주고 그리고 열정적인 분들과 만나고 이야기 하고 말이지요 :-)

 제목에서도 느껴지지만, 저자는 습관에 대한 얘기를 하고 있습니다.
'계속하는 기술', 즉 습관을 오래 지속하는 능력이다. 어떤 행동을 무의식적으로 계속하면 진정한 의미의 습관이 되는데, 계속하는 기술은 이 습관 만들기가 목적이다.

 이 문구에 저는 많은 공감을 했습니다. 제가 담배를 끊을 때에 이러한 방법이 가장 요긴하게 사용되었습니다. 무슨 생뚱맞은 말이냐 하면, 대략 10년 정도를 담배를 피워오다가 어느 시점이 되어서 몸에도 안좋고, 돈도 많이 들고 해서 어떻게 끊어볼까 했는데, 어느 순간에 이런 생각이 들더군요, 예전에는 전혀 피지도 않고 잘만 살았는데 이제와서 왜? .. 그래서 마치 내가 담배를 피지 않았던 사람처럼 행동하고 계속 그러한 암시를 주었더니 담배를 피지 않은지 벌써 7년정도 되었네요 -_-;;

실패하는 사람의 10가지 특징
  1. 시도해 보기도 전에 할 수 없다고 생각한다.
  2. 책임을 미룬다.
  3. 자신이 원하는 것을 설명하지 못한다.
  4. 하루를 즉각적인 욕구에 따라 산다.
  5. 좋은 아이디어가 생각나도 즉시 실행으로 옮기지 않는다
  6. 일확천금을 꿈꾸고 1퍼센트의 전진을 무시한다
  7. 시도했던 일이 잘 안 되었을 때 다른 사람과 환경을 비난한다.
  8. 두려워서 자신을 폄하한다. (자신을 믿지 않는다)
  9. 자기계발에 관심이 없다.
  10. 생각과 행동에 여유가 없다.
 3번과 5번 항목은 저에게 해당되는 내용이네요.. 마음에 깊이 세겨두고 있습니다.

 한번 익숙해지면 일부러 의식하지 않아도 되는 사소한 습관을 매일 반드시 해야 하는 행동으로 정하는 것이다.

저같은 경우는 버스를 타면 정해둔 책이 두 권있습니다. 자기계발서, 데이터마이닝 기술서적 버스를 대략 45분 정도 타는데, 조금씩 시간을 할애를 해서 보고 있습니다. 물론 잠이올 때에는 나도 모르게 잠드는 경우도 많습니다만, 아무래도 성격이 다른 두 권의 책을 들고다니면, 잠이오거나 지루해질 때에 괜찮은 효과를 줄 수가 있더군요... 그리고 거의 무의식적으로 그 책들을 펴들기 때문에 사실 책을 봐야지 하는 부담도 많이 줄어들더군요...  요즘에 보고 있는 책은 '실용주의 프로그래머'와 'Information Extraction'이라는 책입니다.

'1주일 후 자신의 모습'을 가능한 구체적으로 묘사하고 느낀 점을 쓰도록 한다.

저자는 '미래일기'라고 표현을 하는데, 마치 목표가 이루어진 것처럼 스스로에게 암시를 하는 과정인 것 같다. 좀 머쓱하긴 하지만, 나름대로 좋은 영향이 있을 것 같다는 생각이 든다. '나는 이렇게 할꺼야' 또는 '다음주 부터는 꼭 해야지' 하는 식의 노력보다는 훨씬 효과가 클 것 같다.

오래 계속하려면 함께 하는 동료를 찾는 것이 우선이다. 주변에 없을 경우에는 온라인에서 찾아보자.

 저는 점심시간에 헬스를 하고 있는데요, 대략 1년 2개월 정도 계속해온 것 같습니다. 중간 중간 힘든 시기도 있었지만, 동료분들과 같이 했기에 지금까지 계속 할 수 있었던 것 같습니다. 데이터마이닝 및 기계학습에 대한 부분도 얼마전 까지만 해도 사내 스터디를 했었는데요, 그 덕분에 혼자서 보기는 부담스러웠던 책인데 겨우 볼 수 있었습니다.
 스터디 했던 책은 검색엔진 개발을 한번이라도 고민하셨다면, 처음에 한번은 찾아보셨던 Managing Gigabyte의 저자인 Ian H. Witten 씨가 최근 쓴 Data Mining: Practical Machine Learning Tools and Techniques 라는 책입니다. 현재는 뉴질랜드 Waikato 대학에 교수님으로 계신걸로 알고있습니다. 그리고 이 대학에서 개발한 학습용 자바 데이터마이닝 도구가 Weka입니다. 제가 이전 포스팅에 한번 소개한 적이 있습니다.

 현재는 데이터마이닝과 기계학습에 대한 좀 더 깊은 공부를 위해서 롤모델, 동료 또는 경쟁자를 찾고자 노력하고 있습니다. 하지만 쉽지 않은 것 같습니다. 일단은 Mahout 프로젝트에 조금 관심을 두고 공부하는 것을 시작으로 하고 있습니다.

업무일지에 자신이 맡은 업무의 애로사항을 쓰고, 이에대해 짧게나마 답을 해준다면 커뮤니케이션이 이루어진다.

 솔직히 같은 파트나 팀에 있지만, 굳이 물어보기도 뭣하고 혼자서 삽질을 하게되는 경우도 많습니다. 이제 프로그래머 경력이 7년이 넘어서고 있지만, 너무나 부족한 스스로에게 너무나도 놀라게 되는 경우가 많습니다. (부끄럽지만...) 하지만 이러한 방법으로 오늘 마무리 짓지 못하거나 고민하고 있는 내용을 업무일지에 간략히 정리해두면, 다른 팀원이 보고 적절히 코멘트 해준다면, 괜찮은 커뮤니케이션 채널이 되지 않을까 하는 생각을 해보았습니다.

 끝으로 저는 블로그를 통해서 일반에게 제 의지와 노력을 공개하고 좀 더 스스로에게 격려를 하고자 합니다. 그래서 저의 블로그를 찾아주시는 모든 분들께 감사드리고요, 저와 같이 데이터마이닝과 기계학습의 계속모드를 위해서 노력하시는 분들이 계신다면, 언제든 댓글이든 트랙백이든 대환영입니다. 서로 격려해주고, 좋은 정보들을 공유할 수 있다면 서로간에 좋은 기회라 생각됩니다.

즐거운 하루 되시기 바랍니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by dm4ir
 저의 최대의 관심사는 현재는 데이터 마이닝을 통한 정보검색을 하는 것인데요, 가장 관심이 가는 아파치 프로젝트는 단연 마하우트(Mahout)입니다.

Mahout?
A Mahout is a person who drives an elephant
(hint: Hadoop's logo is an elephant.)

즉, 코끼리를 다루는 사람이라는 의미입니다. 로고는 여기서 다운로드 받을 수 있는데요 로고를 잘 보시면, 코끼리를 타고 있는 사람이 보이실 겁니다. 물론 코끼리를 다루는 사람이라고 해서 하둡을 대상으로 보다 상위에 있는 프로젝트는 아니라고 얘기하고 있습니다. 제 개인적인 생각으로는 하둡위에서 보다 더 고차원적인(?) 일을 하는 사람이라는 생각이 살짝 들었습니다. ^^

이리저리 사이트를 둘러보면서 정리해보려고 했지만, 생각보다 정리하기가 쉽지 않더군요 그래서 일단 마하우트 위키페이지에서 하나씩 그냥 심심풀이로 읽어보기로 했습니다. 처음에는 막막하더니 조금씩 읽어가다보니 조금씩 정리가 되는 것 같습니다.

우선, 마하우트가 왜 생겼는지에 대한 페이지를 둘러보았습니다.

확장성이 있으면서도 병렬처리가 가능한 기계학습 라이브러리를 만들기 위함입니다.

과거에는 기계학습이라 하는 분야 또는 학문영역 자체가 지금 만큼 넓지 않았으며, (물론, 지금도 아주 popular한 영역은 아닌 것 같습니다) 그러한 프로젝트를 실행하는 것이 잘 공개되지 않았던 것 같습니다.

우선은 공개되지 않은 상태에서 연구가 이루어지고, 내부적인 용도로 어느정도 사용되다가, 펀딩받은 돈이 다하면, 그대로 사장되거나 사라지는 형태로 말이지요...

그리고 최근 이슈화 되고 있는 대용량 처리를 위한 고려가되지 않았다는 점입니다. 수많은 로그와 대용량의 학습데이터를 통해서 학습하는 것 자체가 하나의 장비 내에서 할 수 있는 한계가 있기 떄문이었습니다.

이러한 여러가지 이유로 인해서, 시도하지 못했던 기계학습 라이브러리를 아파치 라이센스를 기반으로 잘 문서화된 그리고 충분히 확장성이 있으면서도 상업적으로도 활용가능하도록 만드는 것이 이 마하우트 프로젝트의 목적이라고 볼 수 있겠습니다. 물론 하둡이라는 프레임워크 위에서 말이지요..

그러기 위해서는 아래와 같은 여러가지 기본적인 기계학습 알고리즘이 필요할텐데요.. 아래와 같은 어디선가 한번쯤은 보았을법 한 알고리즘들입니다.

  1. Naive Bayes
  2. Neural Networks
  3. Support Vector Machines
  4. Logistic Regression
  5. Locally Weighted Linear Regression
  6. k-Means
  7. Principal Components Analysis
  8. Independent Component Analysis
  9. Expectation Maximization
  10. Gaussian Discriminative Analysis

모두 하나 하나가 복잡한 알고리즘들이라, 구체적인 내용은 기계학습 또는 데이터마이닝 관련 서적을 참고하셔야 할 듯 합니다. :-)

그리고 Mahout 프로젝트의 시발점이되는 논문이 하나 있는데, Map-Reduce for Machine Learning on Multicore 라는 논문입니다. (읽어보려고 무던히 노력은 했으나 여전히 이해하기 너무 너무 어렵더군요... 쩌비)
마하우트의 개발의 시작도 루씬을 개발했던 개발자들 가운데 기계학습에 관심이 있는 세 명이 시작했다는 군요, 또한 태생이 그러하듯이 여러 아파치 프로젝트와 종속성(?) 또는 관련이 있습니다.
  1. hadoop Apache license - 분산저장소 + 분산처리
  2. lucene Apache license (maybe) - 검색엔진
  3. UIMA (maybe) - 정보추출 or 분석
  4. PIG (maybe) - 데이터분석용 질의어
  5. common-math (maybe) - 수학, 통계

https://svn.apache.org/repos/asf/lucene/mahout/ 현재 최신 소스를 확인할 수 있습니다. 물론 다운로드 하여 로컬에서 실험할 수도 있고요..

이슈트래킹은 JIRA Mahout (mahout) 을 통해서 하고 있습니다. 현재도 많은 이슈들이  진행중이네요, 하지만 Neural Network에 대한 것은 아직 open일 뿐 진행중이지 않네요.. 털썩

초기 Founder 또는 Committers 입니다. 이름을 보면 많이 보던 이름이 하나 보입니다. Erik Hatcher 이 사람은 Lucene in Action 의 저자이기도 합니다. 그리고 Gran Ingersoll 이 사람은 현재 wiki 주소의 도메인과 동일하군요.... 시간 날 때에 관련 분들의 블로그나 홈페이지를 한번씩 찾아가 보는 것도 재미있을 것 같습니다.
  1. Dawid Weiss (in particular the bits about clustering)
  2. Erik Hatcher
  3. Grant Ingersoll (Homepage, Blog)
  4. Isabel Drost (apache_mahout@isabel-drost.de)
  5. Karl Wettin
  6. Otis Gospodnetic
  7. Niranjan Balasubramanian
  8. Ozgur Yilmazel

This article was written in springnote.

이올린에 북마크하기(0) 이올린에 추천하기(0)

'open source > mahout' 카테고리의 다른 글

Mahout란 무엇에다 쓰는 물건인고?  (0) 2008/07/19
Posted by dm4ir