Python ile Sınıflandırma Grafiği Oluşturma

Python, veri bilimi ve makine öğrenmesi alanında sunduğu geniş kütüphane desteği ile sıklıkla tercih edilmektedir. Bu yazıda, Python kullanarak sınıflandırma işlemleri gerçekleştirdikten sonra, elde edilen sonuçları görselleştiren bir sınıflandırma grafiği (classification plot) oluşturmayı detaylı bir şekilde ele alacağız. Sınıflandırma grafikleri, modelin performansını ve verinizin çeşitliliğini anlamak için sıklıkla yararlanılan araçlardır. Özellikle, Seaborn ve Matplotlib gibi popüler kütüphanelerle bu tür görselleştirmeleri etkili bir şekilde gerçekleştirebilirsiniz.

Sınıflandırma Grafiğinin Önemi

Sınıflandırma grafikleri, bir modelin sınıflandırma yeteneğinin görsel temsilini sağlar. Veri setinizdeki gözlemleri daha iyi anlamanızı ve model sonuçlarınızı değerlendirmenizi kolaylaştırır. Özellikle, iki veya daha fazla sınıfın bulunduğu durumlarda, bu tür grafikler aralarındaki ayrımı net bir şekilde görmenizi sağlar. Örneğin, bir ikili sınıflandırma problemi için oluşturduğunuz grafik, sınıflar arasındaki sınırları ve modelinizin bu sınırları ne kadar iyi yakaladığını gösterir.

Öte yandan, aşağıda ele alacağımız görselleştirme teknikleri modelin doğruluğunu veya hata oranını anlamanın yanı sıra, yanlış sınıflandırılan örneklerin nerelerde yoğunlaştığını da gözler önüne serer. Bu bilgiler, modelinizin hangi alanlarda geliştirilmesi gerektiğine dair ipuçları sunabilir, dolayısıyla sonuçlarınızı optimize etmek için kritik bir adım teşkil eder.

Bu seri boyunca, Seaborn ve Matplotlib kütüphanelerinin yanı sıra, scikit-learn kullanarak sınıflandırma modelleri oluşturma ve bu modellerin sonuçlarını değerlendirme aşamalarını da birbirine entegre etmiş olacağız. Sınıflandırma grafiği oluşturmak için gerekli olan tüm temel adımları takip ederek, temel bir Python projesi geliştireceğiz.

Veri Kümesi ve Sınıflandırma Modeli

Başlangıç olarak, sklearn kütüphanesini kullanarak basit bir veri seti oluşturacağız. Bu örneğimizde, İris veri setini kullanabiliriz. İris veri seti, üç farklı türde iris bitkisini (setosa, versicolor, virginica) içeren ve her bir tür için dört özellik barındıran klasik bir veri setidir. Veri setini kullanarak bu bitkilerin türlerini tahmin eden bir model geliştireceğiz.

Öncelikle, gerekli kütüphaneleri yükleyelim ve veri setini içe aktarıp inceleyelim:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# Veri setini yükle
iris = load_iris()
X = iris.data
y = iris.target

# Veri kümesi üzerinde işlem yapabilmek için DataFrame oluşturalım
iris_df = pd.DataFrame(X, columns=iris.feature_names)
iris_df['species'] = y

# İlk birkaç satırı görüntüleyelim
print(iris_df.head())

Bu kod parçası, İris veri setini içe aktarıp Pandas DataFrame formatına dönüştürdü. Veri çerçevesinin ilk birkaç satırını yazdırarak, içerik hakkında bir fikir sahibi olduk. Şimdi veri setimizde bir eğitim ve test kümesi oluşturalım:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Artık veri kümemize sahip olduğumuza göre, basit bir sınıflandırma modeli oluşturalım. Random Forest sınıflandırıcısı kullanacağız ki bu model, genellikle yüksek doğruluk oranlarına ulaşabilir:

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

Modelimizi eğittikten sonra, test kümesi üzerinde tahminler yaparak sınıflandırma sonuçlarımızı elde edebiliriz:

y_pred = model.predict(X_test)

Artık modelimizin sınıflandırma sonuçlarını görselleştirmek için gerekli verilere sahibiz.

Sınıflandırma Grafiği Oluşturma

Bir sınıflandırma grafiği oluşturmak için Seaborn kütüphanesinin bazı işlevlerini kullanacağız. İki değişken üzerinden görsel bir temsil yaparak, sınıflandırdığımız verilerin nasıl dağıldığını ve hangi sınıfların model tarafından nasıl ayrıldığını görebileceğiz.

Öncelikle, Seaborn’un scatterplot işlevini kullanarak verilerimizi iki boyutlu bir grafikte görselleştirelim. Burada, ‘sepal length’ ve ‘sepal width’ özelliklerini kullanacağız:

plt.figure(figsize=(10, 6))
sns.scatterplot(x=iris_df['sepal length'], y=iris_df['sepal width'], hue=iris_df['species'], palette='viridis', s=100)
plt.title('İris Veri Seti - Sepal Boyu ve Sepal Genişliği Üzerine Sınıflandırma')
plt.xlabel('Sepal Boyutu')
plt.ylabel('Sepal Genişliği')
plt.show()

Yukarıdaki kod, verilerimizi scatter plot üzerinde görselleştirerek, hangi iris türünün hangi alanda yoğunlaştığını belirleyecektir. ‘hue’ parametresi, farklı türleri renkli noktalarla ayırmamıza olanak tanır. Bu sayede her bir iris türünün, seçilen iki özelliğe göre nasıl bir dağılım gösterdiği açıkça gözlemlenebilir.

Bir diğer önemli adım, modelimizin karar sınırlarını görselleştirmektir. Bunun için bir meshgrid oluşturarak, modelimizin tahminlerini her bir piksel için alabiliriz:

x_min, x_max = iris_df['sepal length'].min() - 1, iris_df['sepal length'].max() + 1
y_min, y_max = iris_df['sepal width'].min() - 1, iris_df['sepal width'].max() + 1

xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))

Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.figure(figsize=(12, 8))
plt.contourf(xx, yy, Z, alpha=0.3, cmap='viridis')
sns.scatterplot(x=iris_df['sepal length'], y=iris_df['sepal width'], hue=iris_df['species'], palette='viridis', s=100)
plt.title('Model Karar Sınırları ve Sınıflar')
plt.xlabel('Sepal Boyutu')
plt.ylabel('Sepal Genişliği')
plt.show()

Bu grafik, modelin karar sınırlarını ve sınıflar arasındaki ayrımı görselleştirdi. Yapılan tahminlerin hangi alanlarda yoğunlaştığını görmek, modelin başarısını değerlendirmek ve geliştirme alanlarını belirlemek için oldukça faydalıdır.

Model Performansının Değerlendirilmesi

Son olarak, oluşturduğumuz modelin doğruluğunu ve hata oranını değerlendirmeliyiz. Bunun için birkaç temel metriği hesaplayabiliriz. Aşağıda, confusion_matrix ve classification_report fonksiyonlarını kullanarak modelimizin performansını değerlendireceğiz:

from sklearn.metrics import confusion_matrix, classification_report

conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

print(conf_matrix)
print(class_report)

Confusion matrix, modelimizin doğru ve yanlış sınıflandırmalarını göstererek, hangi sınıfların daha fazla karıştığını anlamamıza yardımcı olur. Classification report ise, modelimizin hassasiyetini, geri çağırma oranını, F1 skorunu ve destek değerlerini gösterir. Bu bilgiler, modelin performansını nicel olarak değerlendirmenin yanı sıra, hangi sınıflar üzerinde daha fazla iyileştirme yapılması gerektiğine de ışık tutar.

İşte bu kadar! Artık Python ile Sınıflandırma Grafiği oluşturmayı öğrendik ve veri kümesinin iki boyutlu temsili üzerinden modelimizi değerlendirdik. Bu tür grafikler, veri analizi sürecinde hem keşfedici hem de model değerlendirme aşamalarında önemli yer tutar.

Veri bilimi ve makine öğrenmesi konularında daha fazla pratik yapmak ve farklı grafik türlerini keşfetmek, bilgilerinizi artıracak ve Python ekosisteminde daha yetkin hale gelmenizi sağlayacaktır. Unutmayın, kendi projeleriniz üzerinde çalışırken, bu tür analizleri ve görselleştirmeleri uygulamak pratik kazanmanın en iyi yollarından biridir!

Scroll to Top