차원이 문제? 주성분분석? 회의에서 당당하게, 수식없이 알아보자
이전편:
랜덤포레스트가 뭐길래? 회의에서 당당하게, 수식없이 알아보자
라쏘? 로지스틱? 회의에서 당당하게, 수식없이 기초개념부터
인공신경망? 딥러닝? 회의에서 당당하게, 수식없이 알아보자
30명이면 된다고? 회의에서 당당하게, 설문조사를 알아보자.
'차원의 저주'라는 말을 들어보았을 것이다. 빅데이터를 강조하면서 수많은 데이터가 있게 되고 따라서 차원이 늘어나면서 생기는 여러가지 문제점들이 생긴다. 기계학습 분야에서 특성공학feature engineering 의 큰 목적 중 하나가 이런 고차원에 의한 문제점을 해결하기 위한 것이다.
차원의 문제가 무엇인지, 차원 감소에서 많이 쓰이는 주성분분석은 어떤 방식으로 해결하려고 하는 것인지를 살펴보도록 하자.
1) 차원이란 무엇인지, 왜 문제인지
2) 주성분분석의 배경
3) 주성분을 구하기 위한 기계학습의 셋팅 및 해석
4) 주의할 점
순으로 설명해 보도록 하겠다. 차원의 문제는 필연적으로 행렬과 선형대수와 연관이 되어 있다. 최대한 쉬운 설명을 해보도록 하겠다.
차원이란?
라쏘? 로지스틱? 회의에서 당당하게, 수식없이 기초개념부터 편에서 '풀던 문제만 잘 풀게 되는 경우'에 대해서 설명한 적있다. 풀던 문제집만 풀면 1번은 4번, 2번은 5번, … 이런식으로 그 해당 문제집에만 완벽하게 풀 수 있는 상태가 되어버리는 것과 같이, 변수의 수가 늘어나면 실제 모형과 크게 관련 없는 변수들까지도 포함되어 과적합Overfitting 상태를 야기할 수 있게 된다.
이는 머신러닝 분야에서 '차원의 저주'라고 부르는 것들 중 하나이다. 차원이라고 함은 쉽게 생각해서 우리가 문제를 풀기 위해 사용하는 변수의 개수라고 생각하면 이해가 빠를 것 같다.
과적합을 야기하는 것에 더해서 차원이 야기하는 저주가 몇 가지 더 있다.
다중공선성Multicollinearity
다중공선성이란 변수들끼리의 상관관계로 인해서 모형에 문제가 생긴다는 것이다.
상관계수가 무엇인지부터 살펴보자. 상관계수는 상관의 정도를 나타내는 지표로 -1에서 1 사이의 값을 가진다. 1에 가까울 수록 양의 상관(한쪽이 증가하면 다른 쪽이 증가한다), -1에 가까울 수록 음의 상관(한쪽이 증가하면 다른 쪽은 감소한다), 0에 가까울 수록 상관이 없다고 해석하면 된다.
변수1과 변수2의 공분산covariance의 정의는
(변수1-변수1의평균)*(변수2- 변수2 평균)의 합
분산이 (변수와 평균의 차이)2/데이터수 로 계산한다는 것을 기억해보자. 변수1과 2가 완전히 같으면 분산과 똑같다.
평균을 중심으로 같은방향에 있는 변수 두개가 곱해지면 +, 서로 반대방향에 있는 변수들이 곱해지면 -가 된다. 즉, 변수1이 증가할 때 변수 2도 증가하면 분자부분이 +로 증가하고, 하나가 반대로 움직이면 -로 증가한다. 반대로 하나가 증가할 때 나머지 하나의 증가가 거의 없으면 0에 가깝게 나올 것이다.
상관계수는 이 공분산을 -1과 1사이로 만들기 위해
변수1의 표준편차*변수2의 표준편차
로 나눠준것이다
주의할 점은 상관계수가 의미하는 것은 직선(선형) 관계를 의미한다.
따라서 상관계수로는 오른쪽 그림과 같은 비선형 관계는 설명하지 못한다는 것을 염두해 두자.
다중공선성이 있다는 것은, 두 가지 변수가 서로 큰 상관관계를 가진다는 것인데,
예를 들어 예측 = 비중1*변수1 + 비중2*변수2 의 모형이 있다고 해보자. 만약 변수1 과 변수2가 완전히 값이 같다고 생각했을 때(상관계수=1), 비중1,2 를 어떻게 예측해야 할까?
만약 예측 = 1*변수 의 관계가 성립한다면, 과연 비중1과 비중2 를 1/2 씩 해야 할지 하나를 1로 하고 하나를 0으로 해야 할지 결정하기가 어려워진다. 데이터가 조금만 바꿔도 값의 변화가 커질 것이다. 즉, 모형을 적합할 때 답을 찾기가 어려워지고 답 또한 안정적이지 않다는 말이다. 그 말은 예측한 값의 오차가 커진다는 말과 연결된다. 당연히 모형의 해석에도 악영향을 끼치게 된다.
차원이 증가하면 그만큼 상관관계가 높은 변수들이 많이 생길 가능성이 많을 수 밖에 없다
희소한sparse 데이터
희소한 데이터란 대부분의 데이터 값이 0인 데이터를 말한다. 예를 들면, 자연어 처리에서 단어별로 one-hot-encoding(사전의 수많은 단어들 중 문장에 나타난 단어에만 1의 값을 표현)을 하는 경우나, 수많은 영화들 중 사용자가 본 영화에만 1의 값을 표현하는 방법이다.
희소한 데이터가 문제가 되는 이유는, 0이 너무 많기 때문에 쓸 데 없는 데이터의 양이 너무 많아 데이터를 저장하는 자원이 많이 필요하고, 모형을 적합하는 데 계산 시간이 많이 걸린다는 점, k최근접이웃K-NN 방법 등을 사용할 때 각 변수들 사이에 거리가 멀어지고 빈 공간이 많아진다는 점 등 문제가 생긴다.
좋은 모형을 만들려면 충분한 변수의 조합들이 데이터로 있어야 한다. 변수 값이 클 때와 작을 때 경우가 모두 있어야 변수가 미치는 영향을 알 수 있을테니 말이다.
100개의 데이터가 있고 변수가 1개 밖에 없다면, 데이터가 변수의 값들을 충분히 대표한다고 할 수 있을 것이다. 하지만 변수가 10개면, 데이터가 변수의 조합들을 대표한다고 할 수 있을까? 극단적으로 100개의 변수라면 거의 1개씩의 조합들만 나타날 것이다.
라쏘, 릿지 시간에 배운 두 가지 방법을 사용하여 차원의 저주를 풀기도 하는데(이는 관련 없는 변수들을 0으로 또는 0에 가깝게 만드는 방법이다), 다음에서 소개하는 주성분분석Principal Component Analysis 은 주어진 변수의 값들을 모두 사용하면서도, 상관관계가 없는 변수를 새로 만들어 실제 모형에 적합하는 변수의 수를 줄이도록 하는, 많이 사용하는 방법이다.
주성분분석
배경
주성분분석의 배경부터 알아보자.
어떤 값을 예측하기 위해 2개의 변수를 사용한다고 해보자. 그런데 2개의 변수를 가로축과 세로축에 그림을 그려봤을 때 아래 그림과 같이 분포한다면?
예측하고자 하는 값 = 비중1*가로축 값 + 비중2*세로축 값
을 생각했을 때, 예측하고자 하는 값에 상관없이 세로축 값은 예측값에 주는 영향이 가로축 값에 비해 거의 없다는 것을 알 수 있다. 그렇다면 빨간색으로 표현되는 가로축 값만 사용해서 분석해도 무방하지 않을까?
또 아래와 같이 상관관계가 심한 2개의 변수가 있다고 해보자.
위에서 상관관계가 강한 변수들이 있으면 문제가 생긴다는 것을 봤다. 이 상관관계를 없애고 싶은데..
그런데 뭔가 바로 위의 그래프와 비슷한 점이 보이지 않는가?
바로 세로축 가로축을 위 그림과 같이 변환하면, 첫번째 그래프와 동일한 모양이 되면서 상관관계가 없어진다. 그다음 첫번째 예에서와 같이 새로운 가로축에 해당하는 값들을 변수로 활용하면 우리의 목적을 달성할 수 있을 것이다.
이런 착시그림을 축을 회전해서 보면, 정보는 안없어지지만 쓸데없는 관계들이 제거되어 더 잘보인다.
비스듬히 있는 사람들을 가로축으로 바꿔서 가로축을 기준으로 보면 해석이 더 잘되는 것을 볼 수 있다. 이 것이 주성분 분석과 비슷하다고 할 수 있을 것이다.
바로 이 것이 주성분분석이 해결하고자 하는 문제이다. 그렇다면 이런 관계들을 어떻게 찾고 조정할 수 있을까?
분산을 최대로 하는 선형결합
주성분분석의 목적을 보면, '분산을 최대로 하는 변수들의 선형결합'을 찾는 것이다.
선형결합이라는 것은 쉽게 말해서 직선 모양을 의미한다.
새로운변수 = 비중1*변수1 + 비중2*변수2 + ..
처럼 변수들이 상수(정해진 수)와 곱하고 서로 더해서 하나의 직선 모양을 가지는 것이다. 이 중에서 비중1,2,.. 를 찾아야 한다. 위의 그림에서 하나의 직선이 새로운 축의 역할을 한다는 것을 보면 선형결합을 찾고자 하는 의도는 충분히 이해가 갈 것이라 생각한다.
변수가 2개 일때, 원래의 가로축은 (비중1,비중2) = (1,0) 세로축은 (0,1) 이다. 1*변수1+0*변수2 = 변수1, 0*변수1+1*변수2=변수2 가 된다. 즉, 여기서 비중들을 찾는다는 것은 새로운 축을 찾는다는 것이고, 새로운 변수는 그 축에 해당하는 변수값을 찾는 의미가 된다. (그림으로 보는 것은 아래 해석 부분 참고)
두번째로 왜 분산일까? 분산은 변수들이 가지고 있는 정보의 양이라고 생각할 수 있다. 변동성이라고 하면 좀 더 와닿을 수도 있겠다.
변수자체가 정보를 모두 가지고 있는 1→1, -1→-1 을 생각해 보자.
0.5→1, -0.5 → -1 인 변수 0.5, -0.5 는 분산이 적다. 그만큼 *2 라는 정보를 더해야 원하는 값을 얻을 수 있다. 극단적으로 0→1, 0→-1 인 분산이 0인 변수가 있으면, 정보가 아예없어 예측을 할 수 없는 정도가 된다.
새로운 축을 찾는다는 의미에서 보면, 기존의 가로축보다 새로운 가로축에서 값들 사이의 거리가 더 멀어진다는 것을 볼 수 있다.
즉, 데이터가 퍼지는 정도인 분산의 관점에서 주主principal 성분component을 찾고자 하는 것이다.
* 예시 2개의 변수, 일직선으로 표현될 때, 굳이 변수 2개 써야 됨?
* 변수들의 분산을 최대로 하는 선형결합을 찾는다
* 두번째 부터는 앞에서 구한 선형결합과 상관관계가 없는 (corr=0) 조건을 추가한다.
* 선형결합 : 변수 두개가 거의 같으면, 하나만 써도 된다.
* 왜 분산?
* 분산은 정보의 양이라고 생각할 수 있다.
* 변수 하나만 생각해 보자. 변수의 분산이 작다면 평균으로 줄여서 해도 무방하다.
* 변수 두개면, ?
구하는 법
위의 설명에서 특이할 만한 점이 발견되지 않았는가? 바로 목표로 하는 예측값의 존재가 없다는 것이다. 이는 주성분분석이 예측값이 없이 변수들만으로 내용을 학습하는 비지도학습 방법의 하나이기 때문이다.
머신러닝 방법 중 하나이기 때문에 똑같이 모형과 목적함수를 가진다. 모형은 위에서 설명했듯이 변수들의 선형결합, 목적함수는 분산을 최대화하는 것이다. 모형과 목적함수에 대해서 익숙하지 않으면 라쏘? 로지스틱? 회의에서 당당하게, 수식없이 기초개념부터 을 확인하자. 회귀분석의 경우 모형은 똑같이 변수들의 선형결합이었는데, '지도학습'이기 때문에 예측값과 실제값과의 오차를 최소화하는 것을 목적함수로 했었다.
다시 한번 정리하면,
모형 : 선형결합
새로운 변수 = 비중1*변수1 + 비중2*변수2 + …
목적함수 : 분산을 최대로
이렇게 첫번째 주성분을 구하고 나면, 두번째부터는 첫번째 주성분과 상관관계가 0인 제한조건을 추가한다. 공선성을 방지하기 위해 상관관계가 없는 것을 찾기 위한 것이다. 또 보통 비중들의 제곱합이 1인 것을 제한조건으로 추가한다. (가로축, 세로축인 (1,0), (0,1) 이 길이가 1인 것과 같은 이치이다) '일반적'으로는 변수 수만큼의 주성분(새로운 변수)들을 찾을 수 있다.
구하는 법 역시 함수를 최대로 하는 값을 찾는 것이므로 미분으로 풀이가 가능하다.
* 하나의 모델링으로 해석할 수 있다. 모형은 선형결합, 목적은 분산을 최대화하는 것
* 다른 모형에 사용되긴 하지만, 하나의 기계학습 모형 중 하나
* 비지도 학습 방법
* 목적함수 : 분산 ( 선형결합 )
* 회귀분석에서는 오차를 최소화하는 것으로 썼었다.
* 두번째 부터는 상관관계 = 0 인 조건을 추가한다
* 상관관계가 없는
* 보통 선형결합에서 계수들의 제곱합이 1인 것을 제한조건으로 추가한다
* 좋은 성질이 생김 (해석에서 설명)
* 구하는 방법 : 역시 미분을 이용해서 구할 수 있다.
해석 및 응용
구하는 법의 정의에서 봤듯이 첫번째 주성분부터 순서대로 분산을 가장 많이 설명한다. 변수의 수를 줄이기 위해서 이 중 몇 개만 사용하면 되는데, (n-번째까지 주성분의 분산)/전체분산 을 그리는 스크리scree 그래프에서 적당한 지점을 골라서 사용한다. 어떤 책에서는 그래서 이 방법을 이론이라기 보다는 '기술art'에 가깝다고 설명한다. 주관이 많이 개입된다는 것이다.
첫번째 주성분(새로운 변수)이 원래 전체 분산의 50% 값을 가지고, 두번째는 20%, 세번째는 5%, … 이런식이면 70% 의 분산을 가지는 두번째 주성분까지만 사용하는 식이다.
또 2개의 주성분만을 사용해서 2차원 그래프로 표현하는 방법도 사용한다. 이때는 다른 모형에 사용한다기 보다는 데이터 '탐색'의 한 방법으로 사용하는 예이다.
처음 주성분분석의 배경에서 데이터 차원의 '축axis'를 회전하는 의미를 가진다는 것을 보았다.
변수가 2개일 때 원래 기존의 가로축과 세로축은 (비중1,비중2)가 (1,0), (0,1)의 의미를 가진다.
비중1, 비중2 를 구한다는 것은, 새로운 축의 방향 (비중1, 비중2) 방향을 구하는 것이고,
새로운 변수는 그 새로운 축 상에서의 값이라고 할 수 있다.
기존의 (변수1,변수2) 의 (비중1, 비중2) 방향으로의 정사영(projection, 직각으로 내린 길이)으로 생각해도 되겠다.
분산을 최대로 하는 선형결합과 그래프 공간 상에서 축axis의 의미를 가지는 관계를 자세히 알려면 먼저 행렬의 고유값eigenvalue과 고유벡터eivenvector에 대해서 알아야 한다.
* 첫번째 주성분 부터 순서대로 분산을 가장 많이 설명한다.
* 기존의 분산을 설명하는 순서에서 몇 번째까지를 사용하여 변수로 사용한다.
* 2개만 사용해서 그래프로 표현하는 방법도 사용한다.
* 신기하게도 주성분들의 값은 행렬의 고유값에 대응하는 고유벡터의 크기순으로 나온다.
* 고유값과 고유벡터란?
* 또 직선에서 수직 거리를 최소화 하는 직선을 구하는 문제이기도 하다. (처음 예제에서 처럼)
* 기존의 x1-x2 축을 회전해서 새로운 축으로 바꾸는 것과 같다.
* 착시 그림
* 처음에 그냥 봤을 때는 엉망이지만, 각도를 바꿔서 보면 clear해진다.
* 원래의 정보가 조금 없어지긴 하지만, 원래 정보는 없어도 되는 정보였다.
* 가장 분산이 큰 방향을 첫 주성분으로, …
주의할점
보통 주성분분석은 처음에 설명한 분산을 최대화하는 것이 아닌 공분산행렬의 고유값,벡터를 이용해서 계산되기 때문에 분산이 최대로 되는 방향으로 설명이 되려면 먼저 변수별로 평균을 0으로 맞춰주는 중심화centering 이 필요하다. 값 변수의 값에 변수의 평균값을 빼주는 사전작업을 해주어야 하는 것이다.
또한 분산이 목적함수인 것에서 보듯이, 측도scale 에 민감한 성향을 가진다. 즉, 키를 m로 표시하느냐 cm로 표시하느냐에 따라 분산의 크기가 달라지기 때문에 영향을 받을 수 밖에 없는 것이다. 따라서 각 변수의 값을 표준편차로 나눠서 분산을 1로 맞추는 scaling 작업도 필요하다. 물론 문제에 따라서는 scaling 작업은 필요하지 않을 수 있다. 변수의 특성과 문제의 목적에 따라서 결정해야 할 일이다.
라쏘, 릿지와 차이점
라쏘? 로지스틱? 회의에서 당당하게, 수식없이 기초개념부터 에서 변수선택법으로 라쏘, 릿지 회귀에 대해서 알아보았다.
라쏘, 릿지 회귀는 변수의 영향을 0에 가깝게(또는 아예 0으로) 만드는 방법이고, 주성분분석은 기본적으로 모든 변수를 선형결합에 반영하기 때문에 변수선택 방법은 아니다.
가장 큰 차이점이라고 할 수 있는 것은, 라쏘나 릿지 회귀에서는 정답 데이터가 포함되는 지도학습 방법에 사용되는 것이고, 주성분분석은 정답 데이터가 없이 변수들 간의 관계만을 보는 비지도학습 이라는 것이다. 예측을 더 잘하기 위한 방법과 변수의 특성을 보전하는 방법의 차이라고 생각해도 좋을 것 같다.
또한 주성분분석은 모형에 사용되는 주성분들이 무상관uncorrelated인 것도 차이점이라고 할 수 있다.
Key Takeaways
지금까지 차원의 문제, 그리고 이를 해결하기 위한 주성분분석에 대해서 살펴보았다.
1) 차원이 늘어남에 따라 여러가지 문제가 생긴다. (과적합, 다중공선성, 회소행렬 등)
2) 주성분분석은 분산을 최대로 하는 선형결합들을 찾는 것이다.
3) 모형에 사용되는 주성분들이 상관관계가 없어 다중공선성 문제를 해결할 수 있다.
4) 선형결합들 중 원래 변수들의 분산을 가장 근접하게 설명하는 개수만큼 다른 모형 적합을 위해서 사용한다.
5) 중심화centering이 필요하고, 측도scale 에 민감하다.
차원이 크면 여러가지 문제가 생길 수 있기 때문에, 분석가와의 미팅에서 차원축소를 위해 어떤 기법들을 사용했는지, 왜 이런방법을 사용한 것인지 의문을 가져보도록 하자.
Reference
PCA
matrix thing
An Introduction to Statistical Learning, Gareth M. James 外, Springer, 2014
The Elements of Statistical Learning, Trevor Hastie 外, Springer, 2001
Pattern Recognition and Machine Learning, Christopher M. Bishop, SPRINGER, 2007
centering안된 PCA
고유값
More
2021/09/24 15:30 | |
2020/06/18 20:34 | |
2020/06/07 23:03 | |
2020/06/04 00:30 | |
2020/05/28 19:29 | |
2020/05/12 18:03 | |
2020/05/07 18:27 | |
2020/05/01 01:54 | |
2020/04/29 19:52 | |
2020/04/20 20:12 | |
2020/04/17 00:23 | |
2020/04/15 16:21 | |
2020/04/11 10:41 | |
2020/04/08 15:49 | |
2020/04/01 18:43 | |
2020/04/01 09:55 | |
2020/03/21 22:43 | |
2020/03/20 20:53 | |
2020/03/15 20:11 | |
2020/03/07 16:35 | |
2020/03/07 13:46 | |
2020/03/02 01:09 | |
2020/02/29 13:52 | |
2020/02/29 13:52 | |
2020/02/29 13:52 | |
2020/02/29 13:52 | |
2020/02/29 13:52 | |
2020/02/29 13:49 | |
2020/02/16 18:11 | |
2020/02/06 21:58 |
Discussion