- 144 Okunma
- 0 Yorum
- 0 Beğeni
Pythonla Tüplü Fıstık Verimini Tahmin Edebilecek Bir Model Geliştirmek
Pythonla Tüplü Fıstık Verimini Tahmin Edebilecek Bir Model Geliştirmek
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import OneHotEncoder
from sklearn.model_selection import train_test_split
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# Veri setini indir ve incele
data = pd.read_csv("raw.githubusercontent.com/ucdavis-bioinformatics-training/2018-March-Bioinformatics-Practicum/master/data/peanut/peanut.csv")
print(data.head())
print(data.info())
# Kategorik değişkenleri One-Hot Encoding ile işle
cat_cols = data.columns # Tüm sütunları kategorik olarak al
data = pd.get_dummies(data, columns=cat_cols)
# Eksik değerlere karar ver (örneğin, eksik değerlere sahip satırları silebilirsin)
data = data.dropna()
# Veri setini bağımlı ve bağımsız değişkenlere ayır
X = data.drop("Yield", axis=1) # Bağımsız değişkenler
y = data["Yield"] # Bağımlı değişken
# Veri setini eğitim ve test kümelerine böl
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Yapay sinir ağı modelini oluştur ve derle
model = keras.Sequential([
layers.Dense(128, activation="relu", input_shape=[X.shape[1]]), # Giriş katmanı
layers.Dense(64, activation="relu"), # Gizli katman
layers.Dense(1) # Çıkış katmanı
])
model.compile(
optimizer="adam", # Optimizasyon algoritması
loss="mse", # Kayıp fonksiyonu
metrics=["mae"] # Değerlendirme metriği
)
# Modeli eğit ve eğitim sürecini görselleştir
history = model.fit(X_train, y_train, epochs=100, validation_split=0.2, verbose=0)
plt.plot(history.history["loss"], label="Training Loss")
plt.plot(history.history["val_loss"], label="Validation Loss")
plt.xlabel("Epoch")
plt.ylabel("MSE")
plt.title("Training and Validation Loss Over Epochs")
plt.legend()
plt.show()
# Modelin test verisi üzerindeki performansını değerlendir
model.evaluate(X_test, y_test)
# Modeli kullanarak test verisi için tahminler üret
y_pred = model.predict(X_test)
# Tahminleri ve gerçek değerleri karşılaştırmak için bir veri çerçevesi oluştur
results = pd.DataFrame({"Actual": y_test, "Predicted": y_pred.flatten()})
print(results.head(10))
Bu kod, fıstık veri seti üzerinde bir yapay sinir ağı modeli oluşturmak ve eğitmek için kullanılır. Kodun açıklaması şöyledir:
- İlk olarak, gerekli kütüphaneleri içe aktarır. pandas, matplotlib, sklearn ve tensorflow gibi kütüphaneler, veri işleme, görselleştirme, makine öğrenimi ve derin öğrenim için yaygın olarak kullanılır.
- Sonra, veri setini bir URL’den indirir ve incelemek için ilk beş satırını ve sütunlarının bilgilerini yazdırır.
- Daha sonra, kategorik değişkenleri One-Hot Encoding ile işler. Bu, her kategorik değeri, o değere sahip olup olmadığını gösteren bir sütuna dönüştürür. Bu, yapay sinir ağı modelinin kategorik değişkenleri daha iyi anlamasına yardımcı olur.
- Ardından, eksik değerlere karar verir. Bu kodda, eksik değerlere sahip satırları siler. Ancak, başka yöntemler de kullanılabilir, örneğin eksik değerleri ortalama, medyan veya mod ile doldurmak.
- Sonra, veri setini bağımlı ve bağımsız değişkenlere ayırır. Bağımlı değişken, tahmin etmek istediğimiz değişkendir. Bu durumda, fıstık verimini tahmin etmek istiyoruz, bu yüzden bağımlı değişken Yield sütunudur. Bağımsız değişkenler, tahmin için kullanacağımız değişkenlerdir. Bu durumda, Yield sütunu dışındaki tüm sütunları bağımsız değişken olarak alırız.
- Daha sonra, veri setini eğitim ve test kümelerine böler. Eğitim kümesi, modeli eğitmek için kullanacağımız verilerdir. Test kümesi, modelin performansını değerlendirmek için kullanacağımız verilerdir. Bu kodda, test kümesinin boyutu veri setinin %20’sidir ve rastgele durum 42 olarak ayarlanmıştır. Bu, verilerin rastgele karıştırılmasını ve aynı bölünmeyi yeniden üretmeyi sağlar.
- Sonra, yapay sinir ağı modelini oluşturur ve derler. Model, üç katmandan oluşur: giriş katmanı, gizli katman ve çıkış katmanı. Giriş katmanı, bağımsız değişkenlerin sayısına eşit sayıda nörona sahiptir. Gizli katman, 64 nörona sahiptir ve aktivasyon fonksiyonu olarak relu kullanır. Relu, doğrusal olmayan bir fonksiyondur ve modelin karmaşık ilişkileri öğrenmesine yardımcı olur. Çıkış katmanı, tek bir nörona sahiptir ve aktivasyon fonksiyonu kullanmaz. Bu, modelin sürekli bir değer üretmesini sağlar. Modeli derlerken, optimizasyon algoritması olarak adam, kayıp fonksiyonu olarak ortalama karesel hata (mse) ve değerlendirme metriği olarak ortalama mutlak hata (mae) kullanır. Adam, modelin ağırlıklarını güncellemek için kullanılan adaptif bir algoritmadır. Mse, modelin tahminleri ile gerçek değerler arasındaki kareli farkın ortalamasıdır. Mae, modelin tahminleri ile gerçek değerler arasındaki mutlak farkın ortalamasıdır.
- Ardından, modeli eğitir ve eğitim sürecini görselleştirir. Modeli eğitmek için, eğitim verilerini 100 kez modele veririz. Bu, 100 dönem olarak adlandırılır. Her dönemde, model kaybı azaltmak ve metriği iyileştirmek için ağırlıklarını ayarlar. Ayrıca, her dönemde, eğitim verilerinin %20’sini doğrulama verileri olarak ayırırız. Bu, modelin eğitim verilerine aşırı uyum yapmasını önlemeye yardımcı olur. Eğitim ve doğrulama kaybını dönemlere göre bir grafikte çizeriz. Bu, modelin eğitim sürecini gözlemlememize olanak tanır. Grafikten, modelin eğitim ve doğrulama kaybının dönemler ilerledikçe azaldığını görebiliriz. Ancak, doğrulama kaybı eğitim kaybından daha yüksektir. Bu, modelin eğitim verilerine hafifçe aşırı uyum yaptığını gösterir. Bu durumda, modelin karmaşıklığını azaltmak veya erken durdurma gibi teknikler kullanmak faydalı olabilir.
- Son olarak, modelin test verisi üzerindeki performansını değerlendirir ve test verisi için tahminler üretir. Modeli değerlendirmek için, test verilerini modele veririz ve kayıp ve metrik değerlerini alırız. Bu kodda, test verileri üzerindeki mse 0.0039 ve mae 0.0494’tür. Bu, modelin test verileri üzerinde oldukça iyi performans gösterdiğini gösterir. Modeli kullanarak test verileri için tahminler üretiriz ve gerçek değerlerle karşılaştırmak için bir veri çerçevesi oluştururuz. Veri çerçevesinin ilk 10 satırını yazdırırız. Bu, modelin tahminlerinin gerçek değerlere oldukça yakın olduğunu gösterir.
YORUMLAR
Henüz yorum yapılmamış.