Bu Kaggle eğitiminde, Titanic verileri üzerinde keşifsel veri analizi (EDA) yardımıyla gözetimli öğrenme modellerine nasıl yaklaşacağınızı ve bunları nasıl kuracağınızı öğreneceksiniz.
Bu ayın başlarında, bir Facebook Live Birlikte Kodlama Oturumu yaptım; bu oturumda ben (ve birlikte kodlayan herkes), ücret, biniş limanı ve yaş gibi bilgiler verildiğinde, Titanic’te herhangi bir yolcunun hayatta kalıp kalmadığını tahmin eden, giderek karmaşıklaşan birkaç algoritma oluşturduk.
Bu yazıda, o oturumda ele aldığımız bazı konuların üzerinden geçeceksiniz. Bu yazıyı tekrar izlemek veya videoyla birlikte takip etmek isterseniz, buradan izleyebilirsiniz:
Gözetimli öğrenme, 'Survived' ya da 'Not' gibi etiketleri tahmin etmeyi içeren Makine Öğrenimi (ML) dalıdır. Bu tür modeller, yolcunun hayatta kalıp kalmadığını içeren etiketli verilerden öğrenir ("model eğitimi" olarak adlandırılır) ve ardından etiketlenmemiş veriler üzerinde tahmin yapar.
Öngörüsel modelleme ve analitik yarışmaları için bir platform olan Kaggle’da, bunlar eğitim ve test kümeleri olarak adlandırılır çünkü
Eğitim kümesindeki örüntüleri öğrenen bir model oluşturmak istersiniz ve
Ardından modeli test kümesi üzerinde tahmin yapmak için kullanırsınız.
Sonrasında Kaggle size doğru bildiğiniz yüzdeyi söyler: buna modelinizin başarımı (accuracy) denir.
Gözetimli Öğrenmeye Nasıl Başlanır
Muhtemelen bildiğiniz gibi, gözetimli öğrenmeye iyi bir yaklaşım aşağıdaki gibidir:
Veri kümeniz üzerinde Keşifsel Veri Analizi (EDA) yapın;
Daha sonra oluşturacağınız modellere karşı bir karşılaştırma görevi görebilecek, hızlı ve kaba bir model veya bir temel (baseline) model kurun;
Bu süreci yineleyin. Daha fazla EDA yapacak ve başka bir model kuracaksınız;
Özellik mühendisliği yapın: elinizdeki özellikleri birleştirin veya onlardan daha fazla bilgi çıkarın ve sonunda şu son noktaya gelin:
Daha iyi performans gösteren bir model elde edin.
Bu birlikte kodlama oturumunda, bu adımların hepsini yaptınız veya yapacaksınız!
Not: Titanic veri kümesiyle makine öğrenimine hızlı bir başlangıç yapmanızı sağlayan Python ve R derslerimiz de var.
Verinizi İçe Aktarın ve İnceleyin
İlk adım, üzerinde çalışacağınız veriyi hızlıca görmek için her zaman veriyi içe aktarmaktır. Bu durumda, pandas paketini içe aktaracak ve veriyi okumak için read_csv() fonksiyonunu kullanacaksınız:
Not: Aşağıdaki kod bloklarında, matplotlib, sklearn ve seaborn gibi paketler ile bu paketlerin modülleri zaten içe aktarılmıştır. Bunları daha sonra (istatistiksel) veri görselleştirme ve makine öğrenimi amaçları için daha kapsamlı biçimde kullanacaksınız!
Ayrıca çizimlerinizin not defterinizde satır içi görünmesi için IPython sihirli komutu %matplotlib inline kullanırsınız. Görselleştirme stilini temel bir Seaborn stiline değiştirmek için kod bloğunuza sns.set() de eklersiniz:
# Import modulesimport pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import tree
from sklearn.metrics import accuracy_score
# Figures inline and set visualization style%matplotlib inline
sns.set()Altyapı:
Daha fazla uzatmadan, veriyi içe aktaralım ve verinizi incelemenin ilk adımını atalım:
# Import test and train datasets
df_train = pd.read_csv('../data/train.csv')
df_test = pd.read_csv('../data/test.csv')# View first lines of training data
df_train.head(n=4)Altyapı:
PassengerId
Survived
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
0
1
0
3
Braund, Mr. Owen Harris
male
22.0
1
0
A/5 21171
7.2500
NaN
S
1
2
1
1
Cumings, Mrs. John Bradley (Florence Briggs Th...
female
38.0
1
0
PC 17599
71.2833
C85
C
2
3
1
3
Heikkinen, Miss. Laina
female
26.0
0
0
STON/O2. 3101282
7.9250
NaN
S
3
4
1
1
Futrelle, Mrs. Jacques Heath (Lily May Peel)
female
35.0
1
0
113803
53.1000
C123
S
Bu özelliklerin her birinin ne olduğunu görmek isterseniz, Kaggle veri dokümantasyonuna buradan göz atın.
Devam etmeden önce, terminoloji açısından aşağıdakileri dikkate almak iyidir:
Hedef değişken, tahmin etmeye çalıştığınız değişkendir;
Diğer değişkenler "özellik" (veya "yordayıcı değişkenler", hedef değişkeni tahmin etmek için kullandığınız özellikler) olarak bilinir.
Bunu aklınızda tutarak, veri kümenizin ilk beş satırını getirmek için kullanabileceğiniz head() fonksiyonu gibi yöntemlerle verinizi incelemeye devam edebilirsiniz:
# View first lines of test data
df_test.head()Altyapı:
PassengerId
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
0
892
3
Kelly, Mr. James
male
34.5
0
0
330911
7.8292
NaN
Q
1
893
3
Wilkes, Mrs. James (Ellen Needs)
female
47.0
1
0
363272
7.0000
NaN
S
2
894
2
Myles, Mr. Thomas Francis
male
62.0
0
0
240276
9.6875
NaN
Q
3
895
3
Wirz, Mr. Albert
male
27.0
0
0
315154
8.6625
NaN
S
4
896
3
Hirvonen, Mrs. Alexander (Helga E Lindqvist)
female
22.0
1
1
3101298
12.2875
NaN
S
df_test DataFrame’inin 'Survived' sütununa sahip olmadığını unutmayın; çünkü tahmin etmeye çalışacağınız şey bu!
Ayrıca, veri tiplerini, eksik değerleri ve daha fazlasını kontrol etmek için ( df_train’in) DataFrame .info() metodunu kullanabilirsiniz.
<class'pandas.core.frame.DataFrame'>RangeIndex:891 entries,0 to 890
Data columns(total 12 columns):
PassengerId 891 non-null int64
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes:float64(2),int64(5),object(5)
memory usage:83.6+KBAltyapı:
Bu durumda, 891 satırlık bir DataFrame’de 'Age' sütunu için yalnızca 714 non-null değer olduğunu görüyorsunuz. Bu, 177 null veya eksik değer olduğu anlamına gelir.
Ayrıca, sayısal sütunların özet istatistiklerini kontrol etmek için ( df_train’in) DataFrame .describe() metodunu kullanın.
Görsel Keşifsel Veri Analizi (EDA) ve İlk Modeliniz
Artık verinizin nasıl göründüğüne dair bir fikriniz olduğuna ve bazı istatistikleri incelediğinize göre, seaborn paketinin yardımıyla verinizi görselleştirmenin zamanı geldi:
Örneğin, hedef değişkeniniz olan Titanic’te hayatta kalmayı gösteren bir çubuk grafik oluşturmak için seaborn kullanın.
Çıkarım: Eğitim kümesinde, hayatta kalanların sayısı, kalmayanlardan daha az. O halde, kimsenin hayatta kalmadığını tahmin eden bir ilk model kuralım.
Bu, biliyorsunuz ki kötü bir model; çünkü hayatta kalanlar var. Ancak bize bir temel sağlar: daha sonra kuracağımız herhangi bir modelin bundan daha iyi olması gerekir.
Bunu şu adımları izleyerek yapabilirsiniz:
df_test için tüm satırlarda 'hayatta kalmadı' bilgisini kodlayan bir 'Survived' sütunu oluşturun;
df_test’in 'PassengerId' ve 'Survived' sütunlarını bir .csv dosyasına kaydedin ve Kaggle’a gönderin.
Kadınların %74’ü hayatta kaldı, erkeklerin ise %19’u hayatta kaldı.
Şimdi ikinci bir model kuralım ve tüm kadınların hayatta kaldığını, tüm erkeklerin de kalmadığını tahmin edelim. Bu da gerçekçi olmayan bir modeldir; ancak gelecekteki modelleri karşılaştırmak için bir temel sağlar.
df_test için yukarıdaki tahmini kodlayan bir 'Survived' sütunu oluşturun.
df_test’in 'PassengerId' ve 'Survived' sütunlarını bir .csv’ye kaydedin ve Kaggle’a gönderin.
Şimdi, bunu Kaggle’a gönderdiğinizde bu model size ne kadar doğruluk verdi?
Kaggle’daki doğruluk %76,6:
Bu gönderimle, liderlik tablosunda yaklaşık 2.000 sıra yükseldiniz! Ayrıca puanınızı da geliştirdiniz; harika iş çıkardınız!
Verinizi Daha Fazla Keşfedin!
df_train’deki Titanic veri kümesi özelliği 'Survived'’ın, 'Pclass' özelliğine göre ayrılmış (facet) çubuk grafiklerini oluşturmak için seaborn kullanın.
Çıkarım: Birinci sınıfta seyahat eden yolcuların hayatta kalma olasılığı daha yüksekti. Öte yandan, üçüncü sınıfta seyahat eden yolcuların hayatta kalmama olasılığı daha yüksekti.
df_train’deki Titanic veri kümesi özelliği 'Survived'’ın, 'Embarked' özelliğine göre ayrılmış (facet) çubuk grafiklerini oluşturmak için seaborn kullanın.
Çıkarım: Hayatta kalanların ya biletleri için epey ödeme yaptığı ya da genç olduğu görülüyor.
'Survived'’a göre renklendirilmiş şekilde, df_train için bir pairplot oluşturmak üzere seaborn kullanın. Pairplot, şimdiye dek keşfettiğiniz bilgilerin çoğunu tek bir grafik ızgarasında göstermenin harika bir yoludur.
hedef değişkenimizi görsel olarak keşfettiniz ve ilk tahminlerinizi yaptınız.
bazı özellik değişkenlerimizi görsel olarak keşfettiniz ve EDA’mıza dayanarak daha iyi sonuç veren daha fazla tahmin yaptınız.
özellik değişkenlerinde, kategorik ve sayısal, kapsamlı bir EDA yaptınız.
Bir sonraki yazıda, burada EDA’dan öğrendiklerinize dayanarak bazı Makine Öğrenimi modelleri kurmaya zaman ayıracaksınız. Bunu bu projenin bir sonraki yazısında yapacağız (27 Aralık’ta yayımlanacak).
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Bu ayın başlarında, bir Facebook Live Birlikte Kodlama Oturumu yaptım; bu oturumda ben (ve birlikte kodlayan herkes), ücret, biniş limanı ve yaş gibi bilgiler verildiğinde, Titanic’te herhangi bir yolcunun hayatta kalıp kalmadığını tahmin eden, giderek karmaşıklaşan birkaç algoritma oluşturduk.
Bu yazıda, o oturumda ele aldığımız bazı konuların üzerinden geçeceksiniz. Bu yazıyı tekrar izlemek veya videoyla birlikte takip etmek isterseniz, buradan izleyebilirsiniz:
Özellikle, gözetimli öğrenme modelleri kurduğumuzu hatırlıyor olabilirsiniz.
Gözetimli öğrenme, 'Survived' ya da 'Not' gibi etiketleri tahmin etmeyi içeren Makine Öğrenimi (ML) dalıdır. Bu tür modeller, yolcunun hayatta kalıp kalmadığını içeren etiketli verilerden öğrenir ("model eğitimi" olarak adlandırılır) ve ardından etiketlenmemiş veriler üzerinde tahmin yapar.
Öngörüsel modelleme ve analitik yarışmaları için bir platform olan Kaggle’da, bunlar eğitim ve test kümeleri olarak adlandırılır çünkü
Sonrasında Kaggle size doğru bildiğiniz yüzdeyi söyler: buna modelinizin başarımı (accuracy) denir.
Gözetimli Öğrenmeye Nasıl Başlanır
Muhtemelen bildiğiniz gibi, gözetimli öğrenmeye iyi bir yaklaşım aşağıdaki gibidir:
Bu birlikte kodlama oturumunda, bu adımların hepsini yaptınız veya yapacaksınız!
Not: Titanic veri kümesiyle makine öğrenimine hızlı bir başlangıç yapmanızı sağlayan Python ve R derslerimiz de var.
Verinizi İçe Aktarın ve İnceleyin
İlk adım, üzerinde çalışacağınız veriyi hızlıca görmek için her zaman veriyi içe aktarmaktır. Bu durumda,
pandaspaketini içe aktaracak ve veriyi okumak içinread_csv()fonksiyonunu kullanacaksınız:Not: Aşağıdaki kod bloklarında,
matplotlib,sklearnveseaborngibi paketler ile bu paketlerin modülleri zaten içe aktarılmıştır. Bunları daha sonra (istatistiksel) veri görselleştirme ve makine öğrenimi amaçları için daha kapsamlı biçimde kullanacaksınız!Ayrıca çizimlerinizin not defterinizde satır içi görünmesi için IPython sihirli komutu
%matplotlib inlinekullanırsınız. Görselleştirme stilini temel bir Seaborn stiline değiştirmek için kod bloğunuzasns.set()de eklersiniz:Daha fazla uzatmadan, veriyi içe aktaralım ve verinizi incelemenin ilk adımını atalım:
Bu özelliklerin her birinin ne olduğunu görmek isterseniz, Kaggle veri dokümantasyonuna buradan göz atın.
Devam etmeden önce, terminoloji açısından aşağıdakileri dikkate almak iyidir:
Bunu aklınızda tutarak, veri kümenizin ilk beş satırını getirmek için kullanabileceğiniz
head()fonksiyonu gibi yöntemlerle verinizi incelemeye devam edebilirsiniz:df_testDataFrame’inin'Survived'sütununa sahip olmadığını unutmayın; çünkü tahmin etmeye çalışacağınız şey bu!df_train’in) DataFrame.info()metodunu kullanabilirsiniz.Bu durumda, 891 satırlık bir DataFrame’de 'Age' sütunu için yalnızca 714 non-null değer olduğunu görüyorsunuz. Bu, 177 null veya eksik değer olduğu anlamına gelir.
df_train’in) DataFrame.describe()metodunu kullanın.Görsel Keşifsel Veri Analizi (EDA) ve İlk Modeliniz
Artık verinizin nasıl göründüğüne dair bir fikriniz olduğuna ve bazı istatistikleri incelediğinize göre,
seabornpaketinin yardımıyla verinizi görselleştirmenin zamanı geldi:seabornkullanın.Çıkarım: Eğitim kümesinde, hayatta kalanların sayısı, kalmayanlardan daha az. O halde, kimsenin hayatta kalmadığını tahmin eden bir ilk model kuralım.
Bu, biliyorsunuz ki kötü bir model; çünkü hayatta kalanlar var. Ancak bize bir temel sağlar: daha sonra kuracağımız herhangi bir modelin bundan daha iyi olması gerekir.
Bunu şu adımları izleyerek yapabilirsiniz:
df_testiçin tüm satırlarda 'hayatta kalmadı' bilgisini kodlayan bir'Survived'sütunu oluşturun;df_test’in'PassengerId've'Survived'sütunlarını bir .csv dosyasına kaydedin ve Kaggle’a gönderin.Bu size ne kadar doğruluk verdi? Kaggle’daki doğruluk 62,7.
Fena değil!
Önemli not! Doğruluk (accuracy) dışında metrikler de kullanmak isteyeceksiniz!
Özellik Değişkenlerinde EDA
Hızlı ve kaba bir model oluşturduğunuza göre, yineleme zamanı: Biraz daha Keşifsel Veri Analizi yapalım ve yakında başka bir model kuralım!
df_train’in Titanic veri kümesindeki'Sex'özelliğinin bir çubuk grafiğini oluşturmak içinseabornkullanabilirsiniz.'Survived'özelliğinin,'Sex'özelliğine göre ayrılmış (facet) çubuk grafiklerini oluşturmak içinseabornkullanın.Çıkarım: Kadınların hayatta kalma olasılığı erkeklerden daha yüksekti.
pandaskullanabilirsiniz:pandaskullanın:Kadınların %74’ü hayatta kaldı, erkeklerin ise %19’u hayatta kaldı.
Şimdi ikinci bir model kuralım ve tüm kadınların hayatta kaldığını, tüm erkeklerin de kalmadığını tahmin edelim. Bu da gerçekçi olmayan bir modeldir; ancak gelecekteki modelleri karşılaştırmak için bir temel sağlar.
df_testiçin yukarıdaki tahmini kodlayan bir'Survived'sütunu oluşturun.df_test’in'PassengerId've'Survived'sütunlarını bir .csv’ye kaydedin ve Kaggle’a gönderin.Şimdi, bunu Kaggle’a gönderdiğinizde bu model size ne kadar doğruluk verdi?
Kaggle’daki doğruluk %76,6:
Bu gönderimle, liderlik tablosunda yaklaşık 2.000 sıra yükseldiniz! Ayrıca puanınızı da geliştirdiniz; harika iş çıkardınız!
Verinizi Daha Fazla Keşfedin!
df_train’deki Titanic veri kümesi özelliği'Survived'’ın,'Pclass'özelliğine göre ayrılmış (facet) çubuk grafiklerini oluşturmak içinseabornkullanın.Çıkarım: Birinci sınıfta seyahat eden yolcuların hayatta kalma olasılığı daha yüksekti. Öte yandan, üçüncü sınıfta seyahat eden yolcuların hayatta kalmama olasılığı daha yüksekti.
df_train’deki Titanic veri kümesi özelliği'Survived'’ın,'Embarked'özelliğine göre ayrılmış (facet) çubuk grafiklerini oluşturmak içinseabornkullanın.Çıkarım: Southampton’dan binen yolcuların hayatta kalma olasılığı daha düşüktü.
Sayısal Değişkenlerle EDA
df_train’in'Fare'sütununun bir histogramını çizmek içinseabornkullanın.Çıkarım: Yolcuların çoğu Titanic ile yolculuk için 100’den az ödeme yapmış.
'Survived'’ın her değeri için'Fare'sütununu çizmek üzere birpandasçizim metodunu kullanın.Çıkarım: Daha fazla ödeme yapanların hayatta kalma şansının daha yüksek olduğu görülüyor.
df_train’in'Age'sütununun bir histogramını çizmek içinseabornkullanın. Bunu yapmadan önce null değerleri düşürmeniz gerekecek.'Fare'için, x ekseninde'Survived'olacak şekilde bir strip plot ve bir swarm plot çizin.Çıkarım: Ücretin (Fare) Titanic’te hayatta kalmayla kesinlikle ilişkili olduğu görülüyor.
'Fare'’in özet istatistiklerini kontrol etmek için DataFrame.describe()metodunu kullanın.'Survived'’a göre renklendirilmiş şekilde,'Age'ile'Fare'arasındaki saçılım grafiğini çizmek içinseabornkullanın.Çıkarım: Hayatta kalanların ya biletleri için epey ödeme yaptığı ya da genç olduğu görülüyor.
'Survived'’a göre renklendirilmiş şekilde,df_trainiçin bir pairplot oluşturmak üzereseabornkullanın. Pairplot, şimdiye dek keşfettiğiniz bilgilerin çoğunu tek bir grafik ızgarasında göstermenin harika bir yoludur.EDA’dan Makine Öğrenimi Modeline
Bu eğitimde başarıyla:
Bir sonraki yazıda, burada EDA’dan öğrendiklerinize dayanarak bazı Makine Öğrenimi modelleri kurmaya zaman ayıracaksınız. Bunu bu projenin bir sonraki yazısında yapacağız (27 Aralık’ta yayımlanacak).