Makine öğrenmesi alanında en popüler ve sık kullanılan veri setlerinden biri olan MNIST, el yazısı rakamların (0’dan 9’a kadar) yer aldığı büyük bir veri kümesidir. Bu veri seti, özellikle derin öğrenme ve görüntü işleme alanında yeni başlayanlar için mükemmel bir başlangıç noktasıdır. Python ile çalışmak, MNIST veri setinin analizi ve görselleştirilmesi sürecinde güçlü bir araçtır.
Bu yazıda, MNIST veri setini kullanarak bir makine öğrenme modeli oluşturmak için gereken temel adımları adım adım inceleyeceğiz. Ayrıca, veri setinin getirdiği zorluklar ve bu zorlukların üstesinden nasıl gelineceği hakkında da bilgi vereceğiz. Python programlama dili ve bu dilin avantajları ile MNIST veri setini birlikte kullanarak etkili uygulamalar geliştirmek için gereken her şey burada.
MNIST veri seti, 60,000 eğitim örneği ve 10,000 test örneğinden oluşur. Her örnek, 28×28 piksellik bir görüntü ile temsil edilir ve bu görüntüler grinin tonlarıyla ifade edilir (0 siyah, 255 beyaz). Amaç, bu rakamları tanıyabilen bir model oluşturmaktır. Şimdi gelin, MNIST veri setine Python ile nasıl yaklaşacağımızı inceleyelim.
MNIST Veri Setine Giriş
MNIST veri setine erişmek oldukça kolaydır. `Keras` kütüphanesi, MNIST veri setini yüklemek için kullanışlı bir fonksiyon sağlar. Bu sayede, veri setinin URL’sini bulmak veya indirmek için çok fazla zaman harcamak zorunda kalmayız. Keras ile MNIST veri setini yüklemek için şu kodu kullanabilirsiniz:
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
Yukarıdaki kod, MNIST veri setini iki gruba ayırır: eğitim verileri ve test verileri. Her iki grup da görüntüleri (x) ve bunların etiketlerini (y) içerir. Eğitim seti ile modelimizi oluşturacağız, test seti ile de modelimizin performansını değerlendireceğiz.
MNIST veri setinin temel özelliklerine bahsedecek olursak, her bir görüntünün 28×28 piksel olduğunu ve her pikselin 0-255 arasında bir değere sahip olduğunu söyleyebiliriz. Bu değerler, görüntüyü oluşturan gri tonlarının parlaklığını temsil eder. Bu verilerin işlenmeden önce normalleştirilmesi gerektiğini unutmayın, böylece modelimiz daha iyi öğrenebilir.
Veri Ön İşleme
Veri analizi ve makine öğrenmesi süreçlerinde veri ön işleme oldukça kritik bir adımdır. MNIST veri setini kullanmadan önce birkaç işlem gerçekleştirerek verimizi modelimiz için uygun hale getirmeliyiz. İlk olarak, görüntüleri 0 ile 1 arasındaki değerlere normalize etmeliyiz. Bu adım, modelin daha iyi öğrenme yapabilmesi için önemlidir.
x_train = x_train / 255.0
x_test = x_test / 255.0
Ayrıca, bu görüntü verilerini yeniden şekillendirmemiz gerekiyor. MNIST veri setindeki görüntüler, 28×28 piksel boyutundayken, modelin girdi katmanı genellikle 28×28 yerine 784 (28*28) boyutlarında bir dizi bekliyor. Bu yüzden, her bir görüntüyü dizi olarak kullanabilmek için yeniden şekillendirmemiz gerekiyor:
x_train = x_train.reshape(-1, 28 * 28)
x_test = x_test.reshape(-1, 28 * 28)
Son olarak, etiketlerin one-hot kodlamasını yapmalıyız. Her rakamın 10 sınıftan birine ait olduğu için, her bir rakama karşılık gelecek şekilde etiket maalesef sadece bir değer içermektedir. Örneğin, rakam 3 ise, etiket [0, 0, 0, 1, 0, 0, 0, 0, 0, 0] olacak şekilde temsil edilmelidir. Keras ile bunu yapmak oldukça kolaydır:
from keras.utils import to_categorical
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
Modelin Oluşturulması
Şimdi veri setimizi hazırladığımıza göre, bir makine öğrenme modeli oluşturmaya geçebiliriz. Python ile Keras kütüphanesini kullanarak basit bir yapay sinir ağı (YSA) oluşturacağız. Modelimiz giriş katmanı, gizli katman ve çıkış katmanından oluşacak. İlk olarak, Keras’tan gerekli bileşenleri içe aktaralım:
from keras.models import Sequential
from keras.layers import Dense, Flatten
Burada, oluşturacağımız model için `Sequential` sınıfını kullanıyoruz. Modeli oluşturduktan sonra katmanları eklemeye başlayabiliriz:
model = Sequential()
model.add(Flatten(input_shape=(784,))) # Görüntüleri düzleştir
model.add(Dense(128, activation='relu')) # Gizli katman
model.add(Dense(10, activation='softmax')) # Çıkış katmanı
Modelimizde ilk olarak, `Flatten` katmanını kullanarak 28×28 boyutundaki görüntüyü 784 boyutluk bir vektöre dönüştürüyoruz. Ardından, `Dense` katmanını ekleyerek 128 nörondan oluşan bir gizli katman ve 10 nörondan oluşan bir çıkış katmanı ekliyoruz. Son çıkış katmanı, softmax aktivasyon fonksiyonunu kullanarak her bir rakama ait olma olasılıklarını hesaplayacak.
Modelin Derlenmesi ve Eğitilmesi
Modeli oluşturduktan sonra, onu derlemek ve eğitmek için birkaç adım daha atmamız gerekiyor. Modelimizi derlemek için, kayıp fonksiyonu ve optimizasyon algoritması belirlememiz gerekmektedir. MNIST veri seti için sıkça kullanılan kayıp fonksiyonu `categorical_crossentropy`, optimizasyon için ise `adam` algoritmasını kullanacağız:
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Model hazır olduğunda, eğitim verilerimizle modeli eğitebiliriz. Eğitim süresi genellikle düşük olmakla birlikte, modelin öğrenmesini görmek için birkaç çağrı yapmanız yeterli olabilir. Aşağıda, modelimizi fit ederek eğitiyoruz:
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
Burada, modelin eğitim süresini 10 epoch (bir defa tüm eğitim verilerinin kullanılması) olarak ayarladık ve 32’lik bir grup boyutu ile eğitim yaptık. `validation_split` parametresi, eğitim verilerinin %20’sinin validasyon olarak ayrılmasını sağlar.
Modelin Değerlendirilmesi
Modelimizi eğittikten sonra, performansını test verileriyle değerlendirmemiz gerekiyor. Bunun için, `evaluate` fonksiyonunu kullanabiliriz. Test verilerinin model üzerindeki etkisini görmek, modelin gerçek performansını anlamak açısından oldukça önemlidir. İşte bunu nasıl yapacağımız:
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f'Test kaybı: {test_loss}, Test doğruluğu: {test_accuracy}')
Yukarıdaki kod, test setindeki kayıp ve doğruluğu hesaplar ve yazdırır. Böylece, modelimizin genel performansını değerlendirebiliriz. Sıklıkla, yüksek doğruluk oranları (genellikle %97 – %99 arası) elde edebilmek mümkündür.
Sonuç ve İpuçları
Python ile MNIST veri setini kullanarak yapılan bu girişim, makine öğrenmesine ilk adımınızı atmanıza yardımcı olacaktır. Bu süreç, sadece Python dilini kullanmakla kalmayıp, aynı zamanda veri biliminin temel ilkeleri ve makine öğreniminde karşılaşabileceğiniz temel kavramlarla tanışmanızı sağlayacaktır.
Makine öğrenmesi uygulamalarınızda başarınızı artırmak için, modelinizi değerlendirirken farklı hiperparametre ayarlarını deneyebilir, farklı aktivasyon fonksiyonları veya diğer model mimarileri ile oynamayı düşünebilirsiniz. Bunun yanında, daha karmaşık veri setleri ve derin öğrenme yöntemleri hakkında bilgi edinmek için daha ileri seviye kaynakları araştırarak kendinizi geliştirebilirsiniz.
Son olarak, sürekli denemeler yapmak ve hatalardan öğrenmek, makine öğrenmesi alanında ustalaşmanın en etkili yoludur. Unutmayın, hata yapmak gelişimin bir parçasıdır. Şimdi kendi projelerinize başlayın ve öğrendiklerinizi pratiğe dökün!