Bu hafta ilk uygulamamız olan araçların yakıt tüketim tahmini ile başlangıç yapacağız. Bildiğiniz üzere makine öğrenimi ve derin öğrenmenin yakıtı veridir. Uygulamada kullandığımız veri setini UCI Machine Learning Repository sitesinden elde ettik ayrıca daha birçok veri seti sitede mevcut dilerseniz siteyi ziyaret edebilirsiniz. Uygulamamızın amacı araçların silindir, beygir gücü, ağırlık, ivme, model yılı gibi özelliklerine(feature) bakarak yakıt tüketim tahmini yapmak.
Öncelikle kullanacağımız data seti yukarda belirttiğim siteden indirdik ardından kullanacağımız kütüphaneleri yükledik. Veriyi bilgisayarıma indirdikten sonra kodları yazdığımız Colab’a yükledim.
#kütüphanelerin kurulumu
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
Ardından dosya_yolu değişkenine verimizin yolunu atadık, column_name ile sütunlarımızın isimlendirmesini yaptık, dataset değişkenine ise verimizi(data) atamış olduk.
#verilerin yüklenmesi
dosya_yolu = '/content/sample_data/auto-mpg.data'
column_names = ['MPG', 'Cylinders', 'Displacement', 'Horsepower', 'Weight',
'Acceleration', 'Model Year', 'Origin']
dataset = pd.read_csv(dosya_yolu, names=column_names,
na_values='?', comment='\t',
sep=' ', skipinitialspace=True)
dataset yazıp çalıştırdığımızda verimizin özellikleri ve değerlerini çıktı olarak alırız. Verimiz 398 satır ve 8 sütundan oluşmaktadır.

#kayıp değerlerin belirlenmesi
dataset.isna().sum()

Datamızda horsepower sütununda 6 tane eksik değer olduğu belirleniyor bunu dropna() fonksiyonunu kullanarak gideriyoruz
#kayıp değerlerin giderilmesi
dataset = dataset.dropna()
Yukarda Origin adlı sütunumuz bize bulunduğu coğrafyadaki yerleri sayı cinsinden veriyor. Yani 1:Amerika 2:Avrupa 3: Japonya bizde bu değerlerin isim atamalarını yaptık. Ardından konumlara göre 3 sütun daha ekledik ve artık origin sütunu yerine Amerika, Avrupa ve Japonya sütunlarını oluşturduk.
dataset['Origin'] = dataset['Origin'].map({1: 'USA', 2: 'Europe', 3: 'Japan'})
dataset = pd.get_dummies(dataset, columns=['Origin'], prefix='', prefix_sep='')
dataset.tail()

Eğitim ve test verilerinin belirlenmesi verilerin %80’ini eğitim kalanı test için böldük
train_dataset = dataset.sample(frac=0.8, random_state=0)
test_dataset = dataset.drop(train_dataset.index)
Etiketlerden özellikleri ayırmakla modeli tahmin etmesi için eğiteceğimiz değerleri oluşturduk.
train_features = train_dataset.copy()
test_features = test_dataset.copy()
train_labels = train_features.pop('MPG')
test_labels = test_features.pop('MPG')
Normalizasyonun amacı sütunlardaki değerler birbirinden çok farklıysa örneğin 1-1000 veya 100-100.000 gibi,bunu belirli algoritmalarla 0-1 arasına veya kendi istedikleri aralığa bölerek sistemin daha verimli bir şekilde öğrenmesini sağlar.
normalizer = tf.keras.layers.Normalization(axis=-1)
normalizer.adapt(np.array(train_features))
print(normalizer.mean.numpy())
Değerlerimiz ve normalizasyon uygulandıktan sonraki halini görebilmek için
first = np.array(train_features[:1])
with np.printoptions(precision=2, suppress=True):
print('değerler', first)
print()
print('Normalizasyon:', normalizer(first).numpy())

Tek Değişkenli Doğrusal Regresyon için horsepower sütununu kullandık.
#horsepower değerlerini numpy array olarak atadık
horsepower = np.array(train_features['Horsepower'])
#horsepower değerlerinin normalize edilmesi
horsepower_normalizer = layers.Normalization(input_shape=[1,], axis=None)
horsepower_normalizer.adapt(horsepower)
#keras sıralı modeli oluştuduk
horsepower_model = tf.keras.Sequential([
horsepower_normalizer,
layers.Dense(units=1)
])
horsepower_model.summary()
#modelde kullanılacak optimezer ve loss metotlarının belirlenmesi
horsepower_model.compile(
optimizer=tf.optimizers.Adam(learning_rate=0.1),
loss='mean_absolute_error')
#kayıp değerlerin grafik gösterimi
def plot_loss(history):
plt.plot(history.history['loss'], label='loss')
plt.plot(history.history['val_loss'], label='val_loss')
plt.ylim([0, 10])
plt.xlabel('Epoch')
plt.ylabel('Error [MPG]')
plt.legend()
plt.grid(True)

Grafikte kayıp değerlerin hata oranının belli bir yere kadar(25-30) azaldığını görüyoruz, epoch sayısı modelin eğitimde kaç kere aynı veri üzerinden geçtiğini gösterir. Örneğin bir sütunda 20 satırlık verimiz varsa ve epoch=10 ise bu bize modelin 10 kere 20 satırlık veriyi dolaştığını gösterir.