3월, 2016의 게시물 표시

소셜 웹 마이닝 ch1 twitter

통계학을 배우기 전에 우선 데이터 스크래핑을 해봐야겠다는 생각에 소셜 웹 마이닝이라는 책을 사서 공부 중이다. 아래 코드는 한국 트위터에 맞게 수정해서 쓴 코드이다. # coding: utf-8 # API 인증  # In[1]: import twitter # In[2]: CONSUMER_KEY = '' CONSUMER_SECRET = '' OAUTH_TOKEN = '' OAUTH_TOKEN_SECRET = '' 키와 토큰은 트위터 사이트에서 받아야한다. 자세한 내용은 책에 있지만 생략한다. auth = twitter.oauth.OAuth(OAUTH_TOKEN,OAUTH_TOKEN_SECRET,CONSUMER_KEY,CONSUMER_SECRET) twitter_api = twitter.Twitter(auth=auth) 위처럼 api 인증을 받아야 트위터의 데이터를 스크래핑할 수 있다. # In[3]: WORLD_WOE_ID = 1 KOR_WOE_ID = 23424868 world_trends = twitter_api.trends.place(_id = WORLD_WOE_ID) kor_trends = twitter_api.trends.place(_id = KOR_WOE_ID) 트위터 api에 트렌드 클래스도 있다니 신기하다. # JSON을 이용해 보기 쉽게 하기  # In[4]: import json json 은 자바 스크립트 변환하는 걸로 알고 있었는데 여기서는 어떻게 쓰일지 궁금했다. # In[5]: print(json.dumps(world_trends,indent = 1,ensure_ascii=False)) print print(json.dumps(kor_trends,indent =1,ensure_ascii=False)) ensure_ascii=False 를 써야 한글이 깨지지 않고 잘 나왔다.. 자바 스크립트 ...

인공지능에 대한 생각 & 공부 계획 (기계학습, 분산 시스템)

이미지
기계학습을 공부하고 있는데 여러 난관들에 부딪혀 새로운 계획의 필요성을 느꼈다. 가장 큰 난관은 인공지능의 뜨거운 관심인 것 같다.. 알파고 덕분에? 국내의 인재들이 기계학습에 몰리지 않을까 걱정된다. 나보다 머리 좋은 애들이 나를 금방 앞지를텐데  ㅠ 국내의 통계를 잘하고 프로그래밍 좀 한다는 사람들은 다 기계학습으로 몰릴테고 기계학습을 공부하다 보면 인공지능도 하고 싶을테니.. 인공지능은 4차 산업혁명의 핵이라는 말을 부정할 순 없을 것이다. 내가 보기엔 요즘 뜨는 IT 기술들은 인공지능을 받쳐주는 기술로 밖에 안보인다. 로봇산업, 사물인터넷, 가상현실은 인공지능이 학습하기 딱 좋은 환경을 만들어 준다고 생각한다. 가상현실이 발전한다면 인공지능은 가상현실에서 학습할테고 가상현실에서 원하는 상황을 만들어 알파고처럼 몇 달만 공부시키면 또 인류 대표를 이길 것이다. 기계의 물리적인 한계가 존재하지 않는 바둑이나 분석 같은 것들은 인공지능이 금방 따라잡을 것이다. 아직 로봇이 뛰어다니면서 점프하고 뒹굴고 이런 부드러운 움직임을 보여줄 순 없다 . 만약 로봇이 발전하고 인간과 같은 물리적인 조건을 갖춘다면 스포츠, 전쟁 같은 것들도 인공지능이 가상현실에서 학습할 것이다. 그럼 또 인간을 앞지르겠지.. 이미 마소는 인공지능을 마인 크래프트에서 학습시킨다고 한다. 사물인터넷도 마찬가지다. 딥러닝이라는 개념은 인간의 뇌를 모방한 기계학습이다. 모두가 알고 있듯이 컴퓨터의 하드웨어적인 한계 때문에 역사 속에 사라졌다가 21세기에 하드웨어의 한계를 극복하고 빛난 기계학습이다. '왜 사물인터넷 얘기에서 딥러닝으로 빠지는가'라고 생각할 수 있겠지만 내 생각에는 굉장히 관련이 깊다. 왜냐하면 딥러닝은 좋은 하드웨어가 기반이 되어야한다. 돌아다니는 로봇이 좋은 하드웨어를 달고 다니기엔 현재는 힘들 것이다. 미래엔 초소형 하드웨어가 나올지 모르겠지만 사물인터넷 환경이 잘 구축된다면 그럴 ...

Building Machine Learning System with Python ch.3.1

지도 학습이란 선생님이 알려주는 학습과 같다. 그런데 분류 모델을 학습시키는 라벨이 없다고 생각해보다. 물론, 분류 모델을 학습시키지 못할 수도 있지만, 데이터 자체에서 패턴을 찾을 수가 있다. 즉, 데이터 자체가 나타낸다. 이번에는 군집화를 활용해야한다. 이 기법은 유사한 아이템을 같은 군집에 넣고 유사하지 않은 아이템을 다른 군집에 넣는다. 게시물 관련도 측정 원시 텍스트를 통해 군집화해야한다.  하지만 원시 텍스트는 아무 쓸모 없다. 그래서 원시 텍스트를 의미 있는 수치로 변환해 군집화 같은 기계학습 알고리즘에 적용할 수 있다.  하지 말아야 하는 방법 텍스트 유사도 측정 중 하나로 편집 거리인 레벤시타인 거리가 있다. 'How to format my hard disk','Hard disk format problems'에 대해 편집 거리를 5로 구할 수 있다. How,to,format,my 를 삭제하고 끝에다 format,problems를 넣는다. 이러한 거리는 단어의 재배치를 고려할 정도로 충분히 견고해 보이지 않는다. 어떻게 해야 하는가 편집 거리보다 좀 더 강건한 방법은 단어 주머니 접근법이다.  단어 주머니는 단어의 순서를 무시하고 단순히 단어 빈도를 사용한다. 각 단어의 출현을 세어 벡터로 나타낸다. 이 단계를 벡터화라고 한다. 다음과 같은 과정을 따라 군집화 과정에서 속성 벡터를 차후 사용할 수 있다. 1. 각 게시물에서 핵심 속성을 추출하고 벡터로 속성을 저장한다. 2. 벡터에 대해 군집화를 계산한다.  3. 질문 게시물에 대해 군집을 결정한다.  4. 이 군집에서 질문 게시물에 유사한 게시물을 뽑아낸다. 이는 다양성을 증가시킨다. 이 과정을 수행하기 전에 작업할 데이터가 먼저 필요하다. 전처리 : 공통 단어의 유사한 개수로서 측정된 유사도 원시 텍스트를 단어 주머니로 변환해야한다.  scik...

Building Machine Learning System with Python ch.2.3

좀 더 복잡한 데이터셋과 분류기 전보다 더 큰 데이터셋인 농업데이터 셋을 보자. 7가지 속성으로 이뤄져 있다. 1. 크기 2. 둘레 3. 다짐도 4. 씨앗의 길이 5. 씨앗의 너비 6. 비대칭도 7. 씨앗 홈의 길이 세 가지 밀의 종류에 따라 캐나디안, 카마, 로사라는 세 가지 범주로 나눈다.  앞서와 마찬가지로 형태학적 측정 값으로 종을 나누는 게 목표이다.  속성과 속성 엔지니어링 기존 속성에서 새로운 속성을 이끌어내는 일을 속성 엔지니어링이라 한다. 처음에 얘기했듯이 잘 선택된 속성으로 수행한 단순한 알고리즘은 그저 그런 속성으로 수행한 뛰어난 알고리즘보다 좋은 결과를 낸다. 어떤 속성이 좋은 지 구별하기 위해서는 기반 지식을 사용할 필요가 있다. 자연스러운 질문은 좋은 속성을 자동으로 선택할 수 있는가이다.  이러한 문제를 속성 선택이라 한다. 제안된 여러 가지 방법들이 존재한다. scikit-learn 으로 분류 scikit-learn 분류 API는 분류기별로 잘 구성되어 있다.  이러한 분류기에는 다음 두 기본 메소드가 있다. 1. fit(features, labels) : 이 메소드는 학습하는 단계로, 모델의 매개변수를 적합화한다. 2. predict(features) : 이 메소드는 fit 함수를 호출한 후로 사용할 수 있으며 하나 이상의 예제에 대한 예측을 반환한다. from sklearn.neighbors import KNeighborsClassifier classifier = KNeighborsClassifier(n_neighbors=1) from sklearn.cross_validation import KFold kf = KFold(len(features), n_folds=5, shuffle=True) means = [] for training,testing in kf: ...