소셜 웹 마이닝 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: ...

Building Machine Learning System with Python ch.2.2

이미지
평가 : 홀드아웃 데이터와 교차 검증 우리가 정말 하고 싶은 작업은 새로운 데이터에 대해 일반화하는 모델의 능력을 측정하는 것이다.  알고리즘이 훈련 시 보지 못한 인스턴스에 대한 성능을 측정해야한다. 이를 테스트하기 위해 두 부분으로 나누어, 하나는 모델을 훈련시키고 다른 하나는 데스트에 사용했다. 이상적으로는 훈련할 때와 테스트할 때 모든 데이터를 사용하는 것이 좋다. 이를 교차 검증이라하며, 단순한 교차 검증의 형태는 단일 잔류라 한다. 하나의 예제를 제외한 모든 데이터로 모델을 학습하고, 이 모델로 남은 하나의 예제를 잘 분류하는 지 보는 것이다.  from threshold import fit_model, predict correct = 0.0 for ei in range(len(features)):     training = np.ones(len(features), bool)     training[ei] = False     testing = ~training     model = fit_model(features[training], is_virginica[training])     predict(model, features[testing])     predictions = predict(model, features[testing])     correct += np.sum(predictions == is_virginica[testing]) acc = correct/float(len(features)) print('Accuracy: {0:.1%}'.format(acc)) fit_model 과 predit 함수들을 통해 단일 잔류로 검증을 할 수 있었다.  하지만 단일 잔류의 중요한 문제점은 몇 배 ...

Building Machine Learning System with Python ch.2.1

이미지
아이리스 데이터셋을 이용해 분류 작업을 한다. 흠.. 근데 뭔가 공부한 것들을 다시하는 느낌이라 복습한다고 생각해야겠다.  여기서 느낀 것은 시각화를 데이터 분석 초기에 하는 것이라는 것이다.  알고리즘만 공부할 때는 마지막에 시각화해서 보여주는 코드로 공부해서 그런지  시각화가 초기에 쓰면 좋은 점들을 생각 못했다.  초기에 데이터들에 대한 간략한 정보들을 쉽게 알 수 있는 것이 시각화인 것 같다.  아이리스 데이터셋 아이리스 데이터셋은 4가지 속성과 150가지의 예제를 가지고 있다. 1. 꽃받침 길이 2. 꽃받침 너비 3. 꽃잎 길이 4. 꽃잎 너비 이 데이터셋에는 4개의 속성이 있고 각 꽃은 종이 표기되어 있다. 여기서 우리가 하고 싶은 것은  "들판에서 새로운 꽃을 보면 기존의 데이터로 이 꽃을 예측할 수 있을까?" 첫번째 시각화 시각화는 초반에도 얘기했지만 분석의 초기 탐험 단계에 탁월하다.  from matplotlib import pyplot as plt import numpy as np from sklearn.datasets import load_iris data = load_iris() features = data.data feature_names = data.feature_names target = data.target target_names = data.target_names for t in range(3):     if t == 0:         c = 'r'         marker = '>'     elif t == 1:         c='g'      ...

Building Machine Learning System with Python ch.1.3

이미지
데이터 다시 보기 그래프를 다시 한 번 봐보자.  3주차 4주차 사이에 변곡점이 존재한다. 그래서 3.5주차를 기준으로 데이터를 둘로 나누어 따로 훈련해야겠다. inflection = 3.5 * 7 * 24 xa = x[:inflection] ya = y[:inflection] xb = x[inflection:] yb = y[inflection:] fa = sp.poly1d(sp.polyfit(xa, ya, 1)) fb = sp.poly1d(sp.polyfit(xb, yb, 1)) plot_models(x, y, [fa, fb], os.path.join(CHART_DIR, "1400_01_05.png")) 그래프를 그려보면 아래와 같다.  위와 같이 3.5주차를 기준으로 다른 차수들로 그래프를 그려보면 또 아래와 같다. 위 그래프를 보면 고차 다항식은 다소 과적합화 되어 있고 저차 다항식은 과소적합화 되어 있다.  그렇다면 어떻게 미래를 예측할 수 있는 모델을 찾을 수 있을까? 훈련과 테스트 미래를 볼 수 없더라고 부분 데이터로 유사한 영향을 가정할 수 있고, 해야만 한다.  그 예로, 일정 부분의 데이터를 제거하고 나머지로 훈련해보자. 변곡점 이후로부터 훈련된 모델의 테스트 오차는 현저한 차이가 있다. Error d=1: 6397694.386394 Error d=2: 6010775.401243 Error d=3: 6047678.658525 Error d=10: 7037666.529344 Error d=53: 7052608.109674 오차가 가장 작은 2차 다항식이 최후의 승자이다. 최초 질문에 대답하기 큰 흐름을 잘 반영하는 2차 다항식 모델을 찾았다.  이 함수를 어떻게 현실에 적용할 것인가. 만약 시간당 100,000 요청이 언제쯤 될지 찾는 일 같은...