기본 콘텐츠로 건너뛰기

1월, 2018의 게시물 표시

Bayes theorem

베이즈 이론은 조건부확률에 대한 수학적 정리이다. 곱씹으면 곱씹을수록 재미있고 신기하게 느껴진다. 이게 깨달음의 즐거움일까? 베이즈가 목사였다는 것, 그리고 수학속에서 그의 철학도 유추해 볼 수 있다는 것 도 참 흥미롭다. 대학교에 다시 가고 싶은 마음이 든다.(?) A가 일어났을 때, B가 일어날 조건부 확률을 알고 싶다. 그러나 우리가 가진 정보는 A가 일어날 확률, B가 일어날 확률, 그리고 B가 일어났을 때, A가 일어날 조건부 확률 뿐 이다. 이 때 아래 그림과 같은 방법으로 A가 일어났을 때, B가 일어날 조건부 확률을 계산 할 수 있다. 위 그림을 참고해서 보면, Prior probability(사전확률): 관찰자가 이미 알고있는 사건의 확률 Likelihood(우도): 이미 알고 있는 사건이 발생한 조건으로 다른 사건이 발생할 조건부 확률 Posterior probability(사후확률): 다른 사건이 발생한 조건으로 이미 알고 있는 사건이 발생한 조건부 확률로서, 사전확률과 사후 확률로 부터 알 수 있는 알고자 하는 확률 Marginal probability(주변확률): 다른 사건이 발생할 확률 흥미로운 실제 사례 병원에서의 질병 A에 대한 진단장비의 정확도 90%, 그리고 질병 A에 걸릴 확률 1%... 진단장비 사용결과 A질병 양성반응일 때의 진짜 질병A에 걸렸을 확률은?  8.3% SLAM Course - WS13/14 (Cyrill Stachniss @Freiburg) 위 강의는 내가 대학생때 많은 도움이 되었던 강의로 강의 주제 중 3강에서 Recursive bayes filter를 사용해서 로봇의 현재위치를 예측하는 방법을 다루고 있다. (Observation 'z' 와 Control 'u', 현시점 위치 x t ) 

Gaussian distribution(Normal distribution)

PDF & CDF를 훑으면서 정규분포(가우스 분포)에 대해서 간략히 보았다.  정규분포(normal distribution) 많은 통계적 분석에서는 오차가 정규분포를 따름을 가정하고 있다. 그리고 다양한 자연법칙 및 측정할 수 있는 대상들 (몸무게, 혈압, 키 등...)도 정규분포를 따른다고 한다. 정규분포의 모양은 평균을 중심(line of symmetry)으로 좌우가 대칭이다. 데칼코마니를 생각나게 하는 모양으로 접힌 선을 중심으로 좌우에 50%씩 분포하고 있는 모양이다.  중간으로 부터 양쪽 1시그마(표준편차)의 경우 68%, 2시그마는 95%...  이걸 68-95-99.7 Rule이라고 부르기도 한다고 한다네 Francis Galton : ball machine 같은 분포를 가진 여러 확률변수들의 평균의 분포는 가우시안 분포는로 근사할 수 있으며(중심극한값 정리, Central limit theorem), 다양한 경우의 모집단의 샘플이 많으면 가우스 분포로 근사할 수 있다.  ( 정규분포 on 네이버 지식백과 , Normal distribution on Wiki ) 정의는 네이버 지식백과나 위키피디아를 참고하면 전공서를 보는 듯이 자세하게 잘 설명되어있다. 가우시안 분포의 확률변수는 아래와 같다. 연관된 툴들을 조사해보면 먼저 가우시안 필터가 떠오른다. 필터의 중심에 가중치를 두고 사방으로 가우시안 분포로 가중치를 둔 필터이다.  행렬 값을 보면 유추할 수 있듯이 중심을 도드라지게 하고 나머지를 블러시켜주는 효과를 주게 된다. 아래와 같은 예시가 있겠다.  추가적으로, SLAM 공부를 할때 베이즈 추론에서 정규분포의 어떤 특성이 부각되었던 기억이 있는데 희미하게 남아있다. 

Probability density function(PDF)와 Cumulative distribution function(CDF)

1. PDF '확률밀도함수(PDF)란 정규화(Normalize)된 연속변수에 대한 히스토그램이다.' 확률 밀도란 연속 확률 변수가 일정 구간에 포함될 확률을 확률밀도라고 한다. 이를 함수로 나타내는 PDF는 위의 성질을 만족해야한다. Histogram란, 도수 분포의 상태를 기둥 모양의 그래프로 나타낸 것. 즉 각 데이터들의 갯수를 세어 본 것이다. 여러 예시가 있겠지만, 나는 사진을 좋아해서 위 사진을 참고하면, 포토샵에서 볼 수 있는 히스토그램이다. 이미지의 각 색상, 또는 밝기의 데이터의 범위는 0부터 255까지라고 하면 값이 0인 것, 1인 것, ... , 254인 것, 255인 것의 갯수를 세어서 막대 바 모양으로 그래프를 그린다.(정수만 생각해보자) Normalize란, 다 더했을때 1이 되게 맞춰주는 것 이다. 사진의 해상도가 256x256이라면 각 바의 값을 픽셀 수만큼 나누어 주면 되겠다. 값이 200인 Red의 개수가 100개였다면, 100/65536가 될 것이고 각각의 바를 다 더하면 1이 된다. 이 PDF를 f(value)라고 명명하고, 픽셀의 값이 이산적인 경우(1,2,3, ... ,254,255)에는 이 사진의 어떤 픽셀의 Red값이 200일 확률은? 이라는 질문에  f(200)가 답이라고 할 수 있을 것이다(bar의 가로 길이가 1임). 이렇게 셀수 있고 유한한 변수의 경우에는 확률 질량 함수(probability mass function) 이라고 부르며 아래를 만족해야한다.. ①  f(x) ≥0, ② ∑ f ( x )=1, ③  하지만, 데이터가 연속적이거나 레졸루션( δ ) 을 고려해야한다면 질문자체가 Red값이 200  + δ 일 확률은? 이라고 물어야하고 그 의미를 포함하는 바의 면적을 확률로 답해야 할 것이다.   2. CDF 'PDF를 누적하면 CDF(누적 분포함수)' CDF는 PDF를 누적한 것이다....

중심 경향(Central Tendency)그리고 중간 값의 종류

통계학에서의 중심경향이란 확률분포에서의 중심을 의미하는데 평균, 중심, 중간, 최대빈도 값 등등 어떤 것으로 규정할지 헷갈린다. 가장 익숙한 것이 Mean(평균), Median(가운데), Mode(최빈값)이다. 유추할 수 있겠지만, 아래 예시로 다시 한번 확인해보자. data:      1-1-2-3-4-5-6-6-6-10-10 counter: 1-2-3-4-5-6-7-8-9-10-11 Counter는 어디가 가운데인지 측정하기 위한 '자'라고 생각하면 된다. 각각을 계산해보면,                                   Mean: (1+1+2+3+4+5+6+6+6+10+10) / 11 = 4.9                                    Median: date_6 = 5                                    Mode: 6 참고로 정규분포(normal distribution)의 경우에는 아래와 같은 모양일 것이다.

2015.08: 3D Printed Rototic Hand and Its Remote Control - (리눅스/윈도우즈 소켓 프로그래밍)

립모션을 사용한 로봇손 제어 프로젝트에서 활용하기 위해 소켓 프로그래밍을 구현하게 되었다. 사용자 손 값을 받는 쪽은 윈도우즈 상에 구현되어있고, 로봇 손 하드웨어 제어 부분은 리눅스에 구현되어 있다. 소켓프로그래밍도 기억이 잘 안나고 윈도우즈와 리눅스 사이 통신이 어떻게 되는지 막막했지만, 여러 샘플들이 많이 나와있어서 정리해봤다. 리눅스 서버 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> void error( char *msg ) {   perror(  msg );   exit(1); } int main(int argc, char *argv[]) {      int sockfd, newsockfd, portno = 27015, clilen;        ///socket      char buffer[512];      struct sockaddr_in serv_addr, cli_addr;           int n;      int iter=0;      int data;      int rBuffer[512];      in...

2015.08: 3D Printed Robotic Hand and Its Remote Control - (립모션, 벡터의 내적과 외적)

Processing.org 3년전, 핀란드에서 연구교환 프로그램을 할때, 3D 휴머노이드 로본 손 개발 프로젝트에 참여했다. 즐거운 여름이였다. 나는 비전 기반의 제스쳐 인식 및 액츄에이터 제어부로 값을 전달해주는 기능을 구현했다. 먼저 프로세싱으로 테스트를 해보았다. LeapMotion SDK와 onformative에서 배포하는 LeapmotionP5 라이브러리를 사용했다. 3D 좌표 그리고 내 손 웹캠 -> 키넥트 -> 립모션으로 신기하게 나의 분야가 연결되어가는 맛이 아주 재밌다. 2년만에 다시 해봐서 더 재미있는 것 같다. 립모션 라이브러리는 당시 크게 LeapmotionP5와 LeapmotionforProcessing이 오픈되어 있었던 것으로 아는데, 기본적으로 제공하는, 접근할 수 있는 가능성을 후자가 더 많이 주는 것 같다. 나는 LeapmotionP5로 시작했다. 손목과 팔 사이의 각도를 구하는 도중, 벡터의 내적만 사용하면 부호 없는 각도값만 얻는다.  이때 벡터의 외적과 다른 벡터의 y-basis를 내적하면 부호를 알 수 있다. 외적에는 순서(오른손 법칙)가 있어서, 각도가 양에서 음으로 또는 음에서 양으로 바뀌는 순간 외적벡터의 방향이 바뀌기 때문이다. 그림을 그려보면서 해보면 이해가 쉽다. Leap::Vector xBasisArm = basis.xBasis;           const Vector armV = arm.direction();         const Vector handV = hand.direction();         float wristAngle2 = handV.angleTo(armV) * RAD_TO_DEG;     ...

글: The life guide (2013.10)

인간은 죽음이라는 병에 걸린채로, 타의적으로 태어나 인생이라는 길을 걷는다. 인생은 하루, 하루가 겹겹히 쌓여 이루어진다. 하루는 순간의 연속. 매 순간 선택의 기로에 서야 하는 이 고통스러운 존재는, 수 없이 많은 선택지에서 자신의 답을 선정한다. 그렇다면, '선택'은 내 권한인가? 그렇다고 한다면 '선택지'는 나의 권한인가? 만약, 그렇지 않다고 한다면 다시 한번 '선택은 무엇인가' 에 대해, 다시 생각해 보아야 할 것이다. 인간은 주관적 판단의 동물이다. 나는 그것을 영혼이 있다고 한다. 흔히 사람들은 인생을 '길을 걷는 것'으로 비유 하곤 한다. 인간은 어디로 흐르는 걸까? 시작과 끝을 알 수 없는 이 거대한 흐름 속에서, 우리는 방향을 거슬러 흐름이 시작한 곳으로 돌아가길 시도 할 수 있다. 아니면, 흐름에 몸을 맡기고 하늘을 바라 볼 수도, 깊은 속으로 들어가 잠수를 할 수도 있다. 나는 이 흐름의 시작까지 거슬러 올라가 그 근원이 무엇인지 알 수 없거나, 더 빨리 헤엄쳐 그 끝을 미리 볼 수 없다면,  (- 지워짐 -) 우리는 인생을 마치지 전에 죽음에 대한 자신만의 결론을 내야한다. 우리는 죽음을 생각하는 동물이다. 2013.10.??

글: 13.05.04

용감한 행동을하면 용감한 사람이되고, 솔직한 행동을하면 솔직한 사람이 된다. 행복한 말을 하면 행복한 사람이 되고,  양심 쥐고 놓지 않으면 떳떳한 사람이 된다. 이렇게나 명쾌한 진리가 있는데도 왜 사람은 무너지는걸까 어젯밤 흘려보낸 내 시간이 당신께서 꼭 살고싶었던 시간이였다면, 나는 이 삶에 대해 자격이 없다. 나는 양심을 놓지 않아야 한다.