Machine Learning

Python’da Adım Adım Regresyonun Ustası Olma: Kapsamlı Bir Kılavuz

Spread the love

Adım adım regresyon, bir regresyon modelinde en alakalı öngörücü değişkenleri seçmek için güçlü bir tekniktir. İstatistiksel anlamlılığa bağlı olarak değişkenleri yinelemeli olarak ekleyerek veya çıkararak, yorumlanması daha kolay ve aşırı uyuma daha az eğilimli yalın modeller oluşturmaya yardımcı olur. Bu makale, statsmodels, scikit-learn (sklearn) ve mlxtend gibi popüler kütüphaneler kullanarak Python’da adım adım regresyon gerçekleştirmenin çeşitli yöntemlerini ele almaktadır.

İçindekiler Tablosu

İleri Seçimi

İleri seçim, boş bir modelle başlar ve model uyumunu en anlamlı şekilde iyileştiren öngörücü değişkeni yinelemeli olarak ekler. Bu iyileştirme genellikle F-istatistik, AIC (Akaike Bilgi Kriteri) veya BIC (Bayes Bilgi Kriteri) gibi metrikler kullanılarak değerlendirilir. Başka bir değişken eklemenin istatistiksel olarak anlamlı bir iyileştirme sağlamaması durumunda işlem sona erer.

Geriye Eleme

Geriye eleme zıt bir yaklaşım benimser. Tüm öngörücü değişkenleri içeren bir modelle başlar ve yinelemeli olarak en az anlamlı değişkeni kaldırır. En yüksek p-değerine (veya en düşük F-istatistikine) sahip değişken, her adımda, çıkarılmasının model uyumunu önemli ölçüde kötüleştirmemesi koşuluyla kaldırılır. Kalan herhangi bir değişkenin çıkarılmasının modelin performansını önemli ölçüde düşürmesi durumunda işlem sona erer.

Adım Adım Seçim (Çift Yönlü)

Adım adım seçim, ileri ve geri seçimlerin güçlü yönlerini birleştirir. Boş bir modelle (ileri seçime benzer) veya tam bir modelle (geri elemeye benzer) başlar ve değişkenleri anlamlılıklarına bağlı olarak yinelemeli olarak ekler veya kaldırır. Bu, daha esnek ve potansiyel olarak optimal bir öngörücü alt kümesi sağlar.

statsmodels ile Adım Adım Regresyon

statsmodels yerleşik bir adım adım regresyon fonksiyonuna sahip değildir, ancak OLS (Ordinary Least Squares) modelini kullanarak ileri seçimi manuel olarak uygulayabiliriz:


import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.formula.api import ols

# Örnek veri
data = {'y': [10, 12, 15, 18, 20, 22, 25, 28, 30, 32],
        'x1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        'x2': [2, 4, 6, 8, 10, 12, 14, 16, 18, 20],
        'x3': [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]}
df = pd.DataFrame(data)

def forward_selection(data, target, significance_level=0.05):
    included = []
    while True:
        changed=False
        excluded = list(set(data.columns)-set(included)-{target})
        best_pvalue = 1.0
        best_feature = None
        for new_column in excluded:
            model = sm.OLS(target, sm.add_constant(data[included+[new_column]])).fit()
            pvalue = model.pvalues[new_column]
            if pvalue < best_pvalue:
                best_pvalue = pvalue
                best_feature = new_column
        if best_pvalue < significance_level:
            included.append(best_feature)
            changed=True
        if not changed: break
    return included

selected_features = forward_selection(df, df['y'])
print(f"Seçilen özellikler: {selected_features}")
final_model = sm.OLS(df['y'], sm.add_constant(df[selected_features])).fit()
print(final_model.summary())

sklearn ile Adım Adım Regresyon

sklearn, özellik seçimi için Özyinelemeli Özellik Eleme (RFE) kullanır. RFE, temel bir modelden (Doğrusal Regresyon gibi) önem puanlarına göre yinelemeli olarak özellikleri kaldırır:


from sklearn.linear_model import LinearRegression
from sklearn.feature_selection import RFE
from sklearn.model_selection import train_test_split

X = df.drop('y', axis=1)
y = df['y']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LinearRegression()
rfe = RFE(model, n_features_to_select=2) # Gerektiği gibi ayarlayın
rfe = rfe.fit(X_train, y_train)

print(f"Seçilen özellikler: {X.columns[rfe.support_]}")

final_model = LinearRegression().fit(X_train[X.columns[rfe.support_]], y_train)
print(f"Test kümesinde R-kare: {final_model.score(X_test[X.columns[rfe.support_]], y_test)}")

mlxtend ile Adım Adım Regresyon

mlxtend‘in SequentialFeatureSelector‘ı, ileri, geri veya adım adım seçim gerçekleştirmenin kullanışlı bir yolunu sağlar:


from mlxtend.feature_selection import SequentialFeatureSelector as SFS
from sklearn.linear_model import LinearRegression

model = LinearRegression()
sfs = SFS(model, k_features='best', forward=True, floating=False, scoring='r2', cv=5) #ileri seçim

sfs = sfs.fit(X, y)

print(f"Seçilen özellikler: {list(sfs.k_feature_idx_)}")

final_model = LinearRegression().fit(X[X.columns[list(sfs.k_feature_idx_)]], y)

Doğru Yöntemi Seçme ve Hususlar

Adım adım regresyon yönteminin (ileri, geri veya adım adım) ve kullanılan kütüphanenin seçimi, belirli veri kümesine ve hedeflere bağlıdır. Şunları göz önünde bulundurun:

  • Veri boyutu: Çok sayıda öngörücü değişken içeren durumlarda geriye eleme hesaplama açısından pahalı olabilir.
  • Çoklu doğrusal bağlantı: Adım adım yöntemler, yüksek oranda ilişkili öngörücülerle mücadele edebilir.
  • Yorumlanabilirlik ve tahmine dayalı doğruluk: Daha basit bir model (daha az değişken) biraz daha az doğru olsa bile, yorumlanması daha kolay olabilir.
  • Çapraz doğrulama: Genellenebilirliği sağlamak için k-katlı çapraz doğrulama gibi teknikler kullanarak modelinizi her zaman doğrulayın.

Adım adım regresyon dikkatlice kullanılmalıdır. Yeni verilere iyi genellenemeyen kararsız modellere yol açabilir. Aşırı uyumu ele almak için düzenleme içeren LASSO veya Ridge regresyonu gibi diğer özellik seçimi yöntemlerini araştırmayı göz önünde bulundurun.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir