Python’da Regresyon İçin ANN Kullanımı

Yapay Sinir Ağlarına Giriş

Yapay Sinir Ağları (ANN), insan beyninin çalışma prensiplerinden esinlenerek geliştirilmiş bir makine öğrenimi tekniğidir. Nöron adı verilen küçük bilgi işleme birimlerinin bir araya gelmesiyle oluşan çok katmanlı yapılar, karmaşık ilişkileri öğrenme ve tahmin etme yeteneğine sahiptir. Günümüzde, bu teknikler özellikle regresyon ve sınıflandırma problemlerinde oldukça popüler hale gelmiştir. Bu yazıda, Python programlama dili kullanarak regresyon analizi için ANN uygulamalarını derinlemesine inceleyeceğiz.

Yapay sinir ağları, girdi verilerini işlemek için bir dizi katmandan geçer: giriş katmanı, gizli katmanlar ve çıkış katmanı. Her nöron, kendisine gelen girişleri belirli bir ağırlık ile çarpar ve ardından bir aktivasyon fonksiyonu aracılığıyla çıktılar üretir. Bu yapı, daha karmaşık özgül fonksiyonların öğrenimini mümkün kılar. Üstelik, derin öğrenme alanında popülarite kazanan derin yapay sinir ağları, çok sayıda gizli katmana sahip olmasıyla dikkat çeker.

Bu yazıda amacımız, ANN’lerin regresyon problemlerinde nasıl kullanılabileceğini ve Python dilinde bu ağların nasıl kurulacağını açıklamaktır. Regresyon analizi, iki ya da daha fazla değişken arasındaki ilişkiyi inceleyerek bağımlı değişkenin tahmin edilmesini amaçlar. Bu tür bir analizde ANN kullanmak, doğrusal ilişkilerin yanı sıra karmaşık ve doğrusal olmayan ilişkileri de keşfetmemizi mümkün kılar.

Python’da ANN ile Regresyon Probleminin Tanımlanması

Bir regresyon problemi, genellikle bir bağımlı değişken ve bir veya daha fazla bağımsız değişken arasındaki ilişkiyi modellemeyi içerir. Örneğin, bir evin fiyatını tahmin etmek için evin büyüklüğü, oda sayısı, lokasyon gibi bağımsız değişkenler kullanılabilir. Bu tür verilerle çalışırken, geleneksel regresyon yöntemleri bazen yetersiz kalabilir. İşte bu noktada ANNg gibi karmaşık yapılar devreye girer.

Peki ANN’ler regresyon problemlerinde nasıl çalışır? İlk olarak, girdi verileri normalize edilmeli ve uygun bir şekilde işlenmelidir. Daha sonra, sinir ağının mimarisi belirlenir; bu, katman sayısı, nöron sayısı ve aktivasyon fonksiyonlarının seçimi gibi parametreleri içerir. Genellikle ReLU (Rectified Linear Unit) gibi aktivasyon fonksiyonları, gizli katmanlarda yaygın olarak kullanılırken, çıkış katmanında regresyon problemleri için sıklıkla lineer aktivasyon fonksiyonu tercih edilir.

Modelimizi oluşturduktan sonra, verilerimizi eğitim ve test setlerine ayırarak modelimizi eğitmeye başlayabiliriz. Modelin eğitimi sırasında hata (kayıp) fonksiyonu kullanılarak ağırlıkların güncellenmesi sağlanır. Bu aşamada dikkat edilmesi gereken faktörlerden biri, aşırı öğrenme (overfitting) problemini önlemektir. Aşırı öğrenme, modelin eğitim verisine çok iyi uyum sağlarken, yeni, görülmemiş veriler için kötü performans göstermesi durumudur.

Python’da ANN ile Regresyon Uygulaması

Şimdi, Python kullanarak bir yapay sinir ağı ile regresyon problemi çözme adımlarını ele alalım. Öncelikle gerekli kütüphaneleri yükleyerek başlayacağız:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from keras.models import Sequential
from keras.layers import Dense

Bu kütüphaneler, veri işleme, standartlaştırma, model oluşturma ve görselleştirme işlemlerinde kullanılacaktır. İlk olarak, bir veri seti kullanarak regresyon problemimizi kurgulayalım. Örneğin, ev fiyatlarını tahmin etmeye çalışalım:

data = pd.read_csv('housing_data.csv')
X = data.iloc[:, :-1].values  # Bağımsız değişkenler
Y = data.iloc[:, -1].values   # Bağımlı değişken

Sonrasında, verimizi eğitim ve test setlerine ayırarak aşağıdaki gibi işlem yapalım:

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)

Verilerinizi train ve test setlerine ayırdıktan sonra, standartlaştırma işlemini gerçekleştireceğiz. Bu, verilerin ortalamasının sıfır ve standart sapmasının bir olmasını sağlar:

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

Yapay Sinir Ağı Modelinin Oluşturulması

Verilerimizi hazırladıktan sonra, yapay sinir ağı modelimizin mimarisini oluşturmaya geçiyoruz. Basit bir model ile başlayalım:

model = Sequential()
model.add(Dense(units=64, activation='relu', input_dim=X_train.shape[1]))
model.add(Dense(units=32, activation='relu'))
model.add(Dense(units=1, activation='linear'))

Bu mimaride, ilk katman 64 nöron, ikinci katman 32 nöron ile yapılandırılmış ve çıkış katmanında regresyon için lineer bir aktivasyon fonksiyonu kullanılmıştır. Şimdi modelimizi derleyelim:

model.compile(optimizer='adam', loss='mean_squared_error')

Adam optimizasyon algoritması, yaygın olarak kullanılan bir yöntemdir ve genellikle hızlı bir şekilde iyi sonuçlar verir. Hata fonksiyonu olarak ise ortalama kare hata (MSE) seçilmiştir. Şimdi modelimizi 100 çağrıda eğitelim:

model.fit(X_train, Y_train, epochs=100, batch_size=10)

Eğitim tamamlandığında, modelin test verileri üzerinde performansını değerlendirmeye geçebiliriz. Aşağıdaki gibi yapabiliriz:

Y_pred = model.predict(X_test)
rmse = np.sqrt(np.mean(np.square(Y_pred - Y_test)))
print('RMSE: ', rmse)

Sonuçların Görselleştirilmesi

Modelimizin tahminlerinin ne kadar doğru olduğunu görsel olarak incelemek, elde ettiğimiz sonuçların analiz edilmesinde önemlidir. Yine matplotlib kütüphanesini kullanarak bir grafik oluşturabiliriz:

plt.scatter(Y_test, Y_pred)
plt.xlabel('Gerçek Değerler')
plt.ylabel('Tahmin Edilen Değerler')
plt.title('Gerçek vs Tahmin Edilen Değerler')
plt.plot([min(Y_test), max(Y_test)], [min(Y_test), max(Y_test)], color='red')
plt.show()

Bu grafik, modelimizin tahminlerini gerçek değerlerle karşılaştırmamıza olanak tanır. Nihayetinde, noktalar, kırmızı çapraz çizginin etrafında ne kadar yoğun yerleşiyorsa, modelimizin o kadar iyi tahminler yaptığını gösterir.

Hatalar ve Çözümleri

Yapay sinir ağları ile çalışırken, bazı yaygın hatalarla karşılaşabilirsiniz. Bu hataların başında aşırı öğrenme gelir. Aşırı öğrenmeyi önlemek için tekniklerden biri, Dropout katmanı eklemektir. Aşağıdaki gibi bir örnek ile başlayabilirsiniz:

from keras.layers import Dropout
model.add(Dropout(0.5))

Bu katman, her eğitim adımında belirli bir oranda nöronları rastgele kapatarak modelin genelleme yeteneğini artırır. Ayrıca, eğitim süresini iyileştirmek için erken durdurma (early stopping) mekanizmasını da kullanabilirsiniz. Bu, belirli bir sayıda eğitim çağrısında modelin doğruluğunun iyileşmediği durumlarda eğitimi durdurmanıza olanak tanır.

Diğer bir sorun ise veri setinin dengesiz olmasıdır. Dengesiz veri setleri, modelin yalnızca en sık görülen sınıf üzerinde yoğunlaşmasına neden olabilir. Bunun önüne geçmek için veri artırma (data augmentation) veya SMOTE gibi teknikler kullanarak veri setinizi dengelemeyi düşünebilirsiniz.

Sonuç

Özetlemek gerekirse, Python’da ANN’ler, regresyon problemlerini çözmek için güçlü bir araçtır. Bu yazıda, yapay sinir ağları ile regresyon analizi için temel adımları paylaştık. Verileri hazırlamak, modelin mimarisini oluşturmak ve sonuçları görselleştirmek gibi işlemleri gerçekleştirdik. Yapay sinir ağlarını kullanmak sayesinde, karmaşık ilişkileri daha etkili bir şekilde modelleyebiliriz. Zamanla ve pratikle, ANN kullanımıyla daha da başarılı regresyon analizleri gerçekleştirebilirsiniz.

Yazının sonu olarak, sizleri projelerinizde yapay sinir ağlarını denemeye ve keşfetmeye teşvik ediyorum. Verilerinizi analiz etmenin ve tahminler yapmanın yanı sıra, bu yeni teknolojiyle birlikte öğrenim sürecinizi hızlandırabilirsiniz. Unutmayın ki pratik, ustalaşmanın anahtarıdır!

Scroll to Top