안녕하세요

 

오늘은 수치형 데이터와 범주형데이터의 혼합형데이터를 clustering하는 모델을 사용해보려고합니다.

우리가 잘 알다시피, 

k-means는 수치형데이터만 이루어진 데이터에서 동작하고, k-modes는 반대로 범주형데이터들에서만 작동하도록 되어있습니다.

하지만, k-means모델의 경우 범주형데이터를 핫코딩하여 모델을 구사할 수 있지만 이또한 정확하지 않습니다.

 

그래서 둘을 혼합하여 사용할 수 있는 k-prototype clustering을 시도할 것입니다. 

 

R의 'clustMixType' 패키지내에 kproto함수를 사용할 것입니다.

함수에 대한 설명은 아래에 있습니다.

 

www.rdocumentation.org/packages/clustMixType/versions/0.2-5/topics/kproto

 

kproto function | R Documentation

Looks like there are no examples yet.

www.rdocumentation.org

또한, kproto와 k-means를 사용했을때 두 모델의 차이가 없는 경우에 대해 설명해놓은 페이지를 링크로 첨부하겠습니다.

 

rpubs.com/ecosang/dsdsfgksjdgfser

 

RPubs - kproto_vs_kmeans

 

rpubs.com

 

 

모든 데이터 분석에 앞서 데이터 전처리 과정을 알아보자!

 

1. 범주형 특성 (categorical)

: 값을 분류할 수 있고 값에 순서가 없는 경우

 

함부로 범주형 특성을 수치형 특성으로 바꾸는 경우 '순서'의 의미가 들어갈 수 있음을 주의하자

하지만 2진 특성(1/0)으로 치환은 가능하다. : 이런식으로 처리된 변수를 가변수(dummy variable)이라고 한다.

 

2. 결측자료 다루기

 

- 결측의 두가지 사용

1)  없는 것이 의미가 있는 경우: informative 결측치

 

수치형인 경우 해결 방법 => 일반적인 열과 동일하게 사용하기 위해서 변환, 예를 들면, -1이나 -999와 같이 편향된 값을 사용해서 입력 (왜냐하면? 수치는 순서를 내포하기 때문에 값의 중간값을 쓰는것을 원치 않을 것이다.)

 

범주형인 경우 해결 방법 => 결측된 값을 위한 새로운 열을 만든다. 

 

2) 없는 것이 아무 의미가 없는 경우

해결 방법 => 적절한 값으로 imputation한다.

수가 매우 작을때는 무시하는 것이 좋다.

 

시간순으로 정렬된 데이터셋의 경우 해결 방법 => 이전 사례 값으로 바꾼다.

 

데이터가 단순한 분포를 따르는 경우 해결 방법 => 열의 평균으로 대체, 이와중에 이상점을 제외하고자하면 중위수로 대체

 

 

3. 간단한 특성추출

 

예를 들어, 타이타닉호의 객실번호 (ex. C134)가 승객들의 대피와 관련이 있다면 이를 문자는 => 범주형, 숫자는 => 수치형으로 추출을 하여 정보를 살릴 수 있다.

 

feature engeneering (특성공학)

 

4. 데이터 정규화

 

일부 머신러닝 데이터는 normalized(정규화되어)있어야한다.

한 특성에 가중치를 주고 싶지 않을 것이다.

해결 => 0~1이나 -1~1사이의 값으로 정규화를 해준다.

 

정규화하는 factor를 남기고, 정규화된 값을 동시에 남겨 어떤식으로 정규화를 했는지 기억하자!

 

5. 데이터 시각화

 

*훈련집합이 대표성을 띄는지 알 수 있고, 사례가 부족한 유형도 알 수 있다!

*시각화에서 특성과 반응변수간의 명확한 관계가 보이지 않는다고 쉽게 제거해서는 안된다.

 

1) 모자이크 분포도 (특성:범주형, 반응변수:범주형)

2) 상자 분포도 (수치형, 범주형)

3) 밀도 분포표 (범주형, 수치형)

4) 산점도 (수치형, 수치형)

 

 

 

 

데이터분석을 위해 데이터 입력 방법을 알려준다.

 

1. 어떤 특성의 데이터를 포함해야 하는가?

- 특성값이 예측할 때 알 수 있는 변수여야한다.

- 특성은 수치형 또는 문자형이어야한다.

- 목표변수와 관련있다고 생각되는 특성들만 입력하는 것이 좋다.

 

* 머신러닝의 정확도가 떨어지는 경우

- 상관 없는 변수라고 생각했지만 상관이 있는 변수를 제거하는 경우

- 관련있다고 생각하는 변수를 모두 넣어버려 잡음이 커지는 경우

- 목표변수와 관련이 있음을 이미 알고 그런 집합만 넣었을 때 예측에 도움되는 그밖의 변수들이 제거되는 경우

 

이런 문제의 해결 방법은

=> 목표 변수를 예측하는데 도움이 된다고 생각되는 모든 특성을 포함시켜 모델을 만들고 모델의 정확도가 충분하면 중단한다.

=> 그래도 정확도가 충분하지 않으면 목표와 관련성이 낮은 특성들까지 확장하여 모델을 제작하고 정확도를 평가한다. 충분하면 중단한다.

=> 아직도 충분치 않으면 그 상태에서 특성 선택 알고리즘을 사용해 가장 도움이 되는 부분집합을 선택한다. 

 

2. 훈련 데이터의 양은 어떻게 정하는가? 

=> 정확히 말하기 어렵지만 몇가지 요소를 고려해볼 수 있다.

 

- 문제의 복잡성: 입력특성과 목표변수의 관계가 단순선형인가 비선형인가

- 정확도를 위한 요구사항: 정확도가 높은 모델을 만들려고 할수록 많은 데이터가 필요하다.

- 특성 공간의 차원: 입력특성이 적으면 많은 것보다 적은 데이터가 필요하다.

 

원칙: 훈련집합이 클수록 평균적으로 모델이 정확해진다.

 

3. 훈련 집합이 충분히 대표성을 띄는가?

=> 시각화를 통해 대표성을 띄는지 검토해야 한다.

 

약한 관계 + 약한 관계 => 강력한 예측변수

 

로지스틱은 입력값과 출력값의 관계가 복잡하게 표현될때 제한될 수도 있다.

 

매개변수모델 , 비매개변수모델 ? 

 

매개변수모델은 예측값과 설명변수의 관계를 잘 알고 있을 때 사용하면 효율적이다. 

또 이러한 선형 알고리즘은 설명하기 쉽고 큰데이터셋을 다루기 유용하면서 작업속도가 더 빠른 모델이다.

비매개변수 머신러닝 알고리즘은 데이터에서 복잡한 경향과 구조를 자동으로 발견해낼 수 있는 더욱 유연한 모델이다.

 

데이터 처리: 결측치가 있다면 왜 결측치가 났는지 모르지만 결측치를 제거할 수 있어야하며, 최소한 오해의 소지가 있는 데이터에서 특정 알고리즘이 얼마나 잘 작동하는지 알아내야한다.

 

특정 알고리즘은 쓸데없는 특성을 알아서 제거하지만 대부분의 알고리즘이 그런 특성을 제거했을때 정확도가 더 높게 나온다. (그렇지만 귀중한 정보가 보기에 쓸데없어 보이는 특성으로 추출될 수 있다는 점도 명심해야한다.) 

 

feature engeneering (특성 공학): 수집된 데이터에서 값을 추출하고 실제로 모델을 구축하기 전에 모델의 특성을 추가하는 작업들

 

 

 

+ Recent posts