Python Yapay Zeka

Titanik Felaketi (Makine Öğrenmesi Yarışması)

Öncelikle size Kaggle’dan bahsedeyim CEO’su Anthony Goldbloom üst kuruluşu Google olan bir şirkettir. Kaggle’ın bize sunduğu http://www.kaggle.com sitesinde veri analizi, yapay zeka, makine öğrenmesi vb. alanlarında bir sürü kullanıcı bulunmaktadır. Kullanıcılar yaptığı çalışmaları halka açık yayınlayıp yapılan işlerin herkes tarafından görülmesi oylanması gibi olaylar amaçlanmıştır. Kaggle sitesinde kesinlikle bahsedilmesi gereken ve en güzel özelliklerinden biri olan şey ise tabiki yarışmalarıdır. Bu yarışmalarda yüksek miktarda para ödülleri veya bilgi kazanabilirsiniz. Şuan çözümleyeceğimiz yarışma ise ödül olarak bilgi kazanmayı amaçlamaktadır. Fakat sonuç olarak bilgide bir ödüldür değil mi ?

Kaggle Titanik Felaketi yarışmasında bize titanikten kurtulan ve kurtulamayan insanların verilerini sağlamıştır. Bu verilen verileri makine öğrenmesi modelleri ile işleyip en yüksek başarı oranına sahip modelin yaratılmasını istemiştir. Yarışmanın nasıl işlediğinden size biraz bahsedeyim. Titanik felaketi yarışması için bahsedecek olursak veri seti 3 adet .csv uzantılı dosya olarak bize sunulmuştur. Bunlar eğitim verisi, test verisi ve teslim edilmesi gereken formatın örneği olan bir dosyadır. Burada yapılması gereken eğitim veri setini en iyi şekilde işleyip, hatalarını düzeltip makine öğrenmesi modelini yarattıktan sonra verilen test verilerini çözmektir. Ardından istenilen formatta verileri düzenleyip, kaggle online jurisine sunmaktır. Daha detaylı bakmak için kaggle sitesine girip yarışmayı bulabilirsiniz. Daha detaylı bilgilere yazının devamında değinilecektir.

Kodlamaya başlamadan önce eğitim verisini incelemek bizim için daha iyi olabilir.Eğitim verimizin özellikleri.

  • survival : 0 veya 1 olarak işlenmiş. 0 = Kurtulamadı, 1 = Kurtuldu şeklindedir.
  • pclass : Bilet sınıfı alınan biletin kaçıncı sınıf olduğunu göstermek için(Ekonomi ve business class gib).
  • sex : cinsiyet kadın yada erkek.
  • Age : formatı(18,19) gibi olan yolcuların yaşı bilgisidir.
  • sibsp : Veri setinin aile ilişkilerini tanımlama yolu… Sibling = kardeş,üvey kardeş Spouse = evlilik ilişkileri(karı,koca)
  • parch :Veri setinin aile ilişkilerini tanımlama yolu…  Parent = baba,anne        Child= kız,oğul, üvey oğul , üvey kız
  • ticket : bilet numarası
  • fare : yolcu ücreti
  • cabin : kabin numarası
  • embarked : bindirme limanı C = Cherbourg, Q= QueensTown S = Southampton

Verileri okumak için python kodlarını yazalım.

Kaggle tarafından bize verilen gender_submission veri dosyası bizim test verisini işleyip nasıl atacağımızı örnek olarak gösteren bir dosyadır. Bunun formatından bahsedip daha sonra yazacağım kodlarda buna yer vermeyeceğim, yukarıdaki gender_submission değişkeninde .head() , .tail() gibi fonksiyonlarla formatı kendinizde inceleyebilirsiniz. İlk sütunda PassengerId olarak yolcuların id formatını alır, ikinci sütunda ise Survived yani kurtuldumu, kurtulmadı mı olayını 0 ve 1 şeklinde ister.

Eğitim ve Test verimizi kombine edip, değişiklikleri beraber uygulamak iş gücü açısından bizim için daha iyi olacak bu yüzden verileri bir diziye atıp beraber işlem yaptıracağız verilerimiz hakkında genel bilgilere erişelim.

Veriler hakkında bilgi almak için gerekli fonksiyonumuzu yazdığımızda object türünde makine öğrenmesi modeline katamayacağımız yani çevirim yapmamız gereken veriler olduğunu aynı zamanda bazı verilerimizin NaN değerler içerdiğini görebiliyoruz. Bu aşamada yapılabilecek bir sürü şey olabilir fakat benim incelemek istediğim şey ilk olarak özelliklerimizin titanikten kurtulma ile olan ilişkisi hepsi için teker teker bu oranı bulacağız.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Şuan özelliklerimizin kurtulma oranı ile ne kadar bağlı olduğunu az çok görebiliyoruz. Bu arada Age sütunu için neden bunları yapmadığımızı düşünen varsa bunlar sınıflandırılabilen özellikler (Embarked özelliği için unique(eşsiz) olan değerler sadece C,Q,S ve NaN) . Age sütunu ise fazlaca unique değer içerir ve gözlemleme şansımızı ortadan kaldırır. Veriler görsel olarak daha detaylı incelenebilir fakat ben bu yazımda görsel olarak incelemeyeceğim.Şimdi değerlerimizi nümerik hale getirip modellerimizi eğitmeye başlayacağız.

Eğitim veri setimizde Age, Cabin ve Embarked değerlerinde NaN değerler bulunuyor bu değerleri sapma yaşamadan en iyi şekilde doldurmak için yaş değerlerinde ortalamayı alıp ortalama yaş ile dolduracağım, Cabin değerlerinde kabini yokmuş gibi varsayacağım, Embarked değerinde ise en çok tekrar eden değeri koyacağım. Bu saydıklarım test verisi içinde geçerlidir. Bu yüzden işlemleri ikili yürüteceğim.

Bu tarz verilere NaN değerlerini doldururken pandas.DataFrame ‘in .describe() metodu kullanılabilir veri ile ilgili istatistiksel verilere rahatlıkla ulaşabilirsiniz. Veri setindeki tüm NaN değerleri yok ettiğimize göre nümerik olmayan değerleri nümerik yapmaya başlayabiliriz.

Verimizin başarısını arttırmak için kendimiz yeni özellikler ekleyebiliriz veya olan özellikleri silip atmak yerine değerlendirebiliriz. Örnek olarak Name özelliğinde başta herkesin Title(ünvan)’ ı bize verilmiştir bu ünvanlar insanların toplum içindedeki değerleri veya ne kadar varlıklı olduklarını bize gösterebilir bu yüzden değerli bir özelliktir. Genel olarak değerlerimiz sınıflandırılmış bir vaziyette olduğu için yüksek sayıdaki değerlerimizide aralıklar kullanarak küçük sayılara çevirmeli ve modelimizi daha başarılı hale getirmeyi amaçlamalıyız.

 

 

 

 

 

Verimizin son hali.

Artık tüm değerlerimizi istediğimiz hale getirdik. Bundan sonra makine öğrenmesi modelleri eğitip yarışmayı tamamlama yoluna gidebiliriz.

Eğiteceğimiz modelleri programımıza dahil edelim.

Daha sonrasında eğittiğimiz modellerin başarılarını gözlemleyeceğiz örnek olarak nasıl gözlemleyeceğimizin kodlarını yazacağım.

Farzediyorum ki burada bizim için en yüksek başarı oranı veren model random forest classifier oldu yani rf makine öğrenmesi modelimiz. Bu modeli tekrar tüm eğitim seti ile eğitip, test verimizi çözeceğiz bunun ardından dosyayı bastırıp yarışmada değerlendirilmesi için kaggle’ a göndereceğiz.

 

 

 

 

 

 

 

Şuan dosyamız gönderime hazır bir şekilde duruyor. Kaggle’a gönderip yaptığınız makine öğrenmesi modelini juri tarafından değerlendirmeye gönderebilirsiniz.

Başarılar!

Yazar Hakkında

bilginyuksel

Bu makaleyi 5 dakikada okuyabilirsiniz.