중고나라 물품의 가격을 산정할 때

가격을 쉽게 가져올 수 있는가?

제품의 상태는 어떻게 판단하나?

A/S 


가격을 예측하는 모델을 만든다.

베이지안 분류기나 의사결정트리 SVM은 가격과 같은 많은 이질적인 속성들에 기반을 둔 숫자 데이터를 예측하기 어렵다.

가격 예측에는 여러 변수들의 최적 가중치를 찾아야 하는데 그것을 자동으로 결정하기 위해 5장에서 개발한 최적화 기법들을 사용


01. 예제 데이터 세트 만들기

와인을 이용한 가격 예측


02. kNN

- k-nearest neighbors : 가장 비슷한 것 몇 개를 찾아 가격들이 대강 같다고 가정하는 것. 

(1) 이웃 개수

- k : 마지막 결과를 얻기 위해 평균을 낼 물품의 개수

- 노이즈를 추가함 : 몇 사람은 싸게 구입할 것이고 어떤 사람은 비싸게 구입할 수도 있기 때문이다.

- 기술 변수를 적당하게 추가해야 한다. 최적화 기법으로 물품 개수를 선정해야 한다.

(2) 유사도 결정하기

- 유클리디안 거리를 사용한다.

* 다른 곳에서는 피어슨 상관계수, 코사인(자카드, 맨해튼 거리)(?) 사용 가능

* 어떤 걸 사용할 지에 대해서는 좀 알아봐야한다.

kNN은 계산량은 많지만 새로운 데이터가 추가될 때마다 새로 학습하지 않아도 되는 장점이 있다.


03. 물품 가중치

- 이유 : 적정한 거리의 군집을 만들기 위해서 가까운 건 더 가깝게 만들어 주고 먼 것은 더 멀게 만들어 주기 위해서

거리에 가중치를 주는 방법 3가지

- 역 함수 : 거리 값을 1에서 나눈다. 노이즈에 너무 민감할 수 있다.

- 빼기 함수 : 뺀 값이 0보다 작으면 0으로 한다. 하지만 0이 되는 경우 추천을 하지 못하는 경우 발생

- 가우스 함수 : 빨리 계산하기가 어렵지만 적당한 가중치를 만들어 줌

- 가중 kNN

결과들의 평균을 계산하는 대신에 가중 평균(weighted average)을 계산한다.

가중 평균은 각 물품의 가중치(여기서는 가우시안을 사용)에 값을 곱한 후 서로 더하고, 그것을 전체 가중치의 합으로 나눠서 계산


04. 교차 검증(cross-validation)

데이터를 학습 세트와 테스트 세트로 나누는 기법들을 총칭하는 이름

전체 데이터의 5% 정도를 테스트 세트로 만든다. 그러면 나머지 95% 학습 세트가 된다.

실제 결과와 예측의 차이를 구한다.


05. 이질 변수

(1) 축척 조정

거리를 실제 값에 근거하는 방법이 아니라 값을 정규화해서 그 값들이 모두 같은 공간에 있는 것처럼 만드는 방법


06. 축척 최적화

어닐링 최적화를 시도하여 교차 검증이 최적값을 될 수 있는 변수들의 가중치를 찾는다.


07. 불균등 분포

- 어디서 구매했는지에 따라 가격이 달라질 수 있으므로 해당 위치의 데이터를 더 면민히 관찰해야 한다.

- 확률 밀도 추정하기

단일 가격을 예측하기 보다는 물품이 특정 가격 범위 내에 떨어질 확률을 계산


뒷부분엔 이베이를 활용하여 가격을 예측하였다.



Posted by 공놀이나하여보세
,

2.1 분포

- 어떤 값과 그 값이 나타날 확률의 집합

PMF(probability mass function) - 확률 질량 함수

Thinkbayes.py에 정의된 파이썬 모듈


*삽질기

from thinkbayes import Pmf 를 하고 나면 아래와 같은 에러가 발생했다.

File "thinkbayes.py", line 88 if x <= xs[0]: ^ SyntaxError: invalid syntax



맥을 사용하는데 미숙한 내가 웹브라우져에서 '파일->별도 저장' 으로 저장을 했더니 thinkbayes.py 파일에 웹코드가 들어간 문제였다.

그래서 그냥 웹브라우져에 있는 파일을 긁어서 thinkbayes.py로 새로운 파일을 만들고 붙여 넣기를 하여 사용했다.


2.2 쿠키 문제

쿠키 문제를 잘 읽어봐야 2.3장이 이해가 간다.

pmf.Set : 가설에 대한 사전 확률값을 설정함

pmf.Mult : 우도 값을 설정하면 위에서 설정한 확률 값을 곱해준다.

pmf.Normalize : 정규화를 해준다. 그런데 왜 정규화를 해주는지 책으로는 잘 모르겠다.

일단은 Prob를 해주기 전에 정규화를 해 줘야 한다고 생각을 해야겠다.


pmf.Prob : 사후 확률 즉 베이지안 이론에 근거한 결과값을 확인할 수 있다.


2.3 베이지안 프레임워크

아래 코드를 보면 앞에서는 pmf.Set에 확률 값을 넣어줬는데 여기서는 각 가설마다 1이란 값을 넣어줬다.

원래 확률의 총합은 1이 되는 것이지만 여기서는 각각의 값을 넣어준 후 pmf에 들어 있는 가설의 수로 나누어 확률이 표현되는 것 같다.

Normalize라는게 어떻게 보면 위에 1이란 값을 가설의 수로 나누어 확률로 만들어 주는 일도 하는 것이 아닐까 하는 생각이 든다.

__init__함수는 가설의 사전확률 값을 설정하는 것이다. 그런데 이상한 것이 Pmf를 클래스가 인자로 받고 또 Pmf.__init__을 호출하면서 매개변수로 self를 넘긴다는 것이다. 휴 내가 파이썬 문법을 잘 모르니 이게 또 어렵다. 이건 다음에 또 공부해 봐야겠다.

*뒷부분을 보다 보니 class의 인자가 Pmf임을 알 수 있다.

*이것은 Pmf함수를 상속받는 다는 말인 것 같다.

def __init__(self, hypos): Pmf.__init__(self) for hypo in hypos: self.Set(hypo, 1) self.Normalize()


Update는 우도 값을 설정해주는 함수이다.

매개변수인 data는 사후확률을 구하고자 하는 쿠키 이름이다.

이 책에서는 vanilla를 data로 입력하였는데 이 뜻은 vanilla가 선택되었을 때 어느 그릇에서 나왔는지에 대한 사후 확률을 구하기 위해서이다.

self.Likelihood는 data값에 대한 우도 값을 리턴해주는 함수이다. 이 함수는 아래에 정의한다.

    mixes = {

        'Bowl 1':dict(vanilla = 0.75, chocolate = 0.25),

        'Bowl 2':dict(vanilla = 0.5, chocolate = 0.5),

    }

    def Likelihood(self, data, hypo):

        mix = self.mixes[hypo]

        print mix

        like = mix[data]

        print like

        return like


입력한 vanilla가 각 그릇에서 나올 수 있는 사후 확률을 구해준다. 

for hypo, prob in pmf.Items():

    print hypo, prob


2.4 몬티 홀 문제

다시 몬티 홀 문제이다.

1장에서 몬티 홀 문제가 나왔는데 이해를 하지 못했다.

파이썬 코드를 풀어보며 이해가 될 지 안될지 한번 해보자 ㅋㅋ


A B C 세개의 가설을 입력으로 받는다.

'B'를 update에 입력한다. 앞에서 봤지만 update에 입력하는 값은 사후확률을 구하고자 하는 값이다. 

헉!!! 앞에서 가설은 그릇이었고 update에 입력하는 값은 그릇에 들어있던 쿠키였는데 여기서는 가설 중에 하나인 'B'를 입력한다 왜지??????


Likelihood함수를 보니 내용이 바꼈다.

가설과 데이터('B')가 같으면 우도가 0이고 가설이 'A'이면 우도가 0.5 가설이 'C'이면 우도가 1이다.

왜???? 이건 결국 다시 1장으로 돌아가 공부를 하고 와야한다. ㅠㅠ

다시 정리해보자.

A B C 세개의 문자 중 한개의 뒤에 자동차가 있다.

게스트가 'A'를 선택했다.

그러자 호스트가 'B'뒤에 아무것도 없는 것을 보여주었다.

그러면서 'C'로 바꿀 것이냐 말 것이냐를 물어본다.

그럼 게스트는 'C'를 선택하는 것이 옳으냐 'A'를 선택하는 것이 옳으냐이다.

여기서 'A'랑 'C' 둘 중에 하나를 고르는 것이니 확률은 1/2이 아닌가??


이해가 잘 가지 않아 파이썬으로 몬티 홀 문제를 짜서 실제로 돌려보았다.

아래 주소에서 확인 가능하다.

http://gongnorina.tistory.com/55


likelihood 함수를 다시 보자.
    def Likelihood(self, data, hypo):
        if hypo == data:
            return 0
        elif hypo == 'A':
            return 0.5
        else:
            return 1


사실 likelihood함수가 잘 이해가 가지 않는다.

몬티 홀은 알겠지만 여전히 이 함수는 이상하다. 

이건 또 다음에 더 보자.


2.5 프레임워크 캡슐화

여기서는 thinkbayes파일의 Suite함수에 대해 설명하고 있다.

Suite함수는 Pmf를 상속받은 베이지안용 클래스이다.

몬티 홀은 Likelihood 함수만 내용이 좀 달라지므로 Likelihood함수만 다시 작성해 주었다.


2.6 M&M문제

Suite를 이용하여 M&문제를 풀어보았다.

역시 Likelihood함수만 다시 작업해 주었다.


Likelihood함수가 역시 또 어렵다.

여기서 data는 bag, color 두개나 리턴한다.

그건 Update에서 data를 두개 넣어주었기 때문이다.

이것보다 더 특이한건 Update를 두개 넣어준 것이다.

bag1에서 yellow, bag2에서 green이 나올 화률을 토대로 bag1과 bag2 의 확률을 구하는 문제인데 이렇게 Update를 여러개 넣는 방법에 대해서는 이야기해준 적이 없다.


2.7.토의

이렇게 이번장이 끝났다.

몬티 홀이 뭔지 알 수 있었고

Suite라는 인터페이스에 대해서 알 수 있었다.

우리는 Likelihood라는 함수만 재정의 해주면 된다.


하지만 오늘 공부에서 의문점이 몇가지 있다.

이 문제는 또 시간이 지나면서 해결되지 않을까 하는 생각이 든다.

(1) 몬티홀 문제에서 Likelihood를 이렇게 정의한 까닭은?

왜 'A'는 0.5고 elif는 1인지??

(2)  M&M문제에서 Update를 두개나 넣어준 이유는??


답을 아는 분이 계시면 답문 주세요~^^

Posted by 공놀이나하여보세
,

이거 혼자 공부하려니 어렵군요.

1.6 M&M문제

문제는 '노랑 초콜렛이 1994년에 생산한 봉지에서 나왔을 확률은 얼마인가?'입니다.

문제를 잘 풀어보면 '노랑 초콜렛은 1994년 봉지에서 나오고, 초록 초콜렛은 1996년 봉지에서 나올 확률이다.'

정의를 잘 살펴보자

A: 봉지 1은 1994년에 생산했을 때 봉지 2는 1996년에 생산했다.

B: 봉지 1은 1994년에 생산했을 때 봉지 2는 1996년에 생산했다.


A의 경우를 계산해보자.

1) p(H) : 사전확률. p(H)라고 되어 있지만 실직적으로 p(A)의 확률이다. p(A) = 1/2이다.

2) H는 Hypothesis이다. 여기서는 A이다.

3) D는 Data이다. 노랑과 초록이 선택될 확률이다

4) 노랑과 초록은 독립이므로 수식은 아래와 같다.

p(D|H) = p(노랑|1994) * p(초록|1996) = 0.20 * 0.20 = 0.004

5) p(H|D) = p(H)p(D|H) / p(D)이다. 


여기서 p(D)를 구하는 법이 나오지 않았다.

p(D) = p(A) * p(노랑|1994)*p(초록|1996) + p(B) * p(노랑|1996)*p(초록|1994)이다

p(D) = p(D|H)(가설A에서 나온 것) + p(H|D)(가설 B에서 나온 것) 이 되고

이것은

p(D) = 1/2 * 0.004 + 1/2 * 0.0014  = 0.0027이다.


책에서 문제는 가정 A의 사후확률을 구하는 것이므로 답은 0.002/0.0027 = 20/27이다.

약간 헷깔리는 것은 책에서 문제가 가정 A의 사후확률을 구하는 것인가? 이다. ㅋㅋ

=> 23페이지를 보면 'p(H|D)는 여기서 계산하고자 하는 데이터를 확인한 이후의 가설 확률로, 사후 확률이라고 한다.' 라고 되어 있으니 문제는 사후 확률을 구하는 것이 맞다.


1.7 몬티홀 문제

이건 이해가 잘 가지 않는다.

우도를 A의 경우에는 1/2로 하고 C의 경우에는 1로 주었다. 왜일까?

우도의 뜻을 내가 좀 더 정확하게 이해를 해야할 것 같다.

=> 이 문제는 2장에 python코드로 푸는 문제가 있으니 코드를 보며 잘 이해해 보도록 하자.



Posted by 공놀이나하여보세
,

* 소감


* 의사 결정 트리 * 

의사결정트리의 목적 : 사용자가 유료 고객이 될 가망성을 예측. 사용자가 고객이 될 것임을 시사하는 요소를 알았다면 이 정보를 이용해서 광고 전략을 짜거나 사이트의 특정 측면에 쉽게 접근할 수 있게 만들거나 유료 고객의 숫자를 늘리는 데 도움이 되는 다른 전략들을 사용할 수 있다.


 - 해석이 쉬움

01. 가입 유형 추정

a. 서버 로그에서 방문 전 사이트, 지정학적 위치, 로그인 전에 본 페이지 수 등과 같은 정보를 모은다.


02. 의사 결정 트리 소개 

a.  단지 각 질문에 올바른 대답을 하면서 트리 내 경로를 따라 내려가면 결국 해답에 이르게 된다.


03. 트리 학습

a. 이 장에서는 CART(Classification and RegressionTrees)란 알고리즘 사용

- 루트 노드를 만든다.

- 테이블 안의 모든 관찰들을 고려해서 데이터를 분리하는 최적의 변수 선정

- 변수 선정을 위해 분리할 만한 조건을 가진 모든 변수들을 살펴본다.

- 사용자가 추정하기 편한 방법으로 결과물(사용자가 어떤 서비스에 가입할지)을 분할할 조건을 찾는다.


04. 최적 단편 선정

a. 소프트웨어 솔루션에서 사용할 변수를 선정하기 위해서는 집합의 혼합정도를 판단할 방법이 필요

b. 가능한 잘 섞이지 않은 두 집합을 선정하는 변수를 찾는 것

c. 지니 불순도(Gini impurity) : 집합 내의 결과 중 하나가 그 집합 내의 항목 중 하나에 무작위로 적용될 기대 오류율

d. 엔트로피 : 집합 내의 순서 불일치 정도

- 모든 다른 결과에 대한 p(x)log(p(x))의 총합


05. 재귀적으로 트리 만들기

a. 속성이 얼마나 좋은지 보기 위해 알고리즘은 먼저 전체 그룹의 엔트로피를 계산

b. 각 속성의 가능한 값으로 그룹을 나누고 새로운 두 그룹의 엔트로피를 계산

c. 어떤 속성이 가장 잘 나누는지를 결정하기 위해 정보이득(information gain)을 계산

d. 정보 이득 : 현재의 엔트로피와 새로운 두 그룹의 가중평균 엔트로피 간의 차

e. 알고리즘은 모든 속성마다 정보 이득을 계산하여 가장 높은 정보이득을 가진 것을 선택


06. 트리 출력하기

a. 재귀 함수 이용

b. 그래프 출력


07. 새로운 관찰 분류


08. 트리 가지치기(pruning)

a. 완전한 노트를 만든 후 불필요한 노드를 제거(overfitting 방지)

b. 노드 쌍을 병합해서 특정 경계값 이하로 엔트로피를 늘릴 수 있는지 보기 위해 공통 부모를 가지고 있는 노드 쌍을 검사.

c. 두 쌍을 가능한 모든 출력을 가진 한 개 노드로 병합(?)

Pruning involves checking pairs of nodes that have a common parent to see if merg- ing them would increase the entropy by less than a specified threshold. If so, the leaves are merged into a single node with all the possible outcomes.


09. 손상된 데이터 다루기

a. 때로는 데이터 세트가 정보조작을 잃어버리는 경우가 있다.


10. 숫자 결과 다루기

a. 앞에서는 분류 출력을 다루는 문제였음

b. 앞으로는 집 가격이나 인기도를 모델링하는 데 사용되는 숫자 출력


11. 주택 가격 모델링

a. 부동산 가격을 의사결정트리로 모델링하는 방법

b. 침실이 있다 든지의 차이에 따른 주택 가격을 분류 하고 가격을 예측함


12. "인기도" 모델링


13. 의사결정트리 활용 시점

a. 학습된 모델을 이해하기 쉽다.

b. 데이터의 확률적 할당이 가능

c. 소수의 가능한 결과를 가진 문제에는 효과적이지만 많은 가능성을 가진 데이터는 효율적이지 않다.

d. 복잡한 변수 조합에 의해 분류가 결정되는 곳에서는 의사 결정트리가 데이터를 분류하기 어려워진다.

 




Posted by 공놀이나하여보세
,

2부 

김민경 - Financial Security & Machine Learning

1. 신제윤 금융위원장은 금융 보안을 위해 모든 금융권이 이상거래탐지시스템 구축을 환료해야 한다고 촉구했다. 전자 금융업종 규율을 재설계토록 하겠다. 

2. 보안은 클라이언트가 아니라 제공자가 마련해야한다.

3. Fraud(사기꾼) Detection Basics

(1) Outlier Detection - rule base detection, anomaly detection 

(2) Two approaches for treating input

(3) Three kinds of algorithms - 배치 방식에 대해 모델링 방식으로 디텍팅, 모델링을 사용하지 않고 데이터를 사용해서 디텍팅(조금 느림), immune system(면역 시스템에 기반한 것)

(4) Real time fraud detection - 

(5) Not worth spending $200 to stop $20 fraud

(6) The Pareto principile

(7) Resources available for fraud detection are always limited - 3%만 사용 가능

(8) If we cannot outspend??

4. Immune System
(1) 림프구 - 무과립성 백혈구의 일종으로 백혈구의 30프로임
(2) B-cell : 모양을 맞춰보고 안맞으면 죽임 

(3) T-cell : 

5. Artificial Immune  Recognition System

(1) 여러 항원들이 모여서 전체 적으로 across해서 detect함


6. MAchine laerning

(1) Supervised learning

(2) Unsupervised learning

(3) Sei-supervised learning : 지도 + 비지도학습

(4) Reinforcement learning : 강화학습 - 잘못된 것을 다시 피드백

(5) Evolutionary learning : 진화 학습

(6) Meta Learning : landmark of data for classifier 

(7) Genetic algrithm : 행위가 시작적으로 왔을 때 이상한 패턴이 나오면 디텍트함



7. Types of Anomaly

(1) Point Anomalies

(2) Contextual Anmalies

(3) Collective Anomalies


8. Association Rule Mining

(1) FP-Tree - frecate(?) pattern gross


9. Finite State Automata(FSA)

알아서 공부


10. Clustering : 데이터를 모를 때 알아서 segmentation해줌

clustering 후 가우시안 모델링을 하고 각각 커널을 넣어줌


11. Hidden Markov

- Sequence Based Algorithm : small amount of money, instance based algorithms


12. Decision Tree

Profiling?


13. SVM

최대 distance

속도가 느림, 대만대 교수 림 교수, 코세라에 강의가 있음


14. logistic regression

feture


15. Neural Network

- Feed Forward Model


16. anti-k nearest neighbor


17. Classical rule-based


18. Neural Stream

(1) Storage - hadoop : Distributed file system, mapreduce : parallel processing

(2) Algorithms - online learning, batch model, direct data, batch model, direct data

(3) Stream - Neural stream : decetralize decision process, cell base


19. A system based on profiles

기존은 rule base임

각각 사용자의 행위별로 파라미터를 만들고 그 사용자에게 서비스를 제공함 개별적으로 트레이닝 함 - hadoop이 최적이다.


Q&A

1. Hadoop이 스파크보다 좋은 이유

- 스파크(버클리에서 만듬)는 latency를 줄일 수 있다. in memory base라서 불안정하다.

- Hadoop은 안정적이다. 느리더라도 괜찮다.






Posted by 공놀이나하여보세
,

코인넷 직원(?)

1. Mining -> Exchange -> Business 

Bitcoin 하루 거래량이 하루 100억이 넘어감

비트 코인 보유량 1위 중국 2위 미국


2. 비트코인 이용 사업 사례 - 중국 여행을 위한 한국 앱 서비스

(1) 무료 와이파이

(2) 지도

(3) 쇼핑 결제 시스템

(4) 비트 코인(전자지갑) 결제 시스템

(5) 중국 마케팅 업체(쥔진통)를 이용해서 마케팅 함

(6) but 해킹 당함, 어플리케이션 오작동

(7) 앱을 설치한 사람은 꽤 있으나 중국 고객 사용자 미비


3. 국내 시장

Xcoin 비트코인 하루 거래량 100억 돌파

2014년 여름~가을

1bitcoin 가격 : 60~70만원

Korbit, Xcoin 

현재는 20~25만원 정도이고 거래량은 20억 정도 됨

거래자 큰손은 다단계(?)

SPC - K90

홍콩에서 4200억 사기 사건 발생 10분의 1은 우리나라 고객

SNS에서 마이코인으로 검색하면 결과가 뜸


5. 향 후 우리는?? 

지금은 투기 세력이 많이 빠졌으므로 건전한 발전이 가능한 상황

블럭체인을 이용한 보안 인증 사업이 많아질 것이다.


Q&A

(1) 금융 법적으로 문제 - 실물 거래가 생길시에 세금을 매기겠다.

정부가 좋아하지 않음. 환전할 때 보고할 것

익명성 보장이 되지 않음

(2) without banking system이 확산될 경우 패러다임 변화 가능성이 있는가?

아프리카는 은행이 없기 때문에 권장하는 추세임

우리나라나 선진국은 은행이 있기 때문에 새로운 패러다임을 싫어함

3년~5년 후에 사용이 될 수 있다.

(3) 어떤 사업 아이템이 있을까?

bitcoin 보관 사업, bitcoin 인증 사업, 소상공인들에 대한 transaction fee, bitcoin atm기를 수입해서 사용

중국에서는 은행 atm처럼 생김

coin plug atm기 고려대학교/삼성동 세도나 커피숍/다른 한군데에 설치되어 있음 돈을 찾거나 송금 가능

(4) 인터넷 전문 은행은 2000억 자본금 요구

뱅킹 시스템 - 기본으로 한 전자화폐 사업이 주가 될 확률이 높다.

인터넷 전문 은행 - 핀테크 - 위드아웃 뱅킹 시스템 - 금산 분리법 - 대부 등록 필요할 것





Posted by 공놀이나하여보세
,

1. 탭 자동 완성

쉘에서 입력을 하는 동안 <Tab>을 누르면 네임스페이스에서 그 시점까지 입력한 내용과 맞아떨어지는 변수를 자동으로 찾아준다.

2. 자기 관찰

<?> : 변수 이름 앞이나 뒤에 ? 기호를 붙이면 그 객체에 대한 일반 정보를 출력

<??> : 가능한 경우 함수의 소스코드를 보여줌

<*>도 사용 가능

3. %run 명령어

%run ipython_script_test.py : python ipython_script_test.py 와 동일하게 실행

%run -i 대화형 네임스페이스에 미리 선언된 변수에 접근해야 할 때


4. %debug

에러가 났을 때 예외가 발생한 시점의 스택 프레임 정보를 보여줌

%run -d : 스크립트를 실행하기 전에 디버거를 먼저 실행함

디버거 명령과 같은 변수가 있다면 !를 변수 이름 앞에 붙여서 내용 확인 가능


5. 쉽게 디버깅 하는 법

(1) set_trace()

def set_trace():

from IPython.core.debugger import Pdb

Pdb(color_scheme='Linux').set_trace(sys._getframe().f_back)

 함수를 정의 해 둔 후 문자가 생기는 곳 바로 위에 set_trace()코드를 넣으면 멈추고 살펴볼 수 있음


(2) debug()

def debug(f, *args, **kwargs):

from IPython.core.debugger import Pdb

pdb = Pdb(color_scheme = 'Linux')

return pdb.runcall(f, *args, **kwargs)

def f(x, y, z=1):

tmp = x + y

return tmp / z


debug(f, 1, 2, z=3)

과 같은 방식으로 코딩하면 됨


6. 코드 시간 측정

% time method1 = [x for x in strings if x.startswith('foo')]

%timeit method2 = [x for x in strings if x[:3] == 'foo']

%timeit은 여러번 실행 후 평균 시간 값을 return해줌


7. 기본적인 프로파일링 : 각 함수에서 소모된 시간을 기록

cProfile은 프로그램이나 임의의 코드 블록을 실행하면서 각 함수에서 소모된 시간을 계속 기록한다.

cprof_example.py

import numpy as np

from numpy.linalg import eigvals


def run_experiment(niter=100):

    K = 100

    results = []

    for _ in xrange(niter):

        mat = np.random.randn(K, K)

        max_eigenvalue = np.abs(eigvals(mat)).max()

        results.append(max_eigenvalue)

    return results

some_results = run_experiment()

print 'Largest one we saw: %s' % np.max(some_results)

python -m cProfile -s cumulative cprof_example.py

주의 : ipython notebook에서 실행할 때는 !를 맨 앞에 붙이고 실행해야 함!!

%run -p -s cumulative cprof_exaple.py


8. IPython HTML 노트북

ipython notebook --pylab=inline

실행 시 UTF-8 에러 날 경우 아래 사이트 참조

http://stackoverflow.com/questions/15526996/ipython-notebook-locale-error 


Posted by 공놀이나하여보세
,

1. 파이썬이 데이터 분석을 위해 사용되는 이유

(1) 데이터 분석과 대화형 데이터 조사, 데이터 시각화에 사용 가능

(2) C, C++, 포트란 코드와 통합이 쉬움

(3) 간단하게 프로토 타입을 만들 수 있음


2. 파이썬의 단점

(1) 느림

(2) 멀티스레드가 힘듬 - GIL(Global Interpreter Lock) : 인터프리터가 한 번에 하나의 파이썬 바이트 코드 명령만 실햄됨

(3) OpenMP와 통합은 가능


3. 필수 라이브러리

(1) Numpy : 과학 계산용 파운데이션 패키지

(2) pandas : 구조화된 데이터를 빠르고 쉬우면서도 다양한 형식으로 가공할 수 있는 풍부한 자료 구조와 함수를 제공, 데이터 분석 환경으로 만드는데 꼭 필요

(3) matplotlib : 그래프나 2차원 데이터 시각화를 생성하는 유명한 라이브러리

(4) IPython : 표준 과학 꼐산용 파이썬 도구 모음에 포함된 컴포넌트

(5) ScyPy : 과학 계산 컴퓨팅 영역의 여러 기본 문제를 다루는 패키지 모음


4. 설치 방법

- 윈도우, OS X, 리눅스

- EPD가 안되므로 Anaconda를 설치해야함

아래 사이트 참조

https://medium.com/@younggun/anaconda-fe67e9c9709d





Posted by 공놀이나하여보세
,
1. 개요
2. 탐색
2.1 맹목적 탐색
2.1.2 너비 우선 탐색
2.1.5 깊이 우선 탐색
2.2 경험적 탐색
2.2.1 최상 우선 탐색과 등산법
(1) 최상 우선 탐색 : 좋아 보이는 방향무터 탐색을 진행하는 최상 우선 탐색
휴리스틱 함수 : 최상 우선 탐색에서 탐색의 단서가 되는 값
2.2.2 최적 경로 탐색
전개된 노드 중 오픈 리스트의 노드와 중복이 있을 대 평가가 좋은 쪽을 남김
2.2.3 A알고리즘, A*알고리즘
2.3 상대가 있는 탐색
게임 트리의 탐색에 대해 사고하는 방식

3. 지식 표현
3.1 지식 네트워크
3.2 논리적 표현

4. 진화적 기법, 집단 지능
4.1.2 진화 연산 기법의 유전 알고리즘
진화 연산, 진화 연산 기법
유전 알고리즘 : 진화 연산의 대표적인 예
4.2 집단 지능 알고리즘
각각 독립적으로 동작하는 개체가 여러 개 모여, 어떤 일정한 규칙을 바탕으로 행동
입자 군집 최적화법

5. 텍스트 처리 알고리즘
5.1.1 자연어 처리 기술

참고 문헌
1. 패턴 인식과 기계 학습- C.M. 비숍 저, 슈프링거 재팬
2. 에이전트 어프로치 인공지능 제2판 - S.J.Russel
3. Artificial Intelligence, Third Edition - Patrick Henry Winston
4. 사단법인 인공지능학회 ai-gakkai.or.jp
5. 컴퓨터 바둑 - 몬테카를로 법의 이론과 구현 - 마츠바라 진 편처, 공립출판


후기 : 머신 러닝 공부 초반이어서일 지 모르겠지만 내용이 좀 아쉬웠다


Posted by 공놀이나하여보세
,
1_1 Support Vector Machine Tutorial
유황조교수 - Postech

Classification

Regression

Ranking


공통점 : 트레이닝된 데이터넷을 기초하여 모델을 만들고 새로운 데이터를 예측함

Learning Process
1. 데이터 준비
2. 트레이닝(모델을 만듬)
3. 검증
4. deploy(알맞게 사용)

Learning의 이슈
1. 정확도
2. 속도
3. 가독성 interpretability (해석할 수 있는?)
4. 노이즈나 없는 데이터 handling

Overfitting되지 않게 주의 (데이터 개수를 성능이 좋을 때까지로 트레이닝 시킴)

Metrics for performance Evaluation
1. TP : Positive로 선택하고 맞음
2. FN: Negative로 선택하고 틀림
3. FP : Positive로 선택하고 틀림
4. TN : Negative로 선택하고 맞음

Precision = TP / (TP+FP) - Positive로 선택한 것 중에 맞을 확률
Recall = TP / (TP + FN) : - Positive중에 제대로 선택될 확률
F-measure = 2TP / 2TP + FP + FN


AUC - Area Under the ROC Curve : ROC커브의 아래쪽 영역을 사용(?)

Estimate Generalization Performance
1. Holdout method : 두개의 독립적인 세트로 랜덤하게 분류
2. k-fold : k개 만큼 랜덤하게 분류
3. Leave-one-out : 100개 중 99개를 트레이닝 1개 테스트(테스트할 1개를 돌려가며 100번 반복)

Linear Classification
F(X) = b + 시그마(i)WiXi

Linear vs Quadratic vs Polynomial

Perceptron and Winnow
Perceptron : Linear function을 배우는 알고리즘

5. ANN(Artificial Neural Network) : input -> blackbox -> output
Training ANN means learning the weights of the neurons
weight값을 초기화 함
training 데이터를 이용해 에러값을 최소로 하는 weight값을 찾는다.

*특징
Nonelinear 모델 : Perceptron의 layer들을 이용해 만듬
Nondeterministic : w값이 정해져 있지 않음
튜닝을 많이 해야함
복잡한 함수를 쓰기 위해서는 복잡한 함수를 배워야 함

6. SVM : Support Vector Machine
*특징
Deterministic 알고리즘
적은 parameter로 정형화할 수 있음
kernel trick을 이용해 쉽게 사용 가능
SVM은 임의의 degree의 polynomial function을 linear time에 배울 수 있음
(1) Linear SVM : 직선 한개로 두 부류를 나눔
(2) Nonlinear SVM : dimension을 바꾸어 boundary를 직선으로 바꿈
- kernel trick 사용
- RBF kernel을 사용하여 여러 모양의 boundary를 만듬
- SVM 구현 : LIBSVM(python 사용 가능), SVM-light

Multiclass classification
* 특징 비교
One to all
-k개 모델 생성
- training set의 크기가 크가

Pairwise coupling
-k^2개 모델 생성
- training set의 크기가 작다
- 좀 더 정확하다
- LIBSVM 사용 가능

RANKING SVM(RANK SVM)
연관된 데이터를 ordering을 하고 전체 data order 예측

1_2. Gaussian Process Regression - 서울대 오성회 교수
(Gaussian Processes for Machine Learning, C.E.Rasmussen and C.K.I. Williams, 2006 MIT Press- 사람 따라 다니는데 사용 가능)
1960년대부터 사용
2차원 가우시안
wifi signal을 가우시안을 ㅣㅇ용하여 그림
interpolation smoothing
몇시간 후 예측
Central limit theorem - 모든 걸 가우시안으로 변경

Matrix Inversion Lemma
- Kalman filter나 smoothing에서 사용 가능

Kriging - 금찾기 위해 나온 개념

*흥미있는 주제
Mixture of Gaussian process
GP Latent Variable Model ( GP-LVM)

1_3 Supervised Learning(지도학습) : 서울대학교 노영균 교수
잉??

2_1 Semi Supervised Learning : 아주대학교 신현정 교수
Supervised Learning : input에 대한 y부여/real space
(Regression = 결과값과 예측값의 차이를 줄임)
Unsupervised learning : clustering 군집화

Semi Supervised Learning : supervised와 unsupervised의 중간 점

2_2 Representation Learning in deep learning : 삼성종기원 최희열
Manifold Learning : data representation

Neural networks history
1949 Hebbian learning : Donald Hebb
1958 Perceptron : Frank Rosenblatt <- Marvin Minsky,1969
1986 Multilayer Perceptron (Backpropagation) : David Rumlhart, Geoffrey Hinton, Ronald Williams <- Vladimir Vapnik and Corinna Cortes, 1995 SVM
2006 : Deep neural networks : Geoffrey Hinton and Ruslan Salakhutdinov

Neocognitron : K.Fukushima, 1980 Vilogical Cybernetics
Convolutional Neural Networks : Y. LeCun et al., 1989 Neural Computation
Reducing the Dimensionality of Data with Neural Networks : G. Hinton and R.Salakhutdinov, 2006 Science

Manifold vs Deep Learning
Manifold : 데이터가 많으면 안됨
Deep Learning : idea가 있으면 구현을 하면 된다. 그 후 해석을 진행

Error Backpropagation
Vanishing Gradient : back을 하면서 점점 사라진다.


3_3. Deep Learning for Visual Recognition : 네이버 김지원 책임 연구원


후기 : 개인적으로 머신러닝에 대해 무지할 때였는데 학계나 업계에서 어떤 알고리즘을 많이사용하는 지에 대한 흐름을 알 수 있었고 자주 나오는 용어들은 따로 공부를 통해 전반적인 지식을 얻을 수 있었다
지식이 있는 학생들에게도 많은 도움이 되지 않았을까 싶다


Posted by 공놀이나하여보세
,