K-modes algoritması: Makine öğrenmesi kümeleme işlemlerinde tüm veriler kategorik olduğunda kullanılır.
Kategorik veri kümeleri için özelleşmiştir ve kategorik veri kümeleri üzerinde daha verimli sonuçlar verir.
#importing necessary libraries
from scipy.spatial.distance import pdist, squareform
import pandas as pd # Veri manipülasyonu ve analiz için pandas kütüphanesini içe aktarıyor
import numpy as np # Sayısal işlemler için numpy kütüphanesini içe aktarıyor
# !pip install kmodes # Gerekli kütüphaneyi yüklemek için (ilk kullanımda) bu satır aktif hale getirilebilir
from kmodes.kmodes import KModes # Kategorik veri kümeleri için K-modes algoritmasını içe aktarıyor
import matplotlib.pyplot as plt # Grafikler oluşturmak için matplotlib.pyplot'u içe aktarıyor
from sklearn.preprocessing import LabelEncoder
# Grafiklerin Jupyter Notebook'ta direkt görüntülenmesini sağlıyor
%matplotlib inline
veriler=pd.read_csv(veriler_kmode.csv)
print(veriler)
# Create toy dataset
hair_color = veriler.iloc[:, 1]
eye_color = veriler.iloc[:, 2]
skin_color = veriler.iloc[:, 3]
person = veriler.iloc[:, 0]
#print(person)
data = pd.DataFrame({'person':person, 'hair_color':hair_color, 'eye_color':eye_color, 'skin_color':skin_color}) # Verileri bir DataFrame'e aktarıyor
data = data.set_index('person') # 'person' sütununu DataFrame'in indeksine ayarlıyor
print(data) # DataFrame'i ekrana yazdırıyor
# pdist fonksiyonu kategorik veri ile çalışmadığı için kategorik verileri sayısal değerlere dönüştürüyoruz,
le = LabelEncoder() # LabelEncoder nesnesi oluşturuyoruz
for col in data.columns:
data[col] = le.fit_transform(data[col]) # Her kategorik sütunu sayısal değerlere dönüştürüyoruz
# Kategorik veriler üzerinde Hamming mesafe matrisini oluşturuyoruz
# Her iki satır arasındaki hamming mesafesini ölçüyoruz
hamming_distances = pdist(data.values, metric='hamming') # Hamming mesafelerini vektör olarak hesaplar
hamming_matrix = squareform(hamming_distances) # Vektörü kare matris formuna çevirir
# Hamming mesafe matrisini bir DataFrame olarak düzenliyoruz
hamming_df = pd.DataFrame(hamming_matrix, index=data.index, columns=data.index)
print(hamming_df)
# Elbow curve to find optimal K
cost = [] # Farklı küme sayılarının maliyetlerini saklamak için boş bir liste oluşturuyor
K = range(1,5) # Küme sayısını 1'den 4'e kadar denemek için bir aralık belirliyor
for num_clusters in list(K): # Her küme sayısı için döngü başlatıyor
kmode = KModes(n_clusters=num_clusters, init="random", n_init=5, verbose=1) # K-modes algoritmasını, belirtilen küme sayısı ve rastgele başlangıçla tanımlıyor
kmode.fit_predict(data) # K-modes algoritmasını veri üzerinde çalıştırarak kümeleri oluşturuyor
cost.append(kmode.cost_) # Her küme sayısı için maliyeti (inertia) 'cost' listesine ekliyor
plt.plot(K, cost, 'bx-') # Küme sayısına karşılık gelen maliyet değerlerini grafikle gösteriyor
plt.xlabel('No. of clusters') # X eksenine 'No. of clusters' etiketini ekliyor
plt.ylabel('Cost') # Y eksenine 'Cost' etiketini ekliyor
plt.title('Elbow Method For Optimal k') # Grafiğe başlık ekliyor
plt.show() # Grafiği görüntülüyor
# Assign clusters to each row
clusters = kmode.fit_predict(data) # Her satır için küme etiketlerini alıyoruz
data['Cluster'] = clusters # 'Cluster' adlı yeni bir sütun olarak DataFrame'e ekliyoruz
print("uğruna talan olsun vay servetim külli varım:", clusters)
# Display the data with cluster assignments
print(data) # Her satırın ait olduğu kümeyi gösteren tabloyu ekrana yazdırıyoruz