OPTICS (Ordering Points To Identify the Clustering Structure - Kümeleme Yapısını Tanımlamak İçin Sıralama Noktaları), yüksek yoğunluklu çekirdek örneğini bularak bu değerlerden kümeleri geliştirir. Yapısal olarak DBSCAN'a benzer yönleri de vardır. Büyük veri setlerinde kullanım için DBSCAN algoritması OPTICS yerine tercih edilebilir.
Kullanabilmek için "OPTICS" algoritmasının içe aktarılması gerekmektedir.
from sklearn.cluster import OPTICS
Söz dizimi: OPTICS(*, min_samples=5, max_eps=inf, metric='minkowski', p=2, metric_params=None, cluster_method='xi', eps=None, xi=0.05, predecessor_correction=True, min_cluster_size=None, algorithm='auto', leaf_size=30, memory=None, n_jobs=None)
- min_samples, çekirdek olarak kabul edilecek noktanın komşusundaki örnek sayısını temsil eder. Varsayılan olarak 5'dir.
- eps, iki nokta arasındaki mesafeyi temsil eder.
- algorithm, noktasal mesafeleri hesaplamak ve en yakın komşuları bulmak için kullanılacak algoritmadır. 4 farklı değer alabilir: "auto", "ball_tree", "kd_tree", "brute". Varsayılan olarak "auto" dur.
Örnek-1: Cars veri seti üzerinden, sayısal olan sütunlara OPTICS 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 OPTICS
from sklearn.preprocessing import StandardScaler
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ı
x.describe()
Çıktı:
Model Oluşturma İşlemleri
#StandardScaler işlemi yapılır
X=StandardScaler().fit_transform(x)
#OPTICS ataması yapılır
model=OPTICS(min_samples = 15, xi = 0.05, min_cluster_size = 0.005)
#Model eğitme ve Tahminleme işlemi
predict_model=model.fit_predict(X)
#tahmin edilen kümelemenin ilk 20 değerini yazdıralım
predict_model[0:20]
Çıktı:
array([0, 6, 6, 7, 4, 6, 6, 6, 4, 0, 7, 6, 6, 0, 0, 6, 7, 0, 6, 0])
#Veri seti değerlerinin kümeleme öncesi dağılım grafiği
plt.figure(figsize=(10,6))
plt.scatter(X[:,0],X[:,1])
plt.title("Veri seti değerlerinin kümeleme sonrası kümeleme dağılım grafiği")
plt.colorbar()
plt.show()
Çıktı:
#Veri seti değerlerinin kümeleme sonrası dağılım grafiği
plt.figure(figsize=(10,6))
plt.scatter(X[:,0],X[:,1],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 OPTICS kümeleme algoritması kullanılarak 14 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.28715527998969226