Titanik-Makine Öğrenmesi

Ramazan Özdemir
4 min readApr 26, 2021

--

Herkese merhaba! Bu yazımda sizlere makine öğrenmesiyle titanik faciasında yaşam durumu belirli olmayan bazı insanların kurtulup kurtulamadığını tahmin ettiğim bir projemi anlatacağım. Veri setini Kaggle sitesinden aldım. Bu bilgiler içerisinde düzeltilmesi gereken sorunlar vardı. Bu sorunları nasıl çözdüğümü, adım adım ne yaptığımı ve neden yaptığımı açıklayacağım. Projemi Google Colab ile yaptım. Projeye ve veri setine PROJE kısmından erişebilirsiniz. Hazırsanız başlayalım :).

Veri setindeki değişkenler ve açıklamaları:

  • Survived: hayatta kalma(0 = Hayır, 1 =Evet)
  • Pclass: bilet sınıfı
  • Sex: cinsiyet
  • Sibsp: Titanik’teki kardeş/eş sayısı
  • Parch:Titanik’teki ebeveynlerin/çocukların sayısı
  • Ticket: bilet numarası
  • Fare: ücret
  • Cabin: kabin numarası
  • Embarked: biniş limanı
  • Kullandığım kütüphaneler.
  • Öncelikle notebook’u drive’a bağladım ve dosyaları yükledim. İlk satırda bizden bir kod isteyecek. Drive’a bağlanarak o linki alıp yapıştıracağız. İkinci satırla ise dosyaları yükleyeceğiz.
  • Test ve train DataFrame’leri oluşturdum
  • “info()” metoduyla DataFrame’leri inceledim.
  • Train ve test DataFrame’leri df adlı bir değişken altında birleştirdim.
  • “df.info()” yaparak df DataFrame’i inceledim.
  • DataFrame’i somut bir şekilde incelemek için “head()” metoduyla ilk 5 satırı görüntüledim.
  • Embarked değişkenindeki 2 tane eksik veriyi değişkenin moduyla doldurdum.
  • “Cabin” değişkenindeki boş verileri “N” karakteriyle doldurdum. Bunu yapma sebebim ise tüm kabinlerin bir karakterle başlayıp sayıyla devam ediyordu. Ben de sadece karakter kısmıyla ilgileneceğim için boş verileri de “N” karakteriyle doldurdum.
  • “Cabin” değişkenindeki verilerin sadece karakter kısmını aldım.
  • Hayatta kalan insanların cinsiyetlerine göre dağılım grafiği
  • Ödenen ücrete göre hayatta kalma durumunun grafiği
  • Yolcunun bindiği yere göre hayatta kalma durumunun grafiği

Feature Engineering

  • Feature engineering, olan değişkenlerden yeni bir değişken çıkarmak veya olan değişkeni daha düzenli bir değişken haline getirmek denilebilir.
  • Daha ayrıntılı bilgi için Feature Engineering yazısını okumanızı tavsiye ederim.
  • Burada yolcuların ünvanlarına bakıp düzeltmeler yaptım.
  • Burada “SibSp” ve “Parch” değişkenlerini birleştirip bir de kendisini ekleyerek “Family” değişkenini oluşturdum.
  • Aileleri büyüklüklerine göre grupladım.
  • Yeni oluşan “Family” değişkeniyle “SibSp” ve “Parch” değişkenlerine ihtiyacım kalmadığı için onları sildim.
  • “Age” değişkenindeki boş verileri şu şekilde doldurdum: Her bir verinin ait olduğu ünvan grubunun medyan değeriyle doldurdum.
  • “Feature Engineering” işlemlerinden sonra df DataFrame
  • Id ve biletin yolcunun hayatta kalıp kalmamasına bir etkisi olmadığı için onları sildim.
  • DataFrame’in son halinin bilgilerini inceledim ve bir sorun göremedim.
  • DataFrame’i 2 parçaya ayırdım.
  • Train: Model seçiminde kullanacağım DataFrame
  • Test: Yaşam durumu belli olmayan yolcuların bilgileri bulunmaktadır. Model seçiminden sonra bu DataFrame’deki yolcuların yaşam durumunu belirledim.

Makine Öğrenmesi

  • Burada modelleri tanımladım.
  • Modelleri bir listeye koydum.
  • Modellerin isimlerini bir listeye koydum.
  • f1_score ve accuracy_score için listeler oluşturdum.
  • Bağımsız değişkenle(x) bağımlı değişkeni(y) tanımladım.
  • Bağımsız değişkene get_dummies() uyguladım.
  • “Cabin_T” değişkenini silmek zorunda kaldım. Çünkü yukarılarda tanımladığım test DataFrame’inde bu değişken bulunmamakta ve bu da sorun yaratmaktaydı
  • bağımlı ve bağımsız değişkenleri train ve testlere ayırdım
  • Detaylı bilgiler için → get_dumies() ve train_test_split()
  • Model seçimi için oluşturduğum bir fonksiyon.
  • Adım Adım ilerlersek
  1. Her bir modeli .fit(x_train, y_train) ile eğittim.
  2. “predict(y_test)” ile yaşam durumu tahmini yaptım.
  3. “accuracy_score(y_pred, y_test)” ile modelin başarı oranına çıkardım ve sonucu accu listesine ekledim.
  4. “f2_score(y_pred, y_test)” ile modelimin başarı oranını çıkardım ve sonucu f1 listesine ekledim.
  5. Her bir model için yaptığım bu işlemlerin sonuçlarını bir DataFrame haline getirip “return” ile sonucu dışarıya aktardım. Bu kısımda sonradan sonuçlara bakınca başarılı olan modelleri de return ile dışarıya aktardım.
  • “fitting” fonksiyonumun sonucu
  • En yüksek başarıya sahip olan “XGBClassifier” modeli ile yaşam durumu belli olmayan yolcularının yaşam durumlarını tahmin ettim.

Projemin sonuna geldik umarım yararlı olmuştur. Bu seriye devam edeceğim. Takipte kalın :)

GitHub hesabım → ozdmrramazan

LinkedIn hesabım →ramazan-ozdemir

--

--

Ramazan Özdemir
Ramazan Özdemir

Written by Ramazan Özdemir

Prompt Enigneer / Ege University Computer Engineering /

No responses yet