Makine Öğrenmesi - Kümeleme Algoritmaları
Affinity Propagation
Affinity Propagation (yakınlık yayılımı) algoritması, veri noktaları arasında mesaj göndererek kümeler oluşturur. Daha sonra, diğer örnekleri en iyi temsil edecek az sayıda örnek kullanılarak bir veri kümesi tanımlar. Çiftler arasında gönderilen mesajlar sonrasında bir örneğin diğerinin örneği olmaya uygunluğunu kontrol eder. Bu durum, son örneğin seçildiği noktaya kadar yinelemeli olarak devam eder. KMeans algoritması gibi küme sayısını belirtmeye gerek yoktur, küme sayısını veri setindeki değerlere göre algoritma kendisi oluşturur.
Kullanabilmek için "AffinityPropagation" algoritmasının içe aktarılması gerekmektedir.
from sklearn.cluster import AffinityPropagation
Söz dizimi: AffinityPropagation(*, damping=0.5, max_iter=200, convergence_iter=15, copy=True, preference=None, affinity='euclidean', verbose=False, random_state=None)
- damping, mevcut değerin gelen değerlere göre korunma derecesidir. 0.5-1 aralığında değer alabilir.
Örnek-1: Cars veri seti üzerinden, sayısal olan sütunlara AffinityPropagation kümeleme algoritmasını uygulayalım.
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings("ignore")
from sklearn.cluster import AffinityPropagation
from sklearn.metrics import silhouette_score
Keşifsel Veri Analizi EDA
#Veri seti okunur
df=pd.read_excel("cars.xls")
df.head()
Çıktı:
#Veri setinde sayısal olan değişkenleri x olarak atayalım
x=df.select_dtypes("number")
x.head()
Çıktı:
# Veri seti hakkında bilgi
x.info()
Çıktı:
<class 'pandas.core.frame.DataFrame'> RangeIndex: 804 entries, 0 to 803 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Price 804 non-null float64 1 Mileage 804 non-null int64 2 Cylinder 804 non-null int64 3 Liter 804 non-null float64 4 Doors 804 non-null int64 5 Cruise 804 non-null int64 6 Sound 804 non-null int64 7 Leather 804 non-null int64 8 Cluster 804 non-null int32 dtypes: float64(2), int32(1), int64(6) memory usage: 53.5 KB
#Veri seti açıklamaları
df.describe()
Çıktı:
Model Oluşturma İşlemleri
#AffinityPropagation ataması yapılır
model=AffinityPropagation()
#Model eğitme işlemi
model.fit(x)
#Tahminleme sonucu
predict_model=model.predict(x)
#tahmin edilen kümelemenin ilk 20 değerini yazdıralım
predict_model[0:20]
Çıktı:
array([13, 19, 12, 17, 17, 20, 20, 20, 20, 16, 19, 3, 3, 17, 1, 1, 1, 16, 0, 0], dtype=int64)
#Kümeleme sayısı
predict_model.max()
Çıktı:
30
Veri setini 31 farklı kümeye(0,1,2...30) ayırma işlemi yapmış oldu.
#x veri setine yeni bir sütun oluşturularak satırların hangi kümede olduğunu belirtelim
x["Cluster"]=predict_model
x.sample(5)
Çıktı:
#Veri seti değerlerinin kümeleme öncesi dağılım grafiği
plt.figure(figsize=(10,6))
plt.scatter(x.Mileage,x.Price)
plt.title("Veri seti değerlerinin kümeleme öncesi dağılım grafiği")
plt.show()
Çıktı:
#Veri seti değerlerinin kümeleme sonrası kümeleme dağılım grafiği
plt.figure(figsize=(10,6))
plt.scatter(x.Mileage,x.Price,c=predict_model)
plt.title("Veri seti değerlerinin kümeleme sonrası kümeleme dağılım grafiği")
plt.colorbar()
plt.show()
Çıktı:
Veri setindeki değerleri AffinityPropagation kümeleme algoritması kullanılarak 31 farklı renk ile belirtilen kümeleme işlemi yapılmış oldu.
silhouette_score değerine bakılırsa;
silhouette_score(x,predict_model)
Çıktı:
0.34160069134500454