Bu derste, hazır bir veri setini kullanarak basit bir ikili sınıflandırma (binary classification) modeli eğiteceğiz — modelin görevi, girilen özelliklere bakarak bir kaydın "1" mi yoksa "0" mı grubuna ait olduğunu tahmin etmek. Örnek olarak halka açık bir sağlık veri setini kullanacağız; bu, gerçek bir tıbbi teşhis aracı değil, öğrenme amaçlı bir makine öğrenmesi alıştırmasıdır.
Veri Setini Bulmak
Kaggle gibi açık veri platformlarında, satır satır özellik içeren ve son kolonda 0/1 formatında bir sonuç (etiket) barındıran birçok ücretsiz veri seti bulunur.
Kurulum
pip install pandas tensorflow
Veriyi Yüklemek ve Ayırmak
import pandas as pd
from sklearn.model_selection import train_test_split
veri = pd.read_csv("veri_seti.csv")
X = veri.drop(columns=["hedef"])
y = veri["hedef"]
X_egitim, X_test, y_egitim, y_test = train_test_split(X, y, test_size=0.2)
X, tahmin için kullanılacak tüm özellik kolonlarını içerir — hedef (tahmin edilecek) kolonu buradan çıkarıyoruz.y, yalnızca tahmin edilmek istenenhedefkolonunu içerir.test_size=0.2, verinin %20'sini modelin doğruluğunu ölçmek için ayırır; kalan %80 ile model eğitilir.
Modeli Kurmak
from tensorflow import keras
model = keras.models.Sequential([
keras.layers.Dense(256, input_shape=(X_egitim.shape[1],), activation="sigmoid"),
keras.layers.Dense(256, activation="sigmoid"),
keras.layers.Dense(1, activation="sigmoid"),
])
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
Sequential, katmanları sırayla (ard arda) dizen basit bir model yapısıdır.- İlk iki katman, veriyi işleyen "gizli katmanlar"dır — nöron sayısı ve katman sayısı arttıkça model daha karmaşık örüntüleri öğrenebilir, ama aşırı büyütmek gereksiz yavaşlığa ve ezberlemeye (overfitting) yol açabilir.
- Son katmandaki tek nöron, 0 ile 1 arasında bir olasılık değeri üretir — bu, "1 sınıfına ait olma olasılığı" olarak yorumlanır.
Modeli Eğitmek
model.fit(X_egitim, y_egitim, epochs=100)
epochs, modelin tüm eğitim verisini kaç kez baştan sona göreceğini belirler. Epoch sayısı arttıkça doğruluk genelde artar, ama belirli bir noktadan sonra artış yavaşlar ve eğitim süresi uzar — bu iki faktör arasında bir denge kurmanız gerekir.
Yeni Bir Veriyle Tahmin Yaptırmak
yeni_veri = [[45, 1, 130, 250, 0, 1, 150, 0, 2.3, 1]] # veri setindeki kolonlara uygun sırayla
tahmin = model.predict(yeni_veri)
print(f"Olasılık: {tahmin[0][0]:.2f}")
Model, 0'a yakın bir değer döndürürse "0" sınıfını, 1'e yakın bir değer döndürürse "1" sınıfını daha olası görüyor demektir — bu bir kesinlik değil, öğrenilen örüntülere dayalı bir olasılık tahminidir.
Önemli Uyarı
Bu, öğretim amaçlı basit bir örnektir — gerçek bir karar destek sistemi (özellikle sağlık gibi hassas alanlarda) çok daha titiz veri temizleme, doğrulama ve uzman gözetimi gerektirir. Buradaki amaç, bir sinir ağının uçtan uca nasıl kurulup eğitildiğini göstermektir.
Sırada Ne Var?
Sırada, Telegram botlarına geri dönüp bir botu yalnızca belirli bir grubun üyelerinin kullanabildiği bir yapı kuracağız.