프로그래밍 2016. 4. 7. 11:30
git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>


'프로그래밍' 카테고리의 다른 글

strategy pattern(전략 패턴)  (0) 2016.05.29
templete method 패턴  (0) 2016.05.29
특정 주기로 로그 삭제  (0) 2016.01.05
scrapy 설치 오류  (0) 2015.12.22
vi에서 여러줄 주석처리 & 삭제  (0) 2015.10.01
//
프로그래밍/ElasticSearch 2016. 2. 21. 21:20

얼마전 몇개의 도큐멘트를 갖고 검색환경을 만들었는데, 클러스터 노트의 수가 더 작았음에도 검색 속도는 더 빨랐다는 글을 어디선가 읽었다. 

검색데이터(인덱스의 크기)도 무시 할 수는 없지만, 분산환경에서 특히 무시할 수 없는 것이 커넥션(tcp)비용이다. 그리고 검색이라는 것은 sorting, scoring 에서 많은 파워를 필요하게 된다.

엘라스틱의 경우 쿼리를 받을 경우 두번의 작업을 하게 된다. 해당 키워드들을 찾아 도큐멘트주소(어디노드에 있는지, 어떤 세그멘트에 있는지) 갖고 온 후 각 노드들에 대해 다시 질의한다. 이렇게 두번의 커넥션을 갖게 되는데,  인덱스 도큐멘트가 작은 상태에서 샤드를 여러개로 세팅했다면 당연 모든 노드로 쿼리가 가야하기 때문에 한 샤드에서 가져올때 대비하여 속도에서 더 느린 경험이 될 것 같다.

//
데이터eng 2016. 1. 12. 23:59

일반적인 최적화의 내용(Gradient decent)는 제약조건이 없기때문에 가능한 경우지만 제약조건이 생긴다면 적용치 못한다.

이런 상태에서 최적해(optimization)를 구하기 위해서 라그랑제승수라는 방법을 사용한다.

라그랑제 함수는 아래와 같이 정의 할 수 있다.


제약조건이 아래와 같을때

목적함수(objective function)  의 최소값을 구하는 것이다.


직접적인 예로 해보자.

  라고 했을 때


입력 파라미터 세타와 람다(라그랑제 승수에 대해 편미분을 해서 방정식을 풀어 각 값을 구한다.





'데이터eng' 카테고리의 다른 글

softmax, cross_entropy 에 대하여  (0) 2016.06.05
sigmoid 함수 미분 과정  (1) 2016.05.29
MLE(최우도 추정)에 관해  (0) 2015.12.31
bayes rule  (0) 2015.12.30
선형회귀 linear regression  (0) 2015.08.22
//
프로그래밍 2016. 1. 5. 16:03

find /home/laesunk/crawl/kbs/logs -maxdepth 1 -type f -name '*.log.*'     -mtime +7 -delete

'프로그래밍' 카테고리의 다른 글

templete method 패턴  (0) 2016.05.29
git fetch from remote  (0) 2016.04.07
scrapy 설치 오류  (0) 2015.12.22
vi에서 여러줄 주석처리 & 삭제  (0) 2015.10.01
스트링 000 숫자 없애기. 정규식  (0) 2015.09.24
//
데이터eng 2015. 12. 31. 15:51


우도는 데이터 분포(평균, 분산)를 가정하고, 해당 데이터를 관측할 확률이 얼마이냐는 것이다.

주어진 데이터에서 데이터의 관측 확률(우도)을 최대화 시키는 mean, sigma 값을 찾아내는 작업을 최우도추정이라고 하는데 이를 통해 데이터를 분류(classification) 하는 과정에 대해 알아본다.

bayes rule 에 대해서는 아래와 같다. 

정규분포를 가정하고 Discriminant function g(x)을 재정의 한다.


아래와 같이 테이터 셋이 주어졌을때

 x 가 y 에 속하면  1, 아닐 경우 0으로 분류한다.

위 데이터셋의 log likelihood 를 구해보면 아래와 같은데, 여기서 최우도 추정 방식을 사용하겠다.


최대를 만들어주는 값 세타를 구해본다. 극값(최대값)을 구하기위하여 일반적으로 적용되는 미분=0 방식을 사용한다. 

위 식을   에 대해 각각 편미분 하여 아래 값을 구해준다.

결국 결과값들을 해석해보자면 해당 클래스C에 대한 데이터의 분포 확률(likelihood)는 위의 평균, 분산 값일때 최대로 이루어진다는것이다. 

추정된 값들은 클래스 C에 대한 산술평균, 분산 값이다. prior(c)에 대한 값도 역시 전체 데이터에 대비한 비율인 것.

그리고 다시 discriminant function 을 아래와 같이 구할 수 있다.

위 식을 가지고 classification 에 이용하도록 한다.

1) BINARY CLASSIFICATION

binary classification 에서는 각각의 값을 비교하여 분별하기 보다 둘의 차이를 구해 양수냐 음수냐를 따져서, 양수일 경우 class1, 음수일 경우 class2 로 분별한다.

variance, prior 값을 갖고, u1= -2, u2=2 인 분포를 보고 생각해보자.

위의 식에 대입하고 계산해보면 

g(x) = -4x 라는 결과를 얻게 되는데 X가 음수 일 경우는 +, 양수일 경우는 - 를 보이게 된다. 결국 x 각 양수일 경우 class2 가 된다.

둘의 가운데 있는 0인 곳에서 discrimant boundary를 형성하고 있다.


아래 차트는 prior(사전) 확률의 값에 차이를 보인다. 

p(1) = 0.8, p(2) = 0.2 라고 가정한다.  

discriminant boundary 가 약간 오른쪽으로 움직인것을 볼 수 있다. 이것은 prior 확률의 차이 때문인데 class1의 prior가 더 높기 때문이다. 





'데이터eng' 카테고리의 다른 글

softmax, cross_entropy 에 대하여  (0) 2016.06.05
sigmoid 함수 미분 과정  (1) 2016.05.29
[라그랑제 승수]조건부 최적화 문제 풀기  (0) 2016.01.12
bayes rule  (0) 2015.12.30
선형회귀 linear regression  (0) 2015.08.22
//
데이터eng 2015. 12. 30. 23:38

조건부확률로 부터 도출되는 bayes rule이다. 그래서 조건부확률과 약간의 확률함수들의 정리ㄱㅏ 필요하다.

결합확률의  product rule 에 의해서 아래가 도출된다.

여기서 이산확률변수의 조건부확률(conditional PMF) 정의는 아래와 같다.

즉 확률변수 X 가 x이고, Y가 y를 갖을 확률을 구하면 결합 확률질량함수(joint pmf) 가 분자, x의 주변확률(marginal) 이 분모가 된다.

이것을 약간 정리해보면 아래와 같은 식을 얻을 수 있는데 보통 product rule이라고 한다.


그래서 우리는 위의 product rule을 이용하여 아래와 같은 bayes rule을 정리할 수 있다.

이 정리는 데이터로(x)부터 확인가능한 확률을 기반으로  추론(y)이 가능하게 한다는 점이다. (확률을 계산가능하게 된다)

사후 확률은 (우도(likelihood) x 사전확률) 로 구해진다는 것이다. 


계산해보기

암검사의 양성 진단확률과 , 실제 암확진을 받는 케이스를 생각해보자.

실제 유방암에서 확진을 받을 확률은?

X = 암검사 양성 진단, Y = 유방암 확진

가정 

p(x=1|y=1) = 0.8  <=  유방암 확진을 받은 경우 암검사에서 양성 진단을 받을 확률 ( 우리가 알 수 있는 확률)

그럼 환자가 진단 양성을 받았을 때 유방암 확진의 확률은 80% 인가? 

아니다. (이런 것을 base rate fallacy 라고 한다)

여기에 bayes rule 을 적용시켜서 볼 수 있다. 사전 (특정 사건이 일어나기 전의, 여기서는 진단 양성확률, 암환자의 확률)의 확률을 이용하여 사후(암확진)의 확률을 계산해내는것이다.

확률을 구하는 것이다.

위에서 말한 것처럼 두가지 정보가 더 필요하다.

1. 사전확률 (prior) : p(Y=1) = 0.004 (암환자일 확률)

2. false positive rate : p(X=1 | Y=0) = 0.1 ( 암환자가 아닌데도 양성진단을 받을 확률) = 0.1



 

결국 우리가 구해야하는 것은 p(Y=1|X=1) 의 확률이다.



p(Y=0) = 암환자가 아닐 확률이니 prior에서 빼서 알 수 잇다. x-0.004 = P(Y=0) 0.996

p(x=1|y=1) = 0.8 

P(Y=1) = 0.004

p(X=1 | Y=0) = 0.1 

결국 암진단에서 양성을 받고 확진이 될 확률은 0.031 (3%정도) 가 되는 것이다.













//
프로그래밍 2015. 12. 22. 12:46

ubuntu 14.04에서 pip install 시에 에러 남

sudo apt-get install build-essential libssl-dev libffi-dev python-dev libxml2-dev


참고 : http://stackoverflow.com/questions/22073516/failed-to-install-python-cryptography-package-with-pip-and-setup-py

//
데이터베이스 2015. 12. 21. 22:10

mysql은 master slave 구조의 복제 구조를 갖을 수 있다.

근데 이 구조가 과연 괜찮을 것인가?는 의문이다. 

자동 fail over 라는 관점에서는 그럴 수 있을 지 몰라도.

장비당 request를 처리함을 목적으로 늘리는 것은 좀.. 

그러던중 특정 노드(slave)사에 혹은 master slave 사이의 네트웍 peak 상태가 된다면.. ㅈㅈ

리플리케이션 지연이 일어나고.. master slave사이의 정합성이 깨지더라...

결국 해결 방법은 master slave를 한랙에 구성하고 그 둘사이를 본딩(nic)을 하던.. 10G로 구성을 하던.. 

물론 그 사이에 트래픽을 마구 끼워 넣는 로직을 방지해야지만....

'데이터베이스' 카테고리의 다른 글

mysql 날짜 함수  (0) 2015.12.16
LEFT Outer JOIN  (0) 2015.01.13
MySQL 비밀번호 복구  (0) 2014.05.31
mysql 패스워드 분실시에  (0) 2014.04.04
오라클 scott 유저 활성화  (0) 2013.11.04
//
데이터베이스 2015. 12. 16. 14:45

mysql  

한달전 where reg_date >= date_add(now(), interval -1 month)  
하루전 where reg_date >= date_add(now(), interval -1 day)  
한시간전 where reg_date >= date_add(now(), interval -1 hour)  

 
기타 날짜 조건 

select date_format(D_time,"%Y-%m-%d") from 테이블명 
select date_format(D_time,"%H:%i::%s") from 테이블명  

D_time 오늘인거 가져오기 

select D_time from 테이블명 where date_format(D_time,"%Y-%m-%d") = current_date; 
  

등록된지 24시간이 안된거 가져오기 

select D_time from 테이블명 where D_time > date_sub(now(), interval 1 day); 

'데이터베이스' 카테고리의 다른 글

데이터베이스(MySql)의 replication과 network  (0) 2015.12.21
LEFT Outer JOIN  (0) 2015.01.13
MySQL 비밀번호 복구  (0) 2014.05.31
mysql 패스워드 분실시에  (0) 2014.04.04
오라클 scott 유저 활성화  (0) 2013.11.04
//
프로그래밍/Hadoop ETC 2015. 12. 8. 21:46
특정 조건 하에 랭킹 x 순위 까지 구해야 할 경우가 있다. 예를 들면 일별 접근 횟수 랭킹 10 위까지의 ip를 구하는 경우? 아래와 같이 할 수 있을 것이다. (물론 자신의 사이트(서비스)에 접근할 때마다 로깅을 하여 데이터는 있다는 가정)
select t2.day, t2.ip, t2.cnt  from 
(
   select t1.day, t1.ip, t1.cnt, rank() over (PARTITION BY dd order by cnt desc) as rank from 
   (
      select day, ip, count(ip) as cnt from log where month = '09' group by dd, userip
   ) t1
) t2 where rank < 10;
//