K-Karma sayısal ve kategorik veriler için kümeleme anlamına gelir


133

Veri kümem, bir dizi sayısal özellik ve bir kategorik içerir.

Söyle NumericAttr1, NumericAttr2, ..., NumericAttrN, CategoricalAttr,

nerede CategoricalAttrüç olası değerlerden birini alır: CategoricalAttrValue1, CategoricalAttrValue2veya CategoricalAttrValue3.

Octave https://blog.west.uni-koblenz.de/2012-07-14/a-working-k-means-code-for-octave/ için varsayılan k-aracı kümeleme algoritması uygulamasını kullanıyorum . Sadece sayısal verilerle çalışır.

Öyleyse sorum: kategorik niteliği CategoricalAttrüç sayısal (ikili) değişkene bölmek doğru IsCategoricalAttrValue1, IsCategoricalAttrValue2, IsCategoricalAttrValue3mu?


7
Evet, 1’lik kodlamanın kullanılması da geçerlidir.
Sean Owen

1
Belki bu yaklaşım faydalı olabilir: zeszyty-naukowe.wwsi.edu.pl/zeszyty/zeszyt12/…

'ZAMAN SERİSİ' kategorik ve sayısal verilerin kümelenme karışımı hakkında bir fikriniz var mı?
Leila Yousefi,

Yanıtlar:


122

Standart k-aracı algoritması, çeşitli nedenlerden dolayı kategorik verilere doğrudan uygulanamaz. Kategorik veriler için örnek alan ayrıktır ve doğal bir kökeni yoktur. Böyle bir alanda Öklid uzaklık fonksiyonu gerçekten anlamlı değildir. Birinin dediği gibi, "Bir yılanın tekerleklere veya bacaklara sahip olmaması, tekerleklerin ve bacakların göreceli değeri hakkında hiçbir şey söylememize izin vermez." ( buradan )

Bu yazıda , kategorik veriler için uygun olan Zhexue Huang tarafından tanıtılan, k-modları olarak bilinen bir k-aracı çeşidi vardır . Aldığınız çözümlerin, örneğin burada (PDF) tartışıldığı gibi ilk koşullara duyarlı olduğunu unutmayın .

Huang'ın makalesinde (yukarıda bağlantılı), kategorik ve sayısal özelliklerin bir karışımını içeren veriler için geçerli olan "k-prototipler" üzerine bir bölüm de vardır. Kategorik özellikler için Hamming mesafesini ve sayısal özellikler için Öklid mesafesini birleştiren bir mesafe ölçüsü kullanır.

"Kategorik verilerin k-anlamı karışımı" için bir Google araması, kategorik ve sayısal verilerin bir karışımı ile k-aracı benzeri kümeleme için çeşitli algoritmalar hakkında daha birkaç makale yayınladı. (Henüz okumadım, bu yüzden onların esası hakkında yorum yapamam.)


Aslında, önerdiğiniz şey (kategorik nitelikleri ikili değerlere dönüştürmek ve daha sonra bunlar sayısal değerlermiş gibi k-araçlarını yapmak) daha önce denenmiş başka bir yaklaşımdır (k-modlarından önce). (Bkz. Ralambondrainy, H. 1995. k-aracı algoritmasının kavramsal bir versiyonu. Örüntü Tanıma Harfleri, 16: 1147–1157.) Fakat yukarıda belirtilen nedenlerden dolayı k-kipleri yaklaşımının tercih edildiğine inanıyorum.


10
Eğer ölçeğiniz, sayısal özelliklerinizi ikili kategorik özelliklerle aynı aralığa getirirse, kosinüs benzerliği yukarıdaki Hamming yaklaşımına çok benzer sonuçlar verir. Bunun her durumda işe yaradığını doğrulamak için sağlam bir yolum yok, bu yüzden karışık kedi ve num verilerini aldığımda, bir örnek üzerinde kümelemeyi her zaman bahsettiğim basit kosinüs yöntemi ve Hamming ile daha karmaşık karışımla kontrol ederim. Fark önemsiz ise daha basit yöntemi tercih ederim.
cwharland

1
Kulağa mantıklı bir yaklaşım gibi geliyor, @cwharland. Daha da önemlisi, Huang'ın Ralambondrainy'nin k-kipleri yaklaşımına verdiği avantajlardan birinin - kategorik değişkeninizin her bir değeri için ayrı bir özellik sunmak zorunda olmadığınızı - gerçekten önemli olmadığını unutmayın. OP'nin sadece üç değerli tek bir kategorik değişkeni olduğu durumu. İşe yarayan en basit yaklaşımla gitmek daha iyi.
Tim Goodman

3
İyi cevap. Potansiyel olarak faydalı: Huang'ın k-modlarını ve k-prototiplerini Python'da uyguladım
Def_Os

2
Kategorik niteliklerin sayısal değerlere dönüştürülmesini önermiyorum. İki şehir adınız olduğunu düşünün: NY ve LA. NY sayısı 3 ve LA sayısı 8'i uygularsanız, mesafe 5'tir, ancak bu 5'in NY ve LA arasındaki farkla ilgisi yoktur.
adesantos

@adesantos Evet, tek bir sayısal özelliği olan birden fazla kategoriyi temsil etmek ve bir Öklid mesafesi kullanmakla ilgili bir sorun. Hamming mesafesini kullanmak bir yaklaşımdır; Bu durumda mesafe, farklı olan her özellik için 1'dir (kategorilere atanan sayısal değerler arasındaki farktan ziyade). Her kategoriyi kendi özelliği haline getirmek başka bir yaklaşımdır (örneğin, "NY mi" için 0 veya 1 ve "LA mı" için 0 veya 1).
Tim Goodman

24

Bence kümelemede kategorik verilerle ilgilenmek için çözümler var. R, kategorik veriler için belirli bir mesafe ile geliyor. Bu mesafeye Gower ( http://www.rdocumentation.org/packages/StatMatch/versions/1.2.0/topics/gower.dist ) adı verilir ve oldukça iyi çalışır.


2
Bu, Gower mesafe matrisine uygulanan medyumların etrafındaki bölümleme olan karışık bir veri kümesi için kullandığım yaklaşımdır (bkz. R-bloggers.com/clustering-mixed-data-types-in-r ). Sorun, uzaklık matrisinin hesaplanmasının, O (n ^ 2) ile orantılı olarak çok fazla bellek gerektirmesi, dolayısıyla 10 veya 20.000 kayıttan daha büyük veri kümeleri için, daha az bellek gerektiren ve daha az bellek gerektiren varyasyonlara bakıyorum. karışık veri
RobertF

@RobertF burada aynı. Uygun veri boyutu ne yazık ki çoğu sorun için çok düşük.
piggybox

20

(Tim Goodman'ın mükemmel cevabına ek olarak)

K-modlarının seçimi kesinlikle kullanılan kümeleme algoritmasının kararlılığı için bir yoldur.

  1. Kümeleme algoritması, herhangi bir mesafe ölçümü / benzerlik puanı seçmekte serbesttir. Öklid en popüler olanıdır. Ancak, her boyut / özellikteki veri dağılımına göre ölçeklenen başka herhangi bir ölçüm kullanılabilir, örneğin Mahalanobis metriği. Kullanılan mesafe metrikine dayalı olarak veri noktalarının merkeze olan mesafesini gösterir.

  2. Karma (sayısal ve kategorik) kümelenmeye gelince, yardımcı olabilecek iyi bir makale: INCONCO: Sayısal ve Kategorik Nesnelerin Yorumlanabilir Kümelenmesi

  3. K-araçlarının ötesinde: Düz vanilya k-araçlarının zaten bu soruna uygun bir yaklaşım olarak göz ardı edildiğinden, kümelenmeyi modelleme sorunu olarak düşünme fikrinin ötesine geçeceğim. Bilgi-teorik metrik gibi farklı ölçütler: Kullback-Liebler sapması parametrik bir modeli veri dağılımına dönüştürmeye çalışırken iyi sonuç verir. (Tabii ki GMM gibi parametrik kümeleme teknikleri Kmeans'dan daha yavaştır, bu nedenle göz önünde bulundurulması gereken sakıncalar vardır)

  4. Bulanık k-mod kümelenmesi de, kategorik veriler gibi bir şeyle başa çıkmak için bulanık mantık teknikleri geliştirildiği için çekici görünmektedir. Daha fazla bilgi için Bulanık centroidleri kullanarak Kategorik verilerin bulanık kümelenmesine bakınız .

Ayrıca göz atın : ROCK: Kategorik Özellikler için Sağlam Bir Kümeleme Algoritması


17

Bu soru gerçekten temsiliyetten ibaret ve kümelenme hakkında pek bir şey ifade etmiyor.

Kategorik veriler, makine öğrenimindeki çoğu algoritma için bir sorundur. Örneğin, kırmızı, mavi veya sarı değerlerini alabilen "renk" olarak adlandırılan bazı kategorik bir değişkeniniz olduğunu varsayalım. Bunları sırasıyla sayısal olarak 1,2 ve 3 olarak kodlarsak, algoritmamız kırmızı (1) 'in aslında maviye (2) sarıdan (3) daha yakın olduğunu düşünecektir. Bilgisayarın bu şeylerin aslında eşit derecede farklı olduğunu anlamasını sağlayan bir gösterim kullanmamız gerekiyor.

Basit bir yol, tek bir sıcak temsil denen şeyi kullanmaktır ve tam olarak ne yapman gerektiğini düşündün. Üç değer alabilen "renk" gibi bir değişkene sahip olmak yerine, üç değişkene ayırıyoruz. Bunlar "renk-kırmızı", "renk-mavi" ve "renk-sarı" olacaktır; bunlar yalnızca 1 veya 0 değerini alabilir.

Bu, uzayın boyutluluğunu arttırır, ancak şimdi istediğiniz herhangi bir kümeleme algoritmasını kullanabilirsiniz. Bazen bu işlemi yaptıktan sonra verileri zscore veya beyazlatmak mantıklı olabilir, ancak sizin fikriniz kesinlikle makul.


Cevabınıza katılıyorum. HotEncoding çok kullanışlıdır.
Pramit

4

Ayrıca Beklenti Maksimizasyonu kümeleme algoritmasını deneyebilirsiniz. Kategorik veriler üzerinde çalışabilir ve size bir kümenin en çok hangi kategorik değerin (veya değerlerin) üstlenebileceği konusunda istatistiksel bir olasılık sunar.


2
Daha spesifik olabilir misin? EM, kümeleme için kullanılabilecek bir optimizasyon algoritmasını ifade eder. Bunu yapmanın birçok yolu vardır ve ne demek istediğinizi açık değildir.
bayer

@bayer, burada bahsedilen kümelenmenin gauss karışımı modeli olduğunu düşünüyorum. GMM genellikle EM kullanır.
goh

1
Bunun ne anlama geldiğini sanmıyorum, çünkü GMM kategorik değişkenler varsaymıyor.
bayer

3

Bu, kullanılan kategorik değişkeninize bağlıdır. Sıralı değişkenler için, kötü, ortalama ve iyi gibi diyelim, sadece bir değişkeni kullanmak mantıklı ve 0,1,2 değerlerine sahip ve mesafeler burada mantıklı (Ortalama kötü ve iyiye yakın). Ancak, sipariş yoksa, ideal olarak yukarıda belirtildiği gibi bir sıcak kodlama kullanmanız gerekir.


3

Karışık veri türleri içeren bir veri kümesinde k-aracı kümelemesi kullanmamalısınız. Aksine, karışık veri tiplerini uygun şekilde işleyebilen bir dizi kümeleme algoritması vardır. Bazı olasılıklar aşağıdakileri içerir:

1) Bölümleme tabanlı algoritmalar: k-Prototipler, Sıkıştırıcı
2) Hiyerarşik algoritmalar: ROCK, Tek aglomeratif, ortalama ve tam bağlantı
3) Yoğunluk tabanlı algoritmalar: HIERDENC, MULIC, CLIQUE
4) Model tabanlı algoritmalar: SVM kümelenmesi, Self Organize haritalar

Bu algoritmalar hakkında daha fazla bilgi edinmek istiyorsanız, Rui Xu tarafından yazılmış olan 'Kümeleme Algoritmaları Araştırması' el yazması küme analizine kapsamlı bir giriş sunar.


2

K-Means'ın amacı küme içi varyansı azaltmaktır ve centroidleri kümenin ortalama noktası olarak hesapladığından, doğru bir şekilde birleşmek için Öklid mesafesini kullanmak gerekir. Bu nedenle, K-Means'ı kesinlikle kullanmak istiyorsanız, verilerinizin onunla iyi çalıştığından emin olmanız gerekir.

temsil

K-Means ve genel olarak kümeleme, aynı kümelerdeki örneklerin birbirine benzer olmasını sağlayarak verileri anlamlı gruplara ayırmaya çalışır. Bu nedenle, anlamlı bir benzerlik ölçüsünü kolayca hesaplayabilmeniz için verilerinizi temsil etmek için iyi bir yola ihtiyacınız vardır.

Kategorik değişkenlerde tek-sıcak kodlama kullanmak, kategoriler birbirinden eşit olduğunda iyi bir fikirdir. Örneğin, açık mavi, koyu mavi ve sarı renge sahipseniz, bir sıcak kodlamanın kullanılması size en iyi sonucu vermeyebilir, çünkü koyu mavi ve açık mavi muhtemelen sarıya göre birbirlerine "daha yakındır".

Kategorik değerin "eşitlikçi" olmadığı ve sipariş edilebildiği durumlarda, kategorilere sayısal bir değer de verebilirsiniz. Örneğin, çocuk, genç, yetişkin, potansiyel olarak 0, 1 ve 2 olarak gösterilebilir. Bu, bir gencin bir çocuktan yetişkinliğe göre daha "yakın" olması nedeniyle mantıklı olur.

K-Medoids

K-Means'a daha genel bir yaklaşım K-Medoids'dir. K-Medoids, K-Means'a benzer şekilde çalışır, ancak temel fark, her küme için centroidin küme içi mesafelerin toplamını azaltan nokta olarak tanımlanmasıdır. Bunu zorunlu kılmak, istediğiniz herhangi bir mesafe ölçeri kullanmanıza izin verir ve bu nedenle, hangi kategorilerin yakın olması veya olmaması gerektiğini dikkate alan kendi özel ölçünüzü oluşturabilirsiniz.


1

Kategorik değişkenin, kategorik değişkenin 200+ kategoriye sahip olduğu gibi kodlanmış sıcak olamayacağı bir senaryo düşünürsek.

Bu gibi durumlarda clustMixType paketini kullanabilirsiniz.

Karma verileri işleyebilir (sayısal ve kategorik), yalnızca verileri beslemeniz gerekir, Kategorik ve Sayısal verileri otomatik olarak ayırır.

Bazı nümerik gibi herhangi bir sorunu kategorik altında bulursanız, o zaman ilgili alanda as.factor () / vice-versa as.numeric () ifadesini ve bunu bir faktöre dönüştürebilir ve bu yeni verileri algoritmaya besleyebilirsiniz.

Kümelemede girdi olarak beslenebilmeniz için lambda değerini hesaplayın.

Optimal Küme sayısını bulmak için bir WSS (kareler toplamı dahilinde), arsa (dirsek tablosu) bile alabiliriz.

Umarım bu cevap daha anlamlı sonuçlar almanıza yardımcı olur.


1

Yukarıdakilerin çoğu, k-araçlarının kategorik ve sürekli değişkenlere uygulanabileceğini, bunun yanlış olduğunu ve sonuçların bir tutam tuzla alınması gerektiğini belirtti.

Yukarıda @Tim tarafından bahsedildiği gibi, ölçeği olmayan veya sırası olmayan noktalar arasındaki öklid mesafesini hesaplamak mantıklı değildir. Bir sıcak olduğunda, kategorik değişkenleri kodladığınızda, 0 ve 1'lerin seyrek bir matrisini oluşturursunuz. Değerlerin aralığı sabit ve 0 ile 1 arasında olduğu için sürekli değişkenlerle aynı şekilde normalleştirilmeleri gerekir. Z-puanları puanlar arasındaki mesafeyi bulmak için kullanılır. Bu hala, tam olarak doğru değil. Bunu bir örnekle açıklayacağım. Kategoriler karşılıklı olarak münhasır olduğu için, kategorik değişkenlere göre iki nokta arasındaki mesafe, iki değerden birini alır, yüksek veya düşük, yani iki puan aynı kategoriye aittir veya değildir. Bu aşırı değerler nedeniyle, algoritma küme oluşumunu etkileyen sürekli değişkenler üzerinde daha fazla ağırlık vererek sona ermektedir. Bu, hangi değişkenlerin etkilendiğini görerek basit bir kontrolle doğrulanabilir ve çoğunun kategorik değişkenler olduğunu görünce şaşıracaksınız. (En etkili değişkenleri bulmanın yolları [1])

Örnek: Kategorik bir değişken ülke olarak düşünün. Artık bildiğimiz gibi, farklı ülkelerden yapılan gözlemler arasındaki mesafenin (farklılıklar) aynı olduğunu (komşu ülkeler veya aynı kıtadaki ülkeler gibi başka hiçbir benzerlik olmadığı varsayılarak) eşit. Ancak bunun aksine, bir sıcak kodlanmış değeri normalleştirdikten sonra gözlemler arasındaki mesafeleri hesaplarsanız, yüksek veya düşük değerler aldıkları gerçeğiyle birlikte tutarsızlık göstereceklerdir.

Sonuçta python için mevcut en iyi seçenek hem kategorik hem de sürekli değişkenleri işleyebilen k-prototiplerdir .

[1]: Küme oluşumunda en etkili değişkenleri bulma: https://stackoverflow.com/a/53081779/8224401


0

Sürekli ve kategorik değişkenlerden oluşan bir veri kümesini kümelemek için karışım modelleri kullanılabilir.

Her bir kümede, sürekli değişkenleri Gauss dağılımlarına ve sıralı / ikili değişkenlere göre modelleyen R paketini VarSelLCM (CRAN'da bulunur) kullanabilirsiniz. Verilerinizi sürekli değişkenlerin "sayısal" ve kategorik değişkenlerin "faktör" olduğu bir data.frame dosyasında saklamaya özen gösterin.

Http://varsellcm.r-forge.r-project.org/ adresinde bir öğretici mevcuttur.

Ayrıca, eksik değerler eldeki model tarafından yönetilebilir.


0

Ben de aynı soruna rastladım ve kafamın etrafında çalışmaya çalıştım (k-prototiplerin varlığından haberdar olmadan), kendimle karşılaştığım zengin literatürde, değişkenleri aynı mesafedeki metrik ile ölçmeme fikrinden kaynaklandığını gördüm. Dahası, verilerin farklı yapıları veya "görünümleri" anlamına gelebilecek çeşitli bilgi kaynakları mevcut olabilir. Twitter / web siteleri gibi sosyal ilişkilerle karşılaştığınızda, bu doğal bir sorundur.

Muhtemel çözümlerden biri değişkenlerin her bir alt kümesini (örneğin sayısal ve kategorik) ayrı ayrı ele almaktır. Bir mesafe ölçüsünün sayısal bir ölçekte ne yaptığı kolayca karşılaştırılabilir. Kendi başına kategorik veriler de kolayca anlaşılabilir: İkili gözlem vektörlerine sahip olmayı düşünün: İki gözlem vektörü arasındaki 0 ​​/ 1'deki beklenmedik durum tablosu, bu iki gözlem arasındaki benzerlik hakkında birçok bilgi içerir. İkili vektörler üzerindeki çeşitli özelleştirilmiş benzerlik önlemleri üzerine zengin literatür bulunmaktadır - en çok olasılık durumu tablosundan başlamaktadır.

Her ikisi de aynı gözlemleri tanımlayan her iki mesafe / benzerlik matrisi göz önüne alındığında, her biri üzerinde bir grafik çıkarabilir (Çoklu Görünüm-Grafik Kümelemesi) veya birden fazla kenarlı tek bir grafik çıkartabilir - her düğüm (gözlem) bilgi matrisi olduğu için başka bir düğüm (Çok Kenarlı Kümeleme). Her kenara karşılık gelen eşlik / mesafe ölçüsünün ağırlığı atanır. Buradan başlayın: Grafik Kümeleme Algoritmaları ve makalelerinin Github listesi. Tek bir gözlemde mevcut olan çok sayıda bilgi kümesi bulunduğundan, bunlar örneğin spektral analizin veya bağlı matris faktoringin inişlerini kullanarak iç içe geçmiş olmalıdır. Spektral analiz, tek grafiklerin çok bağlantılı veya ağır ağırlıklı bölümlerini bulmak için varsayılan yöntemdir. İç içe geçmiş verilerin spektral olarak gömülü olması durumunda, sayısal veri üzerindeki herhangi bir kümeleme algoritması kolayca çalışabilir. Edebiyatın temerrüdü basitlik meselesi için kmean'lar, ancak çok daha ileri - ve bu bağlamda birbirinin yerine kullanılabilecek kısıtlayıcı algoritmalar mevcut değil.

Bu yaklaşımdaki güzelliği ve genelliği sevdim, çünkü sadece türlerden ziyade çoklu bilgi kümelerine kolayca genişletilebiliyordu ve her veri alt kümesindeki belirli "ölçüme" olan saygısını daha da arttırıyordum. Bu, modeli çeşitli mesafe ve benzerlik ölçümleri ile hassas bir şekilde ayarlamaktan ya da değişkenlerinizi ölçeklendirmekten hafifletmez (kendimi sayısal değişkenleri oranlama ölçeklerine ölçekleme olarak belirledim)

Ölçeklenebilirlik bakış açısına göre, esas olarak iki sorun vardır:

  1. Öz problem yaklaşımı (zengin algoritma literatürünün olduğu yerlerde)
  2. Uzaklık matrisi kestirimi (çok hızlı bir şekilde büyüyen, tamamen birleştirici bir problemdir - henüz etkili bir yol bulamadım)

Bununla eğlenin!


0

Otomatik özellik mühendisliğine bakmak isteyebilirsiniz: http://www.orges-leka.de/automatic_feature_engineering.html . Yöntem, Bourgain Embedding'ı temel alır ve sayısal kategorileri karışık kategorik ve sayısal veri çerçevelerinden veya iki veri noktası arasındaki mesafeleri destekleyen herhangi bir veri setinden sayısal özellikleri türetmek için kullanılabilir. Verileri yalnızca sayısal özelliklere dönüştürmüş olan kişi, doğrudan K-aracı kümelemesini o zaman kullanabilir

Licensed under cc by-sa 3.0 with attribution required.