Anasayfa / Büyük Veri / Apache Spark ile Artık İdeal Küme Sayısını Bulmak Daha Kolay

Apache Spark ile Artık İdeal Küme Sayısını Bulmak Daha Kolay

Bildiğimiz gibi makine öğrenmesinde öğrenme yöntemleri genel olarak denetimli (supervised) ve denetimsiz (unsupervised) şeklinde ikiye ayrılıyor. Denetimli yöntemlerde sınıflandırma ağırlık kazanırken denetimsiz yöntemlerde ise kümeleme öne çıkmaktadır. Sınıflandırmada veri içinde etiketlenmiş bir hedef değişken bulunurken kümelemede ise herhangi bir hedef  değişken bulunmaz. Bu nedenle kümeleme daha çok veri içindeki nesnelerin doğal gruplanmalarını ortaya çıkarmaya yöneliktir.

Sınıflandırmaya göre biraz daha zorlu, sonuçları yorumlamaya muhtaç, daha fazla alan bilgisi ve uzmanlık gerektiren kümeleme yöntemleri içinde K-ortalamalar (KMeans) tekniği yaygın olarak kullanılmaktadır. Bu teknik girdi olarak veri seti ile birlikte kullanıcıdan küme sayısı olan k değerini istemektedir. İdeal k sayısını belirlemek çok kolay olmasa da bunun için bazı yöntemler geliştirilmiştir. Spark ML’ye göre daha zengin kütüphanelerden olan Scikit-learn’de k sayısı belirlemek için bazı metrikler (sklearn.metrics.silhouette_score) bulunuyor. Bunlardan birisi de silhouette analizidir. K-ortalamalar tekniğinde ideal k sayısı bu analizle belirlenebilmektedir. Apache Spark ise 2.3.0 sürümüne kadar kümeleme değerlendirme metriği sunmuyordu. 2.3.0 ile beraber ML kütüphanesine ClusteringEvaluator sınıfı eklendi. Bu sınıftan yarattığımız nesne ile artık ideal küme sayısının ne olması gerektiğine dair bir fikir edinebiliyoruz. Bunu bu sınıftan oluşturduğumuz nesnenin evaluate metoduyla yapıyoruz. Bu metod bize bir ondalıklı sayı döndürüyor. Bu sayı [-1,1] arasında değer alıyor. Değerin yüksek olması kümelerin birbirinden daha iyi ayrıştığına işaret ediyor. Bu yazımızda iris veri seti üzerinde basit bir uygulama yapacağız. Bakalım iris verisinde optimal küme sayısı ne çıkacak?

Aşağıdaki kodları: Windows 10 üzerine kurulu Spark 2.3.1, IntelliJ Idea Community Edition ve Scala kullanarak yazdım ve çalıştırdım.

Kodları Veri Bilimi Okulu GitHub deposunda da bulabilirsiniz.

Gerekli kütüphaneleri indirme:

Spark session yaratma:

Veri setini yükleme:

Veriye bir göz atalım:

KMeans modeli oluşturan bir fonksiyon yazalım. Bu fonksiyon bize bir PipelineModel döndürsün.

Optimal k sayısı için evaluator nesnesi yaratalım ve bir for döngüsü ile evaluator score hesaplayalım. Bu arada kmeans computecost değerini de hesaplamış olalım.

Sonuç:

Yorum: Bildiğimiz gibi iris çiçeği üç farklı cinsten oluşuyordu. Yukarıda 2’yi saymaz isek en yüksek score değeri k=3 için alınmış. Bu değerlere göre optimal küme sayısı için k değerini 3 seçmek gerekiyor. 2’yi es geçmemizin sebebi bu analizin 2 ve 4 sayıları için kararsızlık eğiliminde olmasıdır[1]. Ayrıca ComputeCost değeri de en büyük sıçramayı 3’üncü kümeden sonra yapmaktadır. Yani dirsek metodunu da kullansak 3’ü seçmemiz isabet olacaktı.

[1] http://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.html

Hakkında Erkan ŞİRİN

GÖZ ATMAK İSTEYEBİLİRSİNİZ

Ekonometri Nedir?

1926 yılında “ekonomik ölçüm” anlamına gelen “ekonometri” kavramı ilk kez iktisatçı Frisch tarafından kullanılmıştır. Bu …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir