Ana içeriğe atla

Kaggle Eğitimi: İlk Makine Öğrenimi Modeliniz

Python scikit-learn paketiyle ilk makine öğrenimi modelinizi, bir karar ağacı sınıflandırıcısını oluşturmayı öğrenin, Kaggle’a gönderin ve nasıl performans gösterdiğini görün!
Güncel 3 Eki 2026  · 11 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

İlk Makine Öğrenimi Modelinizi Oluşturun

Keşifsel Veri Analizi (EDA) ve başlangıç düzeyi model hazır olduğuna göre, ilk gerçek Makine Öğrenimi modeliniz üzerinde çalışmaya başlayabilirsiniz.

Not: Bu eğitim bir Facebook Live kodlama oturumuna dayanmaktadır; Buradan tekrar izleyebilirsiniz:

Başlamadan önce, gerekli tüm kütüphaneleri içe aktarın:

# Import modules
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import re
import numpy as np
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV

# Figures inline and set visualization style
%matplotlib inline
sns.set()

# Import data
df_train = pd.read_csv('data/train.csv')
df_test = pd.read_csv('data/test.csv')
  • Aşağıda, eğitim veri setinden hedef değişken olan 'Survived'ı düşürüp, eğitim ve test setlerinin birleşiminden oluşan yeni bir data DataFrame'i oluşturacaksınız. Bunu, veriyi biraz ön işlemek ve eğitim setinde yaptığınız işlemlerin test setinde de yapıldığından emin olmak için yapıyorsunuz.
  • Ancak önce, eğitim verisinin hedef değişkenini güvenli bir yerde saklayacaksınız.
# Store target variable of training data in a safe place
survived_train = df_train.Survived

# Concatenate training and test sets
data = pd.concat([df_train.drop(['Survived'], axis=1), df_test])
  • info() metodunu kullanarak yeni data DataFrame'inize göz atın.
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1309 entries, 0 to 417
Data columns (total 11 columns):
PassengerId    1309 non-null int64
Pclass         1309 non-null int64
Name           1309 non-null object
Sex            1309 non-null object
Age            1046 non-null float64
SibSp          1309 non-null int64
Parch          1309 non-null int64
Ticket         1309 non-null object
Fare           1308 non-null float64
Cabin          295 non-null object
Embarked       1307 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 122.7+ KB

Eksik değerlere sahip 2 sayısal değişken var.

Hangileri?

Doğru, 'Age' ve 'Fare' sütunlarında eksik değerleriniz var! Yukarıdaki .info() çıktısında, toplam 1309 kayıttan yalnızca 1046'sı null olmayan değer içerdiği için ilk sütunda 263 değerin eksik olduğunu görüyorsunuz. İdeal olarak bu 1309 kaydın hepsinin null olmayan değerlere sahip olmasını istersiniz, ama burada durum böyle değil!

Neyse ki, Fare sütununda yalnızca bir değer eksik. Ayrıca 'Cabin' ve 'Embarked' sütunlarında da eksikler olduğunu ve bununla da bir noktada ilgilenmeniz gerekeceğini unutmayın.

Ancak şimdi, sayısal değişkenleri düzeltmeye odaklanacaksınız: 'Age' ve 'Fare' sütunlarındaki eksik değerleri, bu değişkenlerin bilinen değerlerinin medyanını kullanarak atayacak ya da dolduracaksınız.

Not: Bu durumda medyan kullanıyorsunuz çünkü aykırı değerlere karşı idealdir. Başka bir deyişle, veri dağılımı çarpık olduğunda medyan kullanışlıdır. Eksikleri doldurmanın diğer yolları ortalama (tüm veri noktalarını toplayıp veri noktası sayısına bölerek bulunur) veya en çok tekrar eden değer olan mod olabilir.

# Impute missing numerical variables
data['Age'] = data.Age.fillna(data.Age.median())
data['Fare'] = data.Fare.fillna(data.Fare.median())

# Check out info of data
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1309 entries, 0 to 417
Data columns (total 11 columns):
PassengerId    1309 non-null int64
Pclass         1309 non-null int64
Name           1309 non-null object
Sex            1309 non-null object
Age            1309 non-null float64
SibSp          1309 non-null int64
Parch          1309 non-null int64
Ticket         1309 non-null object
Fare           1309 non-null float64
Cabin          295 non-null object
Embarked       1307 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 122.7+ KB

Bu çok daha iyi görünüyor, değil mi!

Ayrıca, önceki eğitimde ve notebook'ta, EDA’dan hareketle 'Survived' için önemli olacağını gördüğünüz ve tahminlerde kullanmak istediğiniz bir dizi özellik vardı. Bunlardan biri 'Fare' idi; ama 'Age' ve 'Sex' de diğerleriydi!

Ancak verinizi sayılarla kodlamak istiyorsunuz, bu yüzden 'male' ve 'female'i sayılara çevireceksiniz. Bunu, çoğu makine öğrenimi modelinin sayısal giriş özellikleriyle çalışması nedeniyle yaparsınız. Bunun için pandas'ın .get_dummies() fonksiyonunu kullanabilirsiniz:

data = pd.get_dummies(data, columns=['Sex'], drop_first=True)
data.head()
  PassengerId Pclass Name Age SibSp Parch Ticket Fare Cabin Embarked Sex_male
0 1 3 Braund, Mr. Owen Harris 22.0 1 0 A/5 21171 7.2500 NaN S 1
1 2 1 Cumings, Mrs. John Bradley (Florence Briggs Th... 38.0 1 0 PC 17599 71.2833 C85 C 0
2 3 3 Heikkinen, Miss. Laina 26.0 0 0 STON/O2. 3101282 7.9250 NaN S 0
3 4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) 35.0 1 0 113803 53.1000 C123 S 0
4 5 3 Allen, Mr. William Henry 35.0 0 0 373450 8.0500 NaN S 1

.get_dummies(), 'Sex' içindeki her seçenek için yeni bir sütun oluşturmanıza olanak tanır. Böylece female için 'Sex_female' adlı yeni bir sütun ve ardından o satırın erkek mi kadın mı olduğunu kodlayan 'Sex_male' adlı bir sütun oluşturur.

Şimdi, yukarıdaki kod satırında drop_first argümanını eklediğiniz için, aslında bu yeni sütunlar 'Sex_female' ve 'Sex_male' aynı bilgiyi kodladığından 'Sex_female' sütununu düşürdünüz.

Yani yaptığınız şey, o satır erkekse 1, kadınsa 0 olan yeni bir 'Sex_male' sütunu oluşturmak oldu.

.get_dummies(), makine öğrenimi için veri işleme yaparken en iyi dostlarınızdan biri olacak!

  • Şimdi, ilk makine öğrenimi modelinizi kurmak için DataFrame'inizden ['Sex_male', 'Fare', 'Age','Pclass', 'SibSp'] sütunlarını seçeceksiniz:
# Select columns and view head
data = data[['Sex_male', 'Fare', 'Age','Pclass', 'SibSp']]
data.head()
  Sex_male Fare Age Pclass SibSp
0 1 7.2500 22.0 3 1
1 0 71.2833 38.0 1 1
2 0 7.9250 26.0 3 0
3 0 53.1000 35.0 1 1
4 1 8.0500 35.0 3 0
  • .info() ile data'yı kontrol edin:
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1309 entries, 0 to 417
Data columns (total 5 columns):
Sex_male    1309 non-null uint8
Fare        1309 non-null float64
Age         1309 non-null float64
Pclass      1309 non-null int64
SibSp       1309 non-null int64
dtypes: float64(2), int64(2), uint8(1)
memory usage: 52.4 KB

Tüm kayıtlar artık null değil. Harika iş!

Şu ana kadar, verinizi ilk makine öğrenimi modelini kuracak forma getirdiniz. Bu da nihayet ilk makine öğrenimi modelinizi oluşturabileceğiniz anlamına geliyor!

pandas hakkında daha fazlası için Python ile Veri Manipülasyonu öğrenim yolumuza göz atın.

Bir Karar Ağacı Sınıflandırıcısı Oluşturun

Karar ağacı sınıflandırıcısı nedir? Özellik değişkenlerine dayanarak veri noktalarını (hedef değişkenler olarak da bilinir) sınıflandırmanıza olanak tanıyan bir ağaçtır.

Örneğin, aşağıdaki ağaç, kök düğümde şu soruya göre ilk kararı vermenizi sağlar: "'Sex_male' 0,5'ten küçük müydü?" Başka bir deyişle, veri noktası kadın mıydı? Bu sorunun cevabı True ise sola inersiniz ve sonuç 'Survived' olur. False ise sağa inersiniz ve sonuç 'Dead' olur.

Şimdilik, düğümlerde gördüğünüz gini, samples veya value gibi ek bilgiler için endişelenmenize gerek yok. Bunların hepsine daha sonra bakabilirsiniz!

decision tree classifier

  • Önce böyle bir modeli eğitim verinize uydurursunuz; bu, ağacın her dallanma noktasında hangi kararların bölme yapacağına (eğitim verisine dayanarak) karar vermek anlamına gelir. Örneğin, ilk dalın 'Male' olup olmadığına göre ayrılması ve 'Male' sonucunun 'Dead' tahminiyle sonuçlanması gibi.

Not: Bu kararları vermek için aslında gini katsayısı kullanılır. Bu noktada bu konulara daha derinlemesine girmeyeceksiniz.

  • Bir modeli data'nıza uydurmadan önce, veriyi tekrar eğitim ve test setlerine ayırın:
data_train = data.iloc[:891]
data_test = data.iloc[891:]
  • scikit-learn kullanacaksınız; bu paket verinizi DataFrame değil, dizi (array) olarak ister; bu yüzden dönüştürün:
X = data_train.values
test = data_test.values
y = survived_train.values
  • Şimdi karar ağacı sınıflandırıcınızı kurma zamanı! Önce max_depth=3 ile bir model oluşturun ve ardından verinize uydurun. Not: Modele clf adını veriyorsunuz; bu, "Classifier"ın kısaltmasıdır.
# Instantiate model and fit to data
clf = tree.DecisionTreeClassifier(max_depth=3)
clf.fit(X, y)
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=3,
            max_features=None, max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, presort=False, random_state=None,
            splitter='best')

Özellik değişkenleri X, .fit() metoduna verdiğiniz ilk argümandır; hedef değişken y ise ikinci argümandır.

Çıktı, az önce oluşturduğunuz Karar Ağacı Sınıflandırıcısı hakkında bilmeniz gereken her şeyi söyler: Örneğin, azami derinliğin 3 olarak ayarlandığını görürsünüz.

  • Şimdi, test setiniz üzerinde tahminler yapacak, yeni bir 'Survived' sütunu oluşturacak ve tahminlerinizi burada saklayacaksınız. df_test'in 'PassengerId' ve 'Survived' sütunlarını bir .csv dosyasına kaydedip Kaggle'a gönderin.
# Make predictions and store in 'Survived' column of df_test
Y_pred = clf.predict(test)
df_test['Survived'] = Y_pred
df_test[['PassengerId', 'Survived']].to_csv('data/predictions/1st_dec_tree.csv', index=False)
  • Kaggle'ın bildirdiğine göre modelinizin doğruluğu nedir?

kaggle ekranı

Doğruluk %78. 2000'den fazla sıra yükseldiniz!

Tebrikler, verinizi ilk makine öğrenimi modelini kuracak forma getirdiniz. Üstelik ilk makine öğrenimi modelinizi de oluşturdunuz: bir karar ağacı sınıflandırıcısı.

Şimdi, bu max_depth argümanının ne olduğunu, neden bunu seçtiğinizi ve train_test_split'i keşfedeceksiniz.

scikit-learn hakkında daha fazlası için scikit-learn ile Denetimli Öğrenme kursumuza göz atın.

Karar Ağacı Sınıflandırıcısı Nedir?

Az önce kurduğunuz Karar Ağacı Sınıflandırıcısı max_depth=3 idi ve şöyle görünüyor:

Decision Tree Classifier

İlk karar ile son karar arasındaki en büyük mesafe 3’tür; yani max_depth=3.

Not: Bu tür şekilleri üretmek için graphviz kullanabilirsiniz. Daha fazla ayrıntı için scikit-learn dokümantasyonuna buradan bakın.

Bu modeli kurarken özünde yaptığınız şey, özellik değişkenleri uzayında bir karar sınırı oluşturmaktır; örneğin (görsel buradan):

decision boundary

Neden max_depth=3 Seçilir?

Ağaç derinliği bir hiperparametredir; yani modeli veriye uydurmadan önce karar vermeniz gereken bir parametre. Daha büyük bir max_depth seçerseniz, daha karmaşık bir karar sınırı elde edersiniz.

  • Karar sınırınız çok karmaşıksa, veriye aşırı uyum sağlayabilirsiniz; bu da modelinizin sinyalle birlikte gürültüyü de açıklaması anlamına gelir.

  • max_depth çok küçükse, veriyi eksik öğrenebilirsiniz; yani modeliniz sinyali yeterince yakalamaz.

Peki aşırı uyum mu, eksik öğrenme mi olduğunu nasıl anlarsınız?

Not: Buna önyargı-varyans dengesi de denir; burada ayrıntıya girmeyeceğiz, sadece tamlık adına anıyoruz!

Yollardan biri, eğitim verinizden bir test setini ayırmaktır. Ardından modeli eğitim verinize uydurur, test setinde tahminler yapar ve tahmininizin test setinde ne kadar iyi iş çıkardığını görürsünüz.

  • Şimdi bunu yapacaksınız: orijinal eğitim verinizi eğitim ve test setlerine ayırın:
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.33, random_state=42, stratify=y)
  • Şimdi, 1’den 9’a kadar değişen max_depth değerleri üzerinde yineleme yapın ve modellerin eğitim ve test setlerindeki doğruluğunu görselleştirin:
# Setup arrays to store train and test accuracies
dep = np.arange(1, 9)
train_accuracy = np.empty(len(dep))
test_accuracy = np.empty(len(dep))

# Loop over different values of k
for i, k in enumerate(dep):
    # Setup a Decision Tree Classifier
    clf = tree.DecisionTreeClassifier(max_depth=k)

    # Fit the classifier to the training data
    clf.fit(X_train, y_train)

    #Compute accuracy on the training set
    train_accuracy[i] = clf.score(X_train, y_train)

    #Compute accuracy on the testing set
    test_accuracy[i] = clf.score(X_test, y_test)

# Generate plot
plt.title('clf: Varying depth of tree')
plt.plot(dep, test_accuracy, label = 'Testing Accuracy')
plt.plot(dep, train_accuracy, label = 'Training Accuracy')
plt.legend()
plt.xlabel('Depth of tree')
plt.ylabel('Accuracy')
plt.show()

çizgi grafiği

max_depth'i artırdıkça, eğitim verisine daha iyi uyum sağlayacaksınız çünkü eğitim verisini açıklayan kararlar alacaksınız. Eğitim verisi için doğruluk sürekli artacaktır; ancak bunun test verisi için olmadığını görüyorsunuz: aşırı uyum söz konusu.

İşte bu yüzden max_depth=3'ü seçtiniz.

Sonuç

Bu eğitimde, verinizi ilk makine öğrenimi modelinizi kuracak forma getirdiniz. Ardından, ilk makine öğrenimi modelinizi de oluşturdunuz: bir karar ağacı sınıflandırıcısı. Son olarak, train_test_split'i ve ML model hiperparametrelerini seçmemize nasıl yardımcı olduğunu öğrendiniz.

Bir sonraki eğitim, 10 Ocak 2018'de DataCamp Community’de yayınlanacak; orada yeni özellikler nasıl türetileceğini ve yeni modellerin nasıl kurulacağını öğreneceksiniz!

Bu arada, scikit-learn hakkında daha fazlasını keşfetmek isterseniz, DataCamp’in scikit-learn ile Denetimli Öğrenme kursuna göz atın.

Konular
Makine Öğrenimi
Veri Bilimi
Python

Makine Öğrenimi Kursları

Kurs

Python’a Giriş

4 sa
7.1M
Python ile veri analizi temellerini sadece dört saatte öğrenin. Bu çevrimiçi kurs, Python arayüzünü tanıtacak ve popüler paketleri keşfedecektir.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

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.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

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!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör