Python Makine öğrenimi için test veri kümeleri oluşturmak
Python Makine öğrenimi için test veri kümeleri oluşturmak
Python'da makine öğrenimi projelerinde test veri kümeleri oluşturmak, modelin performansını doğru bir şekilde değerlendirebilmek için oldukça önemlidir. Test veri kümeleri, modelinizin eğitim verilerine hiç rastlamadığı ve dolayısıyla modelin genelleme yeteneğini ölçen bir veri kümesidir. Bu süreci detaylı bir şekilde ele alalım.
1. Giriş
Makine öğrenimi projelerinde veri kümenizi genellikle şu şekilde bölersiniz:
- Eğitim Seti (Training Set): Modeli eğitmek için kullanılır.
- Test Seti (Test Set): Modelin eğitim sırasında hiç görmediği veri ile performansını değerlendirmek için kullanılır.
- Doğrulama Seti (Validation Set) (Opsiyonel): Modelin hiperparametrelerini ayarlamak ve modelin genel performansını değerlendirmek için kullanılır.
Önemli: Özellikle küçük veri setlerinde, train_test_split
fonksiyonu yalnızca eğitim ve test setleri ayırmak için kullanılır. Daha büyük veri setlerinde, eğitim ve test setlerinin yanı sıra doğrulama seti de kullanılır.
2. Gerekli Kütüphaneler
Python'da veri kümenizi bölmek için en sık kullanılan kütüphane Scikit-learn'dir. İlk adım, gerekli kütüphaneleri içe aktarmaktır:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
3. Veri Setinin Hazırlanması
Öncelikle, veri setinizi hazırlamanız gerekmektedir. Bu aşama, verileri yüklemek ve gerekli özniteliklerin (özelliklerin) ve etiketlerin ayrılmasını içerir.
Örnek Veri Seti Oluşturma
Aşağıda, basit bir veri seti oluşturan örnek bir kod bulunmaktadır:
# Örnek veri seti oluşturma
data = {
'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'feature2': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
'label': [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
}
df = pd.DataFrame(data)
X = df[['feature1', 'feature2']] # Özellikler
y = df['label'] # Etiketler
4. Veriyi Eğitim ve Test Setlerine Bölme
Scikit-learn'ün train_test_split
fonksiyonunu kullanarak veriyi eğitim ve test setlerine bölebilirsiniz.
Temel Kullanım
# Veriyi eğitim ve test setlerine bölme
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.3, # Test setinin oranı (örn: %30)
random_state=42 # Sonuçların tekrar üretilebilirliğini sağlamak için
)
test_size
: Test setinin oranını belirtir. Örneğin,test_size=0.3
ifadesi, verinin %30'unun test seti olarak ayrılmasını sağlar. Bu parametre bir oran (0.0 ile 1.0 arasında) veya bir tam sayı olabilir.random_state
: Rastgelelik tohumunu belirler. Aynırandom_state
değeri kullanıldığında, aynı veri bölmelerini tekrar elde edersiniz. Bu, tekrarlanabilir sonuçlar elde etmenizi sağlar.shuffle
: Verinin karıştırılıp karıştırılmayacağını belirler. Varsayılan olarakTrue
'dır, ancakshuffle=False
olarak ayarlanabilir.stratify
: Sınıflar arasında dengeli bir bölünme sağlar. Özellikle sınıfların dengesiz olduğu veri setlerinde,stratify=y
kullanmak, her iki setin de orantılı sınıf dağılımını korur.
stratify
Kullanımı
Eğer veri setinizde sınıf dengesizliği varsa, stratify
parametresini kullanarak her iki setin de orantılı sınıf dağılımını koruyabilirsiniz:
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.3,
random_state=42,
stratify=y
)
5. Veri Kümesi Kontrolü
Elde edilen eğitim ve test veri kümelerini kontrol edebilirsiniz:
print("Eğitim Özellikleri:")
print(X_train)
print("\nEğitim Etiketleri:")
print(y_train)
print("\nTest Özellikleri:")
print(X_test)
print("\nTest Etiketleri:")
print(y_test)
6. Eğitim ve Test Setlerinin Kullanımı
Eğitim Seti
Eğitim seti, modelin öğrenme sürecinde kullanılır:
from sklearn.linear_model import LogisticRegression
# Model oluşturma ve eğitme
model = LogisticRegression()
model.fit(X_train, y_train)
Test Seti
Test seti, modelin performansını değerlendirmek için kullanılır:
from sklearn.metrics import accuracy_score
# Tahmin yapma
y_pred = model.predict(X_test)
# Sonuçları değerlendirme
accuracy = accuracy_score(y_test, y_pred)
print(f"Modelin doğruluk skoru: {accuracy}")
7. Ekstra: Doğrulama Seti (Validation Set) Kullanımı
Büyük veri setlerinde, genellikle doğrulama seti de kullanılır. Bu set, eğitim sırasında modelin performansını ayarlamak ve hiperparametreleri seçmek için kullanılır.
# Veri setini eğitim, doğrulama ve test setlerine bölme
X_train, X_temp, y_train, y_temp = train_test_split(
X, y,
test_size=0.4,
random_state=42
)
X_val, X_test, y_val, y_test = train_test_split(
X_temp, y_temp,
test_size=0.5, # Bu durumda, test ve doğrulama setleri eşit olacak
random_state=42
)
8. Tam Kod Örneği
İşte tüm süreci kapsayan kapsamlı bir kod örneği:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# Veri seti oluşturma
data = {
'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'feature2': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
'label': [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
}
df = pd.DataFrame(data)
X = df[['feature1', 'feature2']]
y = df['label']
# Veriyi eğitim ve test setlerine bölme
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.3,
random_state=42,
stratify=y
)
# Model oluşturma
model = LogisticRegression()
model.fit(X_train, y_train)
# Tahmin yapma
y_pred = model.predict(X_test)
# Sonuçları değerlendirme
accuracy = accuracy_score(y_test, y_pred)
print(f"Modelin doğruluk skoru: {accuracy}")
Bu süreç, makine öğrenimi projelerinde veriyi etkili bir şekilde bölmenize ve modelinizin performansını doğru bir şekilde değerlendirmenize yardımcı olacaktır.
Bu Yazıya Tepkin Nedir?