혼합 숫자 및 범주 형 데이터에 대한 K- 평균 군집


133

내 데이터 세트에는 많은 숫자 속성과 하나의 범주가 있습니다.

, 말 NumericAttr1, NumericAttr2, ..., NumericAttrN, CategoricalAttr,

여기서,이 CategoricalAttr세 개의 가능한 값 중 하나를 취 CategoricalAttrValue1, CategoricalAttrValue2또는 CategoricalAttrValue3.

Octave https://blog.west.uni-koblenz.de/2012-07-14/a-working-k-means-code-for-octave/에 대한 기본 k- 평균 군집 알고리즘 구현을 사용하고 있습니다 . 숫자 데이터로만 작동합니다.

그래서 내 질문 : 범주 속성 CategoricalAttr을 세 개의 숫자 (이진) 변수로 나누는 것이 맞 IsCategoricalAttrValue1, IsCategoricalAttrValue2, IsCategoricalAttrValue3습니까?


7
예, 1-n-n 인코딩 사용도 유효합니다.
Sean Owen

1
아마도이 방법이 유용 할 것입니다 : zeszyty-naukowe.wwsi.edu.pl/zeszyty/zeszyt12/…

범주 형 및 숫자 형 데이터의 'TIME SERIES'클러스터링 혼합에 대한 아이디어가 있습니까?
Leila Yousefi

답변:


122

표준 k- 평균 알고리즘은 다양한 이유로 범주 형 데이터에 직접 적용 할 수 없습니다. 범주 형 데이터의 표본 공간은 이산 적이며 자연적인 기원이 없습니다. 이러한 공간에서 유클리드 거리 기능은 실제로 의미가 없습니다. 누군가가 말하길, "뱀이 바퀴 나 다리를 가지고 있지 않다는 사실은 바퀴와 다리의 상대적인 가치에 대해 아무 말도 할 수 없습니다." ( 여기에서 )

본 논문 에서 Zhexue Huang에 의해 소개 된 k- 모드로 알려진 k- 평균의 변형이 있는데 , 이는 범주 형 데이터에 적합하다. 예를 들어 여기에 설명 된대로 (PDF) 초기 솔루션에는 솔루션이 민감 합니다.

Huang의 논문 (위에 링크 됨)에는 범주 형과 숫자 형 특징이 혼합 된 데이터에 적용되는 "k- 프로토 타입"섹션이 있습니다. 범주 피쳐의 해밍 거리와 숫자 피쳐의 유클리드 거리를 혼합하는 거리 측정을 사용합니다.

"k-means 혼합 범주 형 데이터"에 대한 Google 검색은 categorical 및 numeric 데이터가 혼합 된 k- 평균 유사 군집화에 대한 다양한 알고리즘에 대한 최신 논문을 몇 개 더 보여줍니다. (아직 읽지 않았으므로 장점에 대해서는 언급 할 수 없습니다.)


실제로, 당신이 제안하는 것 (범주 적 속성을 이진 값으로 변환 한 다음 k 값을 숫자 값 인 것처럼 k- 평균을 수행하는 것)은 이전에 시도 된 또 다른 접근법입니다 (k 모드를 인용). (Ralambondrainy, H. 1995 참조. k- 평균 알고리즘의 개념 버전. 패턴 인식 문자, 16 : 1147–1157.) 그러나 위에서 언급 한 이유로 k- 모드 접근 방식이 선호된다고 생각합니다.


10
수치 특성을 이진화 된 범주 형 특성과 동일한 범위로 스케일링하면 코사인 유사성이 위의 해밍 접근 방식과 매우 유사한 결과를 생성하는 경향이 있습니다. 나는 모든 경우에 이것이 작동하는지 확인하는 강력한 방법을 가지고 있지 않으므로 cat과 num 데이터를 혼합했을 때 항상 언급 한 간단한 코사인 방법과 Hamming과의 복잡한 혼합으로 샘플에서 클러스터링을 확인합니다. 차이가 중요하지 않으면 더 간단한 방법을 선호합니다.
cwharland

1
이것은 @cwharland와 같은 합리적인 접근 방식입니다. 추가로 고려할 때 Huang이 Ralambondrainy에 비해 k- 모드 접근 방식에 제공하는 장점 중 하나는 범주 형 변수의 각 값에 대해 별도의 기능을 도입 할 필요가 없다는 점입니다. OP의 경우 세 개의 값을 가진 단일 범주 형 변수 만 있습니다. 가장 간단한 접근 방식을 사용하는 것이 좋습니다.
Tim Goodman

3
좋은 대답입니다. 잠재적으로 도움이되는 : Python에서 Huang의 k 모드 및 k 프로토 타입 (및 변형)을 구현했습니다. github.com/nicodv/kmodes
Def_Os

2
범주 형 속성을 숫자 값으로 변환하지 않는 것이 좋습니다. NY와 LA의 두 도시 이름이 있다고 가정하십시오. NY 번호 3과 LA 번호 8을 적용하면 거리는 5이지만 NY와 LA의 차이에 대해서는 5가 표시되지 않습니다.
adesantos 2016 년

@adesantos 그렇습니다. 단일 숫자 기능으로 여러 카테고리를 표현하고 유클리드 거리를 사용하는 것이 문제입니다. 해밍 거리를 사용하는 것이 한 가지 방법입니다. 이 경우 거리는 카테고리에 지정된 숫자 값의 차이가 아닌 다른 각 피쳐에 대해 1입니다. 각 범주를 고유 한 기능으로 만드는 것은 다른 접근 방식입니다 (예 : "is it NY"의 경우 0 또는 1, "is it LA"의 경우 0 또는 1).
Tim Goodman

24

제 생각에는 클러스터링에서 범주 형 데이터를 처리하는 솔루션이 있습니다. R에는 범주 형 데이터에 대한 특정 거리가 제공됩니다. 이 거리는 Gower ( http://www.rdocumentation.org/packages/StatMatch/versions/1.2.0/topics/gower.dist ) 라고하며 꽤 잘 작동합니다.


2
이것은 Gower 거리 매트릭스에 적용된 메도 이드 주변의 혼합 데이터 세트-분할에 사용하는 접근법입니다 ( r-bloggers.com/clustering-mixed-data-types-in-r 참조 ). 문제는 거리 행렬을 계산하는 데 O (n ^ 2)에 비례하는 많은 메모리가 필요하므로 10 또는 20,000 레코드보다 큰 데이터 세트의 경우 메모리가 덜 필요하고 처리 할 수있는 k- 평균 군집화의 변형을 찾고 있습니다 혼합 데이터.
RobertF

@RobertF도 마찬가지입니다. 실행 가능한 데이터 크기는 불행히도 대부분의 문제에 비해 너무 작습니다.
piggybox

20

(팀 굿맨의 탁월한 답변 외에도)

k- 모드의 선택은 확실히 사용 된 클러스터링 알고리즘의 안정성을위한 길입니다.

  1. 군집 알고리즘은 거리 측정 / 유사성 점수를 자유롭게 선택할 수 있습니다. 유클리드가 가장 유명합니다. 그러나 각 차원 / 속성 (예 : Mahalanobis 메트릭)의 데이터 분포에 따라 확장되는 다른 메트릭을 사용할 수 있습니다. 사용 된 거리 메트릭을 기반으로 중심으로부터 데이터 포인트의 거리를 보여줍니다.

  2. 혼합 (숫자 및 범주) 클러스터링과 관련하여 도움이 될 수있는 좋은 논문은 다음 과 같습니다 . INCONCO : 숫자 및 범주 객체의 해석 가능한 클러스터링

  3. k- 평균을 넘어서 : 일반 바닐라 k- 평균은이 문제에 대한 적절한 접근 방법으로 이미 배제되었으므로, 클러스터링을 모델 피팅 문제로 생각한다는 아이디어 이상으로 넘어가겠습니다. 정보 이론적 메트릭과 같은 다양한 측정 : Kullback-Liebler 분기는 데이터 분포를 향해 파라 메트릭 모델을 수렴하려고 할 때 효과적입니다. (물론 GMM과 같은 파라 메트릭 클러스터링 기술은 Kmeans보다 느리므로 고려해야 할 단점이 있습니다)

  4. 퍼지 k- 모드 클러스터링은 또한 퍼지 로직 기술이 범주 형 데이터와 같은 것을 다루기 위해 개발되었으므로 매력적입니다. 자세한 내용은 퍼지 중심사용하여 범주 형 데이터의 퍼지 클러스터링 을 참조하십시오.

또한, 체크 아웃 : ROCK : 범주 특성위한 강력한 클러스터링 알고리즘


17

이 질문은 실제로 표현에 관한 것으로 보이지만 클러스터링에 대해서는별로 중요하지 않습니다.

범주 형 데이터는 머신 러닝의 대부분의 알고리즘에서 문제가됩니다. 예를 들어 빨강, 파랑 또는 노랑 값을 취할 수있는 "색상"이라는 범주 형 변수가 있다고 가정합니다. 단순히 숫자를 각각 1, 2, 3으로 인코딩하면 알고리즘은 빨강 (1)이 실제로 노랑 (3)보다 파랑 (2)에 더 가깝다고 생각합니다. 우리는 컴퓨터가 이러한 것들이 실제로 똑같이 다르다는 것을 이해하도록하는 표현을 사용해야합니다.

간단한 방법 중 하나one-hot representation 이라고하는 것을 사용하는 것입니다. 이것이 바로 당신이해야한다고 생각한 것입니다. 세 가지 값을 취할 수있는 "컬러"와 같은 하나의 변수를 갖는 대신 세 가지 변수로 구분합니다. 이들은 "색-빨간색", "색-파란색"및 "색-노란색"이며 모두 1 또는 0 값만 사용할 수 있습니다.

이렇게하면 공간의 차원이 증가하지만 원하는 클러스터링 알고리즘을 사용할 수 있습니다. 이 프로세스를 수행 한 후 데이터를 zscore하거나 희게하는 것이 때로는 합리적이지만 아이디어는 확실히 합리적입니다.


나는 당신의 대답에 동의합니다. HotEncoding은 매우 유용합니다.
Pramit

4

Expectation Maximization 클러스터링 알고리즘을 사용해 볼 수도 있습니다. 범주 형 데이터에 대해 작업 할 수 있으며 클러스터가 가장 많이 사용하는 범주 형 값 (또는 값)의 통계적 가능성을 제공합니다.


2
더 자세하게 얘기해 주 시겠어요? EM은 클러스터링에 사용할 수있는 최적화 알고리즘을 나타냅니다. 이를 수행하는 방법에는 여러 가지가 있으며 그 의미가 명확하지 않습니다.
바이엘

@ bayer, 여기에 언급 된 클러스터링은 가우스 혼합 모델이라고 생각합니다. GMM은 일반적으로 EM을 사용합니다.
goh

1
나는 그것이 그가 의미하는 바라고 생각하지 않습니다 .GMM이 범주 형 변수를 가정하지 않기 때문입니다.
bayer

3

사용중인 범주 형 변수에 따라 다릅니다. 나쁜, 평균 및 좋은 것과 같은 서수 변수의 경우 하나의 변수를 사용하고 0,1,2의 값을 갖는 것이 의미가 있으며 거리는 여기에서 의미가 있습니다 (평균은 나쁜 값에 가깝습니다). 그러나 순서가 없으면 위에서 언급 한대로 하나의 핫 인코딩을 사용하는 것이 이상적입니다.


3

혼합 된 데이터 유형이 포함 된 데이터 세트에서 k- 평균 클러스터링을 사용해서는 안됩니다. 대신 혼합 데이터 유형을 적절하게 처리 할 수있는 여러 클러스터링 알고리즘이 있습니다. 다음과 같은 가능성이 있습니다.

1) 분할 기반 알고리즘 : k- 프로토 타입, 스 퀴저
2) 계층 적 알고리즘 : ROCK, 통합 단일, 평균 및 전체 연결
3) 밀도 기반 알고리즘 : HIERDENC, MULIC, CLIQUE
4) 모델 기반 알고리즘 : SVM 클러스터링, 자체 지도 구성

이러한 알고리즘에 대해 더 자세히 알고 싶다면 Rui Xu가 작성한 'Survey of Clustering Algorithms'는 클러스터 분석에 대한 포괄적 인 소개를 제공합니다.


2

K-Means의 목표는 클러스터 내 분산을 줄이는 것이며, 중심점을 군집의 평균점으로 계산하기 때문에 제대로 수렴하려면 유클리드 거리를 사용해야합니다 . 따라서 K-Means를 절대적으로 사용하려면 데이터가 제대로 작동하는지 확인해야합니다.

대표

K-Means 및 일반적으로 군집화는 동일한 군집의 인스턴스가 서로 유사한 지 확인하여 의미있는 그룹으로 데이터를 분할하려고합니다. 따라서 의미있는 유사성 측정을 쉽게 계산할 수 있도록 데이터를 표현하는 좋은 방법이 필요합니다.

범주 형 변수에 원핫 인코딩을 사용하는 것은 범주가 서로 같은 거리에있을 때 좋습니다. 예를 들어, 연한 파란색, 진한 파란색 및 노란색의 색상이있는 경우, 원-핫 인코딩을 사용하면 최상의 결과를 얻지 못할 수 있습니다. 진한 파란색과 연한 파란색은 노란색보다 서로 "더 가깝습니다".

범주 형 값이 "동일한"값이 아니고 순서를 지정할 수있는 경우 범주에 숫자 값을 지정할 수도 있습니다. 예를 들어, 어린이, 십대, 성인은 잠재적으로 0, 1 및 2로 표시 될 수 있습니다. 이는 십대가 성인보다 아이와 "가까워"있기 때문에 의미가 있습니다.

K- 메도 이드

K-Means에 대한보다 일반적인 접근 방식은 K-Medoid입니다. K- 메도 이드는 K- 평균과 유사하게 작동하지만 주된 차이점은 각 군집의 중심이 클러스터 내 거리의 합을 줄이는 지점으로 정의된다는 것입니다. 이를 적용하면 원하는 거리 측정을 사용할 수 있으므로 어떤 범주에 근접해야하는지 고려할 사용자 지정 측정을 만들 수 있습니다.


1

범주 형 변수에 200 개 이상의 범주가있는 것처럼 범주 형 변수를 핫 인코딩 할 수없는 시나리오를 고려할 경우.

이러한 경우 clustMixType 패키지를 사용할 수 있습니다

혼합 데이터 (숫자 및 범주)를 처리 할 수 ​​있으며 데이터를 입력하면 범주 및 숫자 데이터가 자동으로 분리됩니다.

일부 숫자와 같은 문제가 범주 아래에 있으면 해당 필드에서 as.factor () / 역으로 as.numeric ()을 사용하여 해당 요소를 인수로 변환하고 새 데이터를 알고리즘에 제공 할 수 있습니다.

군집화시 입력으로 병입 할 수 있도록 람다를 계산하십시오.

최적의 군집 수를 찾기 위해 WSS (제곱 합 이내), 플롯 (팔꿈치 차트)을 얻을 수도 있습니다.

이 답변이보다 의미있는 결과를 얻는 데 도움이되기를 바랍니다.


1

위의 많은 것들은 k- 평균이 범주적이고 연속적인 변수에 대해 구현 될 수 있으며 잘못되어 결과는 소금 한 덩어리로 가져와야한다고 지적했습니다 .

위에서 @Tim으로 위에서 언급했듯이 스케일이 없거나 순서가없는 점 사이의 유클리드 거리를 계산하는 것은 의미가 없습니다. 범주 형 변수를 one-hot 인코딩하면 0과 1의 희소 행렬이 생성됩니다. 값의 범위는 고정되어 있고 0과 1 사이이므로 연속 변수와 같은 방식으로 정규화해야합니다. Z- 점수는 점 사이의 거리를 찾는 데 사용됩니다. 여전히 완벽하지는 않습니다. 나는 이것을 예로 설명 할 것이다. 범주는 상호 배타적이므로 범주 형 변수와 관련하여 두 점 사이의 거리는 높거나 낮은 두 값 중 하나를 취합니다. 즉, 두 점이 동일한 범주에 속하거나 그렇지 않습니다. 이러한 극단적 인 가치 때문에 알고리즘은 클러스터 형성에 영향을 미치는 연속 변수보다 더 많은 가중치를 부여합니다. 이는 영향을 미치는 변수를 확인하여 간단한 확인으로 확인할 수 있으며 대부분 변수가 범주 형 변수라는 사실에 놀랄 것입니다. (가장 큰 영향을 미치는 변수를 찾는 방법 [1])

예를 들어, 범주 형 변수 국가를 고려하십시오. 이제 우리는 서로 다른 국가의 관측치 사이의 거리 (비 유사성)가 동일하다는 것을 알고 있습니다 (이웃 국가 또는 같은 대륙의 국가와 같은 다른 유사성이 없다고 가정). 그러나 이와 반대로, 하나의 핫 인코딩 된 값을 정규화 한 후 관측치 사이의 거리를 계산하면 값이 높거나 낮은 사실과 함께 일치하지 않습니다 (차이는 작지만).

궁극적으로 파이썬에서 사용할 수있는 가장 좋은 옵션은 범주 형 변수와 연속 변수를 모두 처리 할 수있는 k 프로토 타입 입니다.

[1] : 군집 형성에서 가장 영향력있는 변수 찾기 : https://stackoverflow.com/a/53081779/8224401


0

혼합 모델을 사용하여 연속 및 범주 형 변수로 구성된 데이터 세트를 군집화 할 수 있습니다.

각 군집 내에서 가우시안 분포에 따른 연속 변수와 서수 / 이진 변수를 모델링하는 R 패키지 VarSelLCM (CRAN에서 사용 가능)을 사용할 수 있습니다. 연속 변수는 "숫자"이고 범주 형 변수는 "인자"인 data.frame에 데이터를 저장하도록주의하십시오.

자습서는 http://varsellcm.r-forge.r-project.org/ 에서 사용할 수 있습니다.

또한 결 측값은 현재 모델에서 관리 할 수 ​​있습니다.


0

나는 똑같은 문제를 겪었고 (k 프로토 타입이 존재한다는 것을 알지 않고) 내 머리를 움직이려고 노력했다. 내가 발견 한 풍부한 문헌은 같은 거리 메트릭으로 변수를 전혀 측정하지 않는다는 아이디어에서 비롯되었다. 더욱이, 데이터의 상이한 구조 또는 "보기"를 암시 할 수있는 다양한 정보 소스가 존재할 수있다. 트위터 / 웹 사이트와 같은 사회적 관계에 직면 할 때마다 이것은 자연스러운 문제입니다.

가능한 해결책 중 하나는 변수의 각 서브 세트 (즉, 숫자 및 범주)를 별도로 처리하는 것입니다. 거리 측정이 숫자 척도로 수행하는 것을 쉽게 이해할 수 있습니다. 범주 형 데이터 자체는 쉽게 이해할 수 있습니다. 이진 관측 벡터 사용 고려 : 두 관측 벡터 사이의 0/1에 대한 우발성 표에는 두 관측치 간의 유사성에 대한 많은 정보가 포함되어 있습니다. 이진 벡터에 대한 다양한 맞춤형 유사성 측정법에 대한 풍부한 문헌이 있습니다.

동일한 관측 값을 설명하는 거리 / 유사성 매트릭스가 모두 주어지면 각각의 그래프를 추출하거나 (Multi-View-Graph-Clustering) 여러 개의 모서리가있는 단일 그래프를 추출 할 수 있습니다. 정보 매트릭스가있는 다른 노드 (Multi-Edge-Clustering). 각 모서리에는 해당 유사성 / 거리 측정의 가중치가 할당됩니다. 여기서 시작하십시오 : 그래프 클러스터링 알고리즘 및 논문의 Github 목록. 단일 관측에 대해 여러 정보 세트가 사용 가능하기 때문에 스펙트럼 분석의 하위 항목 또는 연결된 행렬 인수 분해를 사용하여 정보 세트를 서로 엮어 야합니다. 스펙트럼 분석은 단일 그래프에서 고도로 연결되거나 가중치가 높은 부분을 찾는 기본 방법입니다. 서로 짜여진 데이터를 스펙트럼에 임베딩하면 수치 데이터에 대한 모든 클러스터링 알고리즘이 쉽게 작동 할 수 있습니다. 문학의 기본값은 단순성 측면에서 kmeans이지만 훨씬 더 진보적이며 제한적인 알고리즘이 없기 때문에이 문맥에서 상호 교환 가능하게 사용할 수 있습니다.

나는 단순한 dtype이 아닌 여러 정보 세트로 쉽게 확장 할 수 있고 각 데이터 하위 집합의 특정 "측정"에 대한 존중을 쉽게 확장 할 수 있기 때문에이 접근 방식의 아름다움과 일반성을 좋아했습니다. 이것은 다양한 거리 및 유사성 메트릭으로 모델을 미세 조정하거나 변수를 스케일링하는 것을 완화시키지 않습니다 (내 분석의 맥락에서 숫자 변수를 비율 스케일로 스케일링하는 것을 발견했습니다)

확장 성 관점에서 볼 때 주로 두 가지 문제가 있습니다.

  1. 고유 문제 근사치 (알고리즘에 대한 풍부한 문헌이 존재하는 경우)
  2. 거리 매트릭스 추정 (순수하게 조합되는 문제, 매우 빠르게 커짐-아직 효율적인 방법을 찾지 못했습니다)

재미있게 보내세요!


0

자동 기능 엔지니어링 ( http://www.orges-leka.de/automatic_feature_engineering.html) 을보고 싶을 수도 있습니다 . 이 방법은 부르게 인 임베딩 (Bourgain Embedding)을 기반으로하며 혼합 범주 형 및 숫자 데이터 프레임에서 또는 두 데이터 포인트 사이의 거리를 지원하는 모든 데이터 세트에서 숫자 형상을 도출하는 데 사용할 수 있습니다. 데이터를 숫자로만 변환하면 K- 평균 군집화를 직접 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.