이번 포스팅부터 조금 Data Mining스러워진다. 재밌어보이는 plot도 많이 나올 거고 수식도 많이 나올 거다. 그리고 여기서부터는 python code가 조금씩 나올수도 있다. 사실 이 블로그는 애초에 IT 블로그였고, 기본적으로 컴퓨터를 공부하는 사람을 대상으로 쓰고 있었기에 python code가 나오는 것이 사실 이상한 것은 아니다. 그래도 글의 논리 자체가 python code에 너무 취중해있지는 않을 것이기 때문에(python은 오로지 실험용) 컴퓨터 비전공자들도 읽을만 할 거라고 생각한다.


아무튼 linear regression 시작해보자. 우선, linear라는 말이 무엇인지 알아보자. 직선이다 직선. 곡선이 아니라 직선이다. 예전에 linear algebra 포스팅할 때도 linear의 개념에 대해서 이야기했었다. linear는 아무튼 직선이다. linear 하다 라는 말은 직선이다~ 그런말이다.


Regression은 회귀라고 우리 말로 번역이 되는데, 사실 회귀라고 해도 무슨 말인지 잘 모른다. 수학에서 regression은 x와 y와의 관계를 나타내는 선. 이런 개념으로 쓰이나보다. 따라서 linear regression analysis는 x와 y와의 관계를 직선으로 나타내어 분석을 하는 방법이다.


우선 아래의 sample data를 보자.

data가 위의 그래프처럼 분포가 되어있다. 대충 보니까, x가 증가하니까 y도 증가한다. 대체적으로 그렇다. 그러면 대충 선을 하나 그어보자.


얼추 맞는 것 처럼 보인다. 그런데 이 선은 직선이니까, y = a + bx의 형태로 나타낼 수가 있다. 그러면 이와 같이 분포가 되어있는 모든 data들에 대해서 y = a + bx라는 식을 나타낼 수 있다면 얼마나 좋을까? 그것이 바로 linear regression analysis이다.


그러면 여기서 새로운 용어 하나를 이야기해보자. best-fit. 옷 입을 때, fitting room이라고 하고 fit이 좋다 라고 한다. 그 때의 fit이다. 최고로 잘 맞아 떨어지는 linear line이라는 뜻이다. 그래서 우리는 y = a + bx라는 best-fit을 구하는 공식을 생각해보려고 한다.


그림 참고: http://mathworld.wolfram.com/LeastSquaresFitting.html


best-fit을 구하는 가장 기본 원리는 위의 그림에서 d의 합을 최소한으로 하는 방법을 찾는 것이다. d는 vertical offset을 이용하여 구하는 방법과 perpendicular offset을 이용하여 구하는 방법이 있는데, 보통 vertical offset이 더 많이 쓰인다. 왜냐하면 그것이 보통 더 정확하다고 한다. 그래서 이 포스팅에서도 vertical offset을 이용하려한다. d를 구하는 공식은 아래와 같다.


d = real y data - expected y data

= real y data - (a + bx) (because, expected y data = a + bx)


여기서 d를 distance의 약자로 d로 써놨는데, 사실 이는 쉽게 설명하기 위함이다. 원래는 이 것을 error(차이)의 e나 residual의 R로 표현한다. 앞으로는 R로 표현하겠다. 아무튼 이 값은 때로는 양수가 될 수도 있고 음수가 될 수도 있다. 예를 들어, x1, y1을 보자. x1일때의 expected y data는 a + bx1이고 이는 실제 y1보다 크다. 따라서 d는 음수이다. 그런데 x2, y2를 보자. x2일때의 expected y data는 a + bx2이고 이는 실제 y2보다 작다. 따라서 R은 양수이다. R의 합을 최소한으로 구하는 방법을 찾고 싶은데 R이 양수와 음수가 되면 우리가 원하는 값을 찾는데 방해가 된다. 그래서 우린 R을 제곱하여 음수가 될 수 없게 한다.


R^2 = (real y data - expected y data)^2


자 이제 우린 R^2을 몇 개 가지고 있지? data 개수만큼 가지고 있다. n개의 tuple에 대하여 x1부터 xn까지의 data들에 대하여 R^2를 구했으니까 n개 가지고 있다. 이걸 수식으로 나타내면 아래와 같다.


수식 참고 : http://mathworld.wolfram.com/LeastSquaresFitting.html


R^2 수식을 최소한으로 만드는 a와 b를 우리는 찾아야 된다. 그 a와 b는 y = a + bx에서의 a와 b임을 잊지 말자. 아무튼 그 a와 b를 찾으면 우리는 best-fit을 찾게 되는 것이다. 그 최소값을 찾기 위해서 우리는 a와 b에 대하여 편미분을 하여 각각을 0으로 수렴시킨다. (이 부분은 미분적분을 배우지 않은 사람들은 이해하기 힘들 것이므로 미분적분을 배우지 않은 사람들은 젤 밑에 있는 a와 b의 결과만 보고 이해하는 것이 나을 수도 있다.) 이 두 식을 행렬으로 나타내면 아래와 같다

수식 참고 : http://mathworld.wolfram.com/LeastSquaresFitting.html


a와 b를 구하기 위해서 최초의 행렬에 역행렬을 곱하여 a와 b를 유도시켰다. 이 식이 우리가 원하는 a와 b를 구하는 식이다. 이 식을 실제로 젤 위에 있었던 sample data에 적용시켜보자.

실제로 이렇게 나오는지 python을 통해 확인해보자.


우와 반올림하면 정확히 일치한다. 이제 우리는 x와 y 두개의 데이터를 주면 그것에 대한 a + bx best-fit을 구할 수 있다. 그런데 여기서 궁금한 점이 있다. a + bx가 얼마나 맞는지 평가를 하는 수치를 알고 싶다는 것이다. a + bx가 대충 드러맞는 dataset도 있을 것이고 완벽하게 드러맞는 dataset도 있을 것이다. 그 두 개를 구분하기 위한 평가방법이 있다. correlation coefficient이다. 근본적으로 correlation coefficient를 어떻게 유도하는지를 알고 싶으나, 그 방법은 잘 모르겠으므로 생략하자. correlation coefficient 구하는 공식은 아래와 같다.

수식 참고 : http://mathworld.wolfram.com/LeastSquaresFitting.html


이 값은 완벽하게 맞아 떨어질수록 1에 가까워진다. 위의 python 돌린 그림을 보면 correlation coefficient가 0.99996가 나왔는데 1과 아주 가까우므로 매우 훌륭하게 fit하고 있다고 볼 수 있다. Python에서 best-fit을 구하여 dataset과 같이 보면 아래와 같다.

점선으로 표시된 선이 우리가 구한 Best-fit이며 y = 0.9992x - 2.0007 의 그래프이다.

linear regression에 대해서 포스팅은 여기서 마치려고 한다. 다음 포스팅은 multi linear regression이다. 기본적으로 linear regression이지만, 2개가 아닌 여러 개의 attribute을 통해 linear regression을 알아볼 예정이다.

'Data Mining' 카테고리의 다른 글

[Data Mining] Logistic Regression  (3) 2015.12.20
[Data Mining] Multi linear regression  (4) 2015.12.19
[Data Mining] Basic of Statistical data  (0) 2015.12.18
[Data Mining] Basic of Data  (1) 2015.12.18
시작하며...  (0) 2015.12.18
Posted by 빛나유
,

이번 포스팅은 말 그대로 통계에 대한 가장 기본적인 부분을 살짝, 아주 살짝 집고 넘어갈 것이다. 그 중에는 중학교, 아니 초등학교때 배운 내용들도 있을 것이고, 배우진 않았지만 너무나도 당연스러운 내용들도 있을 것이고, 대학교 때도 안 배웠던 내용도 있을 것이다. 그런데 그렇게 긴장하지 말았으면 한다. 대학교 때도 안 배운 내용도 그렇게 어려운 내용은 아니다.


우선 middle value를 구하는 방법이다. middle value를 구하는 방법은 여러가지가 있는데 가장 대표적인 것이 무엇이 있을까? 그렇다. 평균(mean)이다. "너 이번 기말 평균 몇이야?" 고등학교때 중학교때 진짜 많이 물어본 것들이다. 아래와 같이 데이터가 있다고 해보자. mean은 다 더하고 개수(10개)로 나누면 된다.


100 90 80 70 70 80 80 90 95 100


mean은 85.5이다. 그렇다면 mean의 단점은 뭘까? 아주 분명하다. data에 아주 다른 값들을 전혀 고려를 안한다는 것이다. 실제로 미국 어느 고등학교의 특정 년도에 졸업생들 평균 연봉이 아주 어마어마했다고 한다. 정확한 액수는 기억이 안나지만 일 안하고 몇 대대 손손은 먹고 살만한 돈을 1년에 벌드라. 어떻게 그럴 수 있었을까? 거기에 빌게이츠가 있었다. 그래서 그랬다. 그 한 명 때문에 mean값이 그렇게 높아진 것이다. 이 문제를 해결하기 위한 middle value 계산법이 medium이다. 중간값이다. 위의 data를 조금 변형해보자.


10 90 80 70 70 80 80 90 95 100


젤 처음 100점을 10점으로 바꿔봤다. mean값은 76.5로 뚝 떨어진다. 그런데 median은 별로 차이 없다. median을 구하는 방법은 간단하다. sorting을 한 다음에 가장 중간값을 찾으면 된다. 위의 data를 sorting을 하면 


10 70 70 80 80 80 90 90 95 100


가장 중간값이 있으면 그것이 median이고, 위와 같이 가장 중간값이 두개가 있으면(80, 80) 그것의 mean값이 median이다. 위의 경우 가장 중간값 두개가 똑같이 80이므로 80이 중간값이다. median은 말도 안되는 하나의 데이터에 의해서 중간값이 변형되는 것을 막아줄 수 있다. 만일 빌게이츠의 고등학교 같은 년도 졸업생들의 연봉은 median으로 계산되어야 더욱 더 정확한 값을 가질 수 있다.


또 다른 중간값 구하는 방법은 mode가 있다. 이 방법은 개인적으로는 별로 그렇게 효과적인 방법은 아니라고 생각하나 아무튼 소개한다. 가장 많이 발생한 값이 mode이다. 


10 70 70 80 80 80 90 90 95 100


여기에서는 80이 3번 등장해서 젤 많이 등장했는데, 따라서 mode는 80이다. 아주 간단하다. 개인적으로는 mean이나 median 값을 더 선호한다. 자 이제 middle value이야기는 그만하고 분산과 표준편차 이야기를 해보도록 하자.


분산을 구하려면 우선 평균을 구해야 한다. 위의 data들을 아래의 표로 바꿔놨다.



분산은 위의 표에서 x - mean값들의 평균이다. 이것을 수식으로 표현하면 아래와 같다. 조금 꺼려지는 수식이 나타나지만 그래도 잘 보면 이해할 수 있을 거다.

위의 식은 앞으로의 포스팅에도 가끔 사용될 예정이니 잘 이해해두기 바란다. 위에서도 설명했듯이, 분산에 루트를 씌운 값이 표준 편차이다. 이 값들이 설명하는 바는 무엇일까? 크면 클 수록 data들이 평균과는 멀리 떨어져있다는 뜻이다. 막 이곳 저곳으로 분산되어있다는거다.


여기서 이제 Quantile plot 이야기를 하려고 한다. quantile plot은 쉽게 말해서 특정 data보다 작거나 같은 확률을 말해준다. 위의 data를 통해 quantile plot을 만들어보도록 해보자.


값이 80보다 같거나 작을 확률은 0.6 이다. 이것을 plot으로 나타내면 아래와 같다.

x축 80일때의 y축값이 0.6 이다. 위의 표에서의 값과 같은 값이다.

이번 포스팅은 여기까지다. 사실은 covariance 부분까지도 설명을 여기서 끝내려고 했는데, 그거는 다음 포스팅에서 설명하는 것이 더욱 효과적일 것 같아서 살짝 미뤄두려고 한다. 다음 포스팅은 data mining 가장 기초에 해당하는 linear regression에 대해서 공부해보려고 한다.


'Data Mining' 카테고리의 다른 글

[Data Mining] Logistic Regression  (3) 2015.12.20
[Data Mining] Multi linear regression  (4) 2015.12.19
[Data Mining] Linear Regression  (0) 2015.12.18
[Data Mining] Basic of Data  (1) 2015.12.18
시작하며...  (0) 2015.12.18
Posted by 빛나유
,

우선 시작부터 Data Mining을 본격적으로 후벼파면 안된다. 몸살난다. 워밍업으로 가장 기본적으로 Data에 대해서 이야기해보려고 한다. 어찌 보면 이정도는 안 하고 넘어가도 되지 않아? 라고 생각될 정도로 기본적인 내용이지만, 그래도 한다.


우선 Data를 말할 때 사용하는 용어들부터 정리하고 넘어가자. 보통 data는 아래와 같이 나타난다.


39, State-gov, 77516, Bachelors, 13, Never-married, Adm-clerical, Not-in-family, White, Male, 2174, 0, 40, United-States, <=50K


Data Mining 쪽에서 공부용으로 많이 쓰이는 data으로 adult.data로 구글 검색하면 아주 쉽게 구할 수 있는 data이다. 그 data의 가장 첫 줄을 위에 예시로 보여준 것이다. 이런 data는 보통 한 줄이 아니겠지? 여러 줄이다. 여러 개가 있으니까 여러 개가 하나로 묶여있는 집합이다. 집합은 영어로 set이다. 그래서 보통 이러한 한 묶음의 data를 dataset이라고 한다. 위의 data 예시처럼, 한 줄을 우리는 row, tuple, record 라고 부른다. 보통 record보다는 row, tuple을 더욱 더 자주 쓴다. 그럼 하나의 row에서 각각의 데이터. 즉, 39!! State-gov!!! 77516!! 등등은 무엇이라고 부를까? column, attribute, feature라고 부른다. 보통 column이나 attribute이라고 더욱 더 자주 쓰인다. 그렇다면 이제 우리는 하나의 dataset에서 모든 data를 접근할 수 있게 된다. 몇 번째 tuple의 몇 번째 attribute 이런 식으로 접근 가능하다.

자 이제부터 이야기할 내용은 data type이다. 


기본적으로 숫자로 된 data들이 있다. numeric data라고 한다. 아주 쉬운 이야기이다. 길이, 무게, 좌표, 등등의 data들은 숫자로 표현하면 되겠지? 그렇다 그런 걸 numeric data라고 한다. 


data들을 보면, 가끔은 단어로 된 data들도 있다. 이런 것은 보통 이름이 명시되어 있다고 하여 nominal data라고 한다. 예를 들어, 스마트폰 dataset에서 제조사를 명시하는 attribute이 있다고 하자. 그 attribute에는 어떤 data들이 들어있을까? Samsung, LG, Apple, Sony 등등의 회사명이 적혀있을 것이다. 그런 것들 모두 nominal data이다. 그런데 nominal data라고 해서 전부다 같은 종류의 nominal data는 아니다. 위에서 예를 든 Samsung, LG, Apple, Sony들은 따지고 보면, categoric data이다. 회사명별로 분류가 되어있으니까. 그리고 이런 경우도 있다. Yes or No. Large or Small. data가 둘 중에 하나인 경우이다. 이런 경우에는 binary data라고 한다. 0 아니면 1이다. 이거 아니면 저거다. 그 말이다. 그리고 어떤 경우에는 nominal data이기는 한데, numeric data처럼 data를 비교할 수 있는 경우가 있다. 예를 들어, 성적 data의 경우, 평점이 B, B+, A, A+ 이런 식으로 주어진다. 분명히 nominal data이지만 순서가 존재한다. B가 젤 못한 거고,  A+가 젤 잘한 거다. 이런 data를 순서가 정해졌다고 하여 ordered data라고 한다.


우와 거의 3년간 블로깅을 하면서 이렇게 없어보이는 포스팅은 진짜 처음인 것 같다. 그래도 이번 그리고 다음 포스팅까지만 그럴 것 같다. 다음 포스팅은 가장 기본적인 통계 data들에 대해서 이야기해보려고 한다. 다음 포스팅도 그렇게 어렵지는 않을 듯 싶다.

'Data Mining' 카테고리의 다른 글

[Data Mining] Logistic Regression  (3) 2015.12.20
[Data Mining] Multi linear regression  (4) 2015.12.19
[Data Mining] Linear Regression  (0) 2015.12.18
[Data Mining] Basic of Statistical data  (0) 2015.12.18
시작하며...  (0) 2015.12.18
Posted by 빛나유
,