Ana içeriğe atla

Veri Biliminde Ön İşleme (Bölüm 2): Merkezleme, Ölçekleme ve Lojistik Regresyon

Merkezleme ve ölçeklemenin, lojistik regresyon bağlamında modelinize yardımcı olup olmayacağını keşfedin.
Güncel 3 Eki 2026  · 9 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Bu seri'nin ilk yazısında, makine öğreniminde (ML) sınıflandırma görevlerinde ön işlemenin rolünü, k-En Yakın Komşu algoritması (k-NN) ve şarap kalitesi veri kümesi üzerinden derinlemesine inceledim. Orada, sayısal verilerin merkezlenmesi ve ölçeklenmesinin k-NN performansını çeşitli model ölçütlerinde (örn. doğruluk) iyileştirdiğini gördünüz. Ayrıca, ön işlemenin bağlamdan bağımsız gerçekleşmediğini ve değerinin ancak tahmine odaklı bir ML hattı bağlamında değerlendirilebileceğini gördünüz. Ancak, ön işlemenin önemini yalnızca tek bir model, k-NN bağlamında gördük. Bu durumda modelimiz belirgin şekilde daha iyi performans gösterdi ama bu her zaman böyle mi olacak? Mutlaka değil! Bu yazıda, başka bir temel model olan lojistik regresyonda sayısal verilerin ölçeklenmesi ve merkezlenmesinin rolünü inceleyeceğim. İsterseniz kendinizi tazelemek için önceki yazıya ve/veya bu yazının sonundaki terimler sözlüğüne göz atabilirsiniz. Yine şarap kalitesi veri kümesini inceleyeceğiz. Tüm örnekler Python ile olacak. Python'a aşina değilseniz, tüm veri bilimi kurslarımıza buradan göz atabilirsiniz. Veri çerçevesi ihtiyaçlarımız için pandas ve makine öğrenimi için scikit-learn kütüphanelerini kullanacağım.

Önce, bir sayısal değişkenin veya sınıfların değerini tahmin etmek için kullanılabilen regresyona kısaca giriş yapacağım. Doğrusal regresyonu, lojistik regresyonu tanıtacak ve ardından ikincisini kırmızı şarabın kalitesini tahmin etmek için kullanacağım. Sonrasında, merkezleme ve ölçeklemenin bir regresyon ortamında modelimize yardımcı olup olmadığını göreceksiniz.

Python ile Regresyona Kısa Bir Giriş

Python'da Doğrusal Regresyon

Yukarıda belirtildiği gibi, regresyon yaygın olarak bir sayısal değişkenin değerini başka birinden tahmin etmek için kullanılır. Örneğin, aşağıda Boston konut verileri üzerinde (scikit-learn içinde yerleşik bir veri kümesi) bir doğrusal regresyon gerçekleştiriyoruz: bu durumda, bağımsız değişken (x ekseni) oda sayısı, bağımlı değişken (y ekseni) ise fiyattır.

Böyle bir regresyon nasıl çalışır? Kısaca, mekanik şu şekildedir: Veriye \( (x_i,y_i) \) bir \( y = ax + b \) modeli uydurmak isteriz; yani, verilen veri ile en iyi \( a \) ve \( b \) değerlerini bulmak isteriz. Sıradan en küçük kareler (OLS, açık ara en yaygını) formülasyonunda, hatanın bağımlı değişkende ortaya çıkacağı varsayılır. Bu nedenle, en iyi \( a \) ve \( b \), \[SSE = \sum_i (y_i - (ax_i + b))^2\] ifadesini en aza indirerek bulunur ve bu optimizasyon genellikle gradyan inişi adı verilen bir algoritma ile gerçekleştirilir. Aşağıda Boston konut verileri üzerinde basit bir doğrusal regresyon yapıyoruz:

# Import necessary packages
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('ggplot')
from sklearn import datasets
from sklearn import linear_model
import numpy as np

# Load data
boston = datasets.load_boston()
yb = boston.target.reshape(-1, 1)
Xb = boston['data'][:,5].reshape(-1, 1)

# Plot data
plt.scatter(Xb,yb)
plt.ylabel('value of house /1000 ($)')
plt.xlabel('number of rooms')

# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the training sets
regr.fit( Xb, yb)

# Plot outputs
plt.scatter(Xb, yb,  color='black')
plt.plot(Xb, regr.predict(Xb), color='blue',
         linewidth=3)
plt.show()

Number of Rooms Graph

Bu regresyon, verilerin genel artan eğilimini yakalıyor ancak fazlasını değil. Yalnızca bir yordayıcı değişken kullandık; daha fazlasını da kullanabilirdik ki bu durumda modelde her bir yordayıcı değişken için birer tane olmak üzere \( a_1,\ldots,a_n \) olmak üzere \( n \) katsayıya sahip olurduk. \( a_i \) değişkeninin büyüklüğünün, karşılık gelen değişkenin hedef değişkenle ne kadar güçlü ilişkilendiğini bize söylediğine dikkat etmek gerekir.

Python'da Lojistik Regresyon

Regresyon, sınıflandırma problemleri için de kullanılabilir. Bunun doğal ilk örneği lojistik regresyondur. İkili sınıflandırmada (iki etiket), etiketleri 0 ve 1 olarak düşünebiliriz. Yordayıcı değişkeni yine \( x \) ile gösterirsek, lojistik regresyon modeli lojistik fonksiyon ile verilir: \[F(x) = \frac{1}{1+e^{-(ax+b)}}.\] Bu, sigmoidal (S-şekilli) bir eğridir ve aşağıda bir örneğini görebilirsiniz. Herhangi bir \( x \) için, eğer \( F(x) < 0.5 \) ise lojistik model y = 0 tahmin eder; buna karşılık, eğer \( F(X) > 0.5 \) ise model \( y = 1 \) tahmin eder. Yine, birden fazla yordayıcı değişkenimiz varsa, her biri için birer tane olmak üzere \( a_1,\ldots,a_n \) şeklinde \( n \) katsayıya sahip oluruz. Bu durumda, \( a_i \) değişkeninin büyüklüğü, karşılık gelen değişkenin hedef değişkeni ne ölçüde etkilediğini gösterir.

# Synthesize data
X1 = np.random.normal(size=150)
y1 = (X1 > 0).astype(np.float)
X1[X1 > 0] *= 4
X1 += .3 * np.random.normal(size=150)
X1= X1.reshape(-1, 1)

# Run the classifier
clf = linear_model.LogisticRegression()
clf.fit(X1, y1)

# Plot the result
plt.scatter(X1.ravel(), y1, color='black', zorder=20 , alpha = 0.5)
plt.plot(X1_ordered, clf.predict_proba(X1_ordered)[:,1], color='blue' , linewidth = 3)
plt.ylabel('target variable')
plt.xlabel('predictor variable')
plt.show()

Predictor Variable Graph

Lojistik Regresyon ve Veri Ölçekleme: Şarap Veri Kümesi

Artık lojistik regresyonun işleyişini gördüğümüze göre, lezzetli şarap veri kümemiz üzerinde bir lojistik regresyon sınıflandırıcısı uygulayalım. Verileri içe aktaracağım ve hedef değişkeni (iyi/kötü şarap) tazeleme amaçlı görselleştireceğim:

# Import necessary modules
from sklearn import linear_model
from sklearn.cross_validation import train_test_split

# Load data
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv ' , sep = ';')
X = df.drop('quality' , 1).values #drop target variable
y1 = df['quality'].values
y = y1 <= 5 # is the rating <= 5?

# plot histograms of original target variable
# and aggregated target variable
plt.figure(figsize=(20,5));
plt.subplot(1, 2, 1 );
plt.hist(y1);
plt.xlabel('original target value')
plt.ylabel('count')
plt.subplot(1, 2, 2);
plt.hist(y)
plt.xlabel('aggregated target value')
plt.show()

Target Value Graphs

Şimdi lojistik regresyonumuzu çalıştıralım ve nasıl performans gösterdiğine bakalım!

# Split the data into test and training sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

#initial logistic regression model
lr = linear_model.LogisticRegression()

# fit the model
lr = lr.fit(X_train, y_train)
print('Logistic Regression score for training set: %f' % lr.score(X_train, y_train))
from sklearn.metrics import classification_report
y_true, y_pred = y_test, lr.predict(X_test)
print(classification_report(y_true, y_pred))
Logistic Regression score for training set: 0.752932
             precision    recall  f1-score   support

      False       0.78      0.74      0.76       179
       True       0.69      0.74      0.71       141

avg / total       0.74      0.74      0.74       320

Kutudan çıktığı haliyle, bu lojistik regresyon, K-NN'den (ölçekleme olsun ya da olmasın) daha iyi performans gösteriyor. Şimdi verilerimizi ölçekleyip lojistik regresyon uygulayalım:

from sklearn.preprocessing import scale
Xs = scale(X)
Xs_train, Xs_test, y_train, y_test = train_test_split(Xs, y, test_size=0.2, random_state=42)
lr_2 = lr.fit(Xs_train, y_train)
print('Scaled Logistic Regression score for test set: %f' % lr_2.score(Xs_test, y_test))
y_true, y_pred = y_test, lr_2.predict(Xs_test)
print(classification_report(y_true, y_pred))
Scaled Logistic Regression score for test set: 0.740625
             precision    recall  f1-score   support

      False       0.79      0.74      0.76       179
       True       0.69      0.74      0.72       141

avg / total       0.74      0.74      0.74       320

Bu oldukça ilginç! Lojistik regresyonun performansı, veri ölçekleme ile iyileşmedi. Neden, özellikle de k-En Yakın Komşu'nun performansının ölçekleme ile önemli ölçüde arttığını görmüşken? Bunun nedeni, hedef değişkeni etkilemeyen geniş aralıklara sahip yordayıcı değişkenler varsa, bir regresyon algoritmasının karşılık gelen \( a_i \) katsayılarını küçük yaparak tahminleri çok etkilememelerini sağlamasıdır. K-en yakın komşuların böyle yerleşik bir stratejisi yoktur; bu yüzden verileri ölçeklemeye ciddi biçimde ihtiyaç duyduk.

Bir sonraki yazıda, sentetik bir veri kümesi oluşturarak, gürültü ekleyerek ve merkezleme ile ölçeklemenin her iki modelin performansını gürültü şiddetinin bir fonksiyonu olarak nasıl değiştirdiğine bakarak, k-NN ve lojistik regresyonda merkezleme ve ölçeklemenin çok farklı sonuçlarını açacağım.

Aşağıdaki etkileşimli pencerede verilerle kendiniz oynayabilirsiniz. İsterseniz sc = True ayarlayarak verileri ölçekleyebilirsiniz. Ardından, lojistik regresyon modelinin doğruluğunu ve bir sınıflandırma raporunu görmek için tüm betiği çalıştırın.

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiaW1wb3J0IHBhbmRhcyBhcyBwZFxuaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdFxuZnJvbSBza2xlYXJuLmNyb3NzX3ZhbGlkYXRpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXRcbmZyb20gc2tsZWFybiBpbXBvcnQgbmVpZ2hib3JzXG5mcm9tIHNrbGVhcm4ucHJlcHJvY2Vzc2luZyBpbXBvcnQgc2NhbGVcbmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBjbGFzc2lmaWNhdGlvbl9yZXBvcnRcbmZyb20gc2tsZWFybiBpbXBvcnQgbGluZWFyX21vZGVsIiwic2FtcGxlIjoiIyBTZXQgc2MgPSBUcnVlIHRvIHNjYWxlIHlvdXIgZmVhdHVyZXMgXG5zYyA9IEZhbHNlIFxuXG4jIExvYWQgZGF0YSBcbmRmID0gcGQucmVhZF9jc3YoJ2h0dHA6Ly9hcmNoaXZlLmljcy51Y2kuZWR1L21sL21hY2hpbmUtbGVhcm5pbmctZGF0YWJhc2VzL3dpbmUtcXVhbGl0eS93aW5lcXVhbGl0eS1yZWQuY3N2ICcgLCBzZXAgPSAnOycpIFxuWCA9IGRmLmRyb3AoJ3F1YWxpdHknICwgMSkudmFsdWVzICMgZHJvcCB0YXJnZXQgdmFyaWFibGUgXG5cbiMgSGVyZSB3ZSBzY2FsZSwgaWYgZGVzaXJlZCBcbmlmIHNjID09IFRydWU6IFxuICBYID0gc2NhbGUoWCkgXG4gIFxuIyBUYXJnZXQgdmFsdWUgXG55MSA9IGRmWydxdWFsaXR5J10udmFsdWVzICMgb3JpZ2luYWwgdGFyZ2V0IHZhcmlhYmxlIFxueSA9IHkxIDw9IDUgICMgbmV3IHRhcmdldCB2YXJpYWJsZTogaXMgdGhlIHJhdGluZyA8PSA1PyBcblxuIyBTcGxpdCB0aGUgZGF0YSBpbnRvIGEgdGVzdCBzZXQgYW5kIGEgdHJhaW5pbmcgc2V0IFhfdHJhaW4sIFhfdGVzdCwgeV90cmFpbiwgeV90ZXN0ID0gXG50cmFpbl90ZXN0X3NwbGl0KFgsIHksIHRlc3Rfc2l6ZT0wLjIsIHJhbmRvbV9zdGF0ZT00MikgXG5cbiMgVHJhaW4gbG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbCBhbmQgcHJpbnQgcGVyZm9ybWFuY2Ugb24gdGhlIHRlc3Qgc2V0IFxubHIgPSBsaW5lYXJfbW9kZWwuTG9naXN0aWNSZWdyZXNzaW9uKCkgXG5sciA9IGxyLmZpdChYX3RyYWluLCB5X3RyYWluKSBcbnByaW50KCdMb2dpc3RpYyBSZWdyZXNzaW9uIHNjb3JlIGZvciB0cmFpbmluZyBzZXQ6ICVmJyAlIGxyLnNjb3JlKFhfdHJhaW4sIHlfdHJhaW4pKSBcbnlfdHJ1ZSwgeV9wcmVkID0geV90ZXN0LCBsci5wcmVkaWN0KFhfdGVzdCkgXG5wcmludChjbGFzc2lmaWNhdGlvbl9yZXBvcnQoeV90cnVlLCB5X3ByZWQpKSBcbiJ9

Sözlük

Denetimli öğrenme: Hedef değişkeninin yordayıcı değişkenlerden çıkarılması görevi. Örneğin, ‘kalp hastalığı varlığı’ hedef değişkenini, ‘yaş’, ‘cinsiyet’ ve ‘sigara içme durumu’ gibi yordayıcı değişkenlerden çıkarmak.

Sınıflandırma görevi: Hedef değişkenin kategorilerden oluştuğu (örn. ‘tıkladı’ veya ‘tıkladı değil’, ‘malign’ veya ‘benign’ tümör) bir denetimli öğrenme görevi bir sınıflandırma görevidir.

Regresyon görevi: Hedef değişkenin sürekli değişen bir değişken (örn. bir evin fiyatı) veya ‘şarabın kalite derecesi’ gibi sıralı kategorik bir değişken olduğu bir denetimli öğrenme görevi bir regresyon görevidir.

k-En Yakın Komşu: Bir veri noktasına, en yakın k komşusunun çoğunluk oyu ile belirlenen etiketin atandığı bir sınıflandırma görevi algoritması.

Ön işleme: Veri bilimcilerin, verilerini yapmak istedikleri işleme daha uygun bir hale getirmek için kullanacakları çok sayıda işlem. Örneğin, Twitter verilerinin duygu analizini yapmadan önce, HTML etiketlerini ve boşlukları temizlemek, kısaltmaları açmak ve tweet'leri içerdikleri kelimelerin listelerine bölmek isteyebilirsiniz.

Merkezleme ve Ölçekleme: Bunlar, sayılar gibi sayısal verilerin ön işlenmesine yönelik iki yöntemdir; örneğin kategoriler veya dizgeler yerine. Bir değişkeni merkezlemek, her veri noktasından değişkenin ortalamasını çıkararak yeni değişkenin ortalamasını 0 yapmaktır; bir değişkeni ölçeklemek ise veri aralığını değiştirmek amacıyla her veri noktasını sabit bir sayı ile çarpmaktır. Bunların önemine ve örneklerine yazı içinde bakınız.

Bu makale bir Jupyter defterinden üretildi. Defteri buradan indirebilirsiniz.

Konular
Makine Öğrenimi
Python
İ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