Zephyrnet Logosu

Özellik Seçimi: Bilimin Sanatla Buluştuğu Yer

Tarih:

By Mahbubul Alem, Veri Bilimcisi, Ekonomist ve Kantitatif Araştırmacı

şekil
Fotoğraf David Clode on Unsplash

 

Bazı insanlar, veri bilimi projelerinin en önemli parçasının özellik seçimi ve mühendisliği olduğunu söylüyor. Çoğu durumda, model performansında tüm farkı yaratan karmaşık algoritmalar değil, özellik seçimidir.

Çok az sayıda özellik bir modele yetersiz kalabilir. Örneğin, ev fiyatlarını tahmin etmek istiyorsanız, sadece yatak odası sayısını ve kat alanını bilmek yeterli değildir. Konum, okul bölgesi, mülk yaşı gibi bir alıcının önemsediği birçok önemli değişkeni atlıyorsunuz.

Diğer yönden de gelebilir ve mülk üzerindeki ağaçların isimleri gibi her küçük ayrıntıyı anlatan 100 farklı özellik seçebilirsiniz. Bu özellikler daha fazla bilgi eklemek yerine gürültü ve karmaşıklık katar. Seçilen özelliklerin çoğu tamamen alakasız olabilir. Bunun da ötesinde, çok fazla özellik, bir modeli eğitmek için hesaplama maliyetleri ekler.

Öyleyse, iyi bir tahmine dayalı model oluşturmak için, doğru sayıda özellik nedir ve hangi özelliklerin korunacağını, hangi özelliklerin bırakılacağını ve hangi yeni özelliklerin ekleneceğini nasıl seçmeli? Bu, makine öğrenimi projelerinde, makine öğrenimi olarak bilinenleri yönetmede önemli bir husustur. önyargı-varyans değiş tokuşu.

Burası aynı zamanda “bilimin” “sanat” ile buluştuğu yerdir.

Bu makalenin amacı, bazı basit uygulamalarla öznitelik seçme tekniklerinin gizemini çözmektir. Aşağıda tarif ettiğim teknikler, regresyon ve sınıflandırma problemlerinde eşit olarak çalışmalıdır. Denetimsiz sınıflandırma (örn. kümeleme) biraz zor olabilir, bu yüzden bunun hakkında ayrıca konuşacağım.

sezgisel yaklaşım

 
 
Veri biliminde buluşsal yöntemlerden pek bahsetmiyoruz ama oldukça alakalı. Tanıma bakalım (kaynak: Vikipedi):

Bir buluşsal veya buluşsal teknik .... optimal, mükemmel veya rasyonel olduğu garanti edilmeyen, ancak yine de acil, kısa vadeli bir hedefe veya yaklaşıklığa ulaşmak için yeterli olan pratik bir yöntem kullanır.

Bu tanım, sezgiye dayalı olarak yapılırsa, özellik seçimi için de geçerlidir. Sadece bir veri kümesine bakarak, şu veya bu özelliklerin güçlü tahmin ediciler olduğu ve bazılarının bağımlı değişkenle hiçbir ilgisi olmadığı hissine kapılacaksınız ve bunları ortadan kaldırmanın güvenli olduğunu hissedeceksiniz.

Emin değilseniz, özellikler ve bağımlı değişken arasındaki korelasyonu kontrol etmek için bir adım daha ileri gidebilirsiniz.

Veri kümesinde çok fazla özellik olduğu için, yalnızca bu buluşsal yöntemler (sezgi ve korelasyon) doğru özellikleri seçerken işinizin çoğunu halledecektir.

Örnek olarak, şirketinizin farklı kanallarda (TV, radyo, gazete) reklam vermek için bütçe ayırdığını varsayalım. Bir reklam platformu olarak hangi kanalın en etkili olduğunu ve beklenen geri dönüşün ne olduğunu tahmin etmek istiyorsunuz.

Bir model oluşturmadan önce geçmiş verilere bakarsınız ve farklı platformlardaki reklam harcamaları ile buna karşılık gelen satış geliri arasındaki aşağıdaki ilişkiyi bulursunuz.



Farklı platformlarda satışlar ve reklam harcamaları arasındaki ilişkileri gösteren iki değişkenli dağılım grafikleri (şekil kaynağı: yazar; veri kaynağı: ISLR, lisans: GLP 2, kamu malı).

 

Dağılım grafiklerine dayanarak, reklam gelirini açıklamak için en iyi özelliklerin neler olduğunu düşünüyorsunuz? Açıkçası, gazete reklamlarının sonuç üzerinde önemli bir etkisi yoktur, bu yüzden onu modelden çıkarmak isteyebilirsiniz.

Otomatik özellik seçimi

 
 
Şimdi otomatik özellik seçme tekniklerine gireceğiz. Bunların çoğu, sisteme entegre edilmiştir. sklearn modül, böylece özellik seçimini standart bir biçimde yalnızca birkaç kod satırında uygulayabilirsiniz.

Gösterim için 'iris' veri setini kullanacağım (kaynak: Kaggle/UCI Makine Öğrenimi, lisans: CC0 kamu malı). Bu basit bir veri kümesidir ve yalnızca 5 sütunu vardır, yine de önemli noktaları karşınıza alırsınız.

Veri setini şuradan yükleyelim: seaborn kütüphane.

# import seaborn library
import seaborn as sns# load iris dataset
iris = sns.load_dataset('iris')
iris.head(5)



# separate features (X) from the target (y) variable
X = iris.drop('species', axis=1)
y = iris['species']

Veri kümesinde "türler" tahmin etmek istediğimizdir ve kalan 4 sütun tahmin edicidir. Özellik sayısını programlı olarak onaylayalım:

# number of predictors in the current dataset
X.shape[1]>> 4

Şimdi devam edelim ve birkaç özellik seçme tekniği uygulayalım.

1) Ki-kare tabanlı teknik

 
 
Ki-kare tabanlı teknik, bazı puanlara dayalı olarak belirli sayıda kullanıcı tanımlı özellik (k) seçer. Bu puanlar, X (bağımsız) ve y (bağımlı) değişkenler arasındaki ki-kare istatistikleri hesaplanarak belirlenir.

sklearn ki-kare tabanlı öznitelik seçimi için yerleşik yöntemlere sahiptir. Tek yapmanız gereken kaç tane özelliği saklamak istediğinizi belirlemektir (diyelim ki iris veri seti için k=3).

# import modules
from sklearn.feature_selection import SelectKBest, chi2# select K best features
X_best = SelectKBest(chi2, k=3).fit_transform(X,y) 

Şimdi 3'ten en iyi 4 özelliği aldığımızı onaylayalım.

# number of best features
X_best.shape[1]>> 3

Çok sayıda özellik için, tutmak veya bırakmak istediğiniz özelliklerin belirli bir yüzdesini belirtmeyi tercih edebilirsiniz. Yukarıdakine benzer bir şekilde çalışır. Diyelim ki özelliklerin %75'ini tutmak ve kalan %25'i düşürmek istiyoruz.

# keep 75% top features X_top = SelectPercentile(chi2, percentile = 75).fit_transform(X,y)# number of best features
X_top.shape[1]>> 3

2) Kirlilik tabanlı özellik seçimi

 
 
Ağaç tabanlı algoritmalar (örn. Rastgele Orman Sınıflandırıcısı) yerleşik feature_importances_ özniteliği.

Bir Karar Ağacı, safsızlığı azaltan bir özellik kullanarak verileri böler (ölçüm açısından ölçülür). Gini kirliliği or bilgi kazancı). Bu, en iyi özelliği bulmak, algoritmanın sınıflandırma problemlerini çözmek için nasıl çalıştığının önemli bir parçası olduğu anlamına gelir. Daha sonra aracılığıyla en iyi özelliklere erişebiliriz feature_importances_ özniteliği.

İlk önce “iris” veri setini 200 tahmin edicili bir Rastgele Orman Sınıflandırıcısına sığdıralım.

# import model
from sklearn.ensemble import RandomForestClassifier# instantiate model
model = RandomForestClassifier(n_estimators=200, random_state=0)# fit model
model.fit(X,y)

Şimdi öznitelik çağrısı ile özellik önemine erişelim.

# importance of features in the model
importances = model.feature_importances_print(importances)>> array([0.0975945 , 0.02960937, 0.43589795, 0.43689817])

Yukarıdaki çıktı, her bir düğümde/bölmede safsızlığı azaltmada 4 özelliğin her birinin önemini gösterir.

Rastgele Orman Sınıflandırıcısı birçok tahmin ediciye sahip olduğundan (örneğin yukarıda 200 karar ağacı), bir güven aralığı ile göreli önemin bir tahminini hesaplayabiliriz. Görselleştirelim.

# calculate standard deviation of feature importances std = np.std([i.feature_importances_ for i in model.estimators_], axis=0)# visualizationfeat_with_importance = pd.Series(importances, X.columns)fig, ax = plt.subplots()
feat_with_importance.plot.bar(yerr=std, ax=ax)
ax.set_title("Feature importances")
ax.set_ylabel("Mean decrease in impurity")
fig.tight_layout()



Şekil: Safsızlık ölçümlerinde özelliklerin önemi (kaynak: yazar)

 

Artık her özelliğin önemini bildiğimize göre, hangi özelliklerin tutulacağını ve hangilerinin bırakılacağını manuel olarak (veya görsel olarak) belirleyebiliriz.

Alternatif olarak, Scikit-Learn'ün meta dönüştürücüsünden de yararlanabiliriz. SelectFromModel bu işi bizim için yapmak.

# import the transformer
from sklearn.feature_selection import SelectFromModel# instantiate and select features
selector = SelectFromModel(estimator = model, prefit=True)
X_new = selector.transform(X)
X_new.shape[1]>> 2

3) Düzenlileştirme

 
 
Düzenlileştirme, aşırı takmayı azaltmak için makine öğreniminde önemli bir kavramdır (okuyun: Düzenleme ile Aşırı Takmaktan Kaçının). Çok fazla özelliğiniz varsa, düzenlileştirme bunların etkisini, ya özellik katsayılarını küçülterek (L2 düzenlileştirme/Ridge Regresyonu olarak adlandırılır) veya bazı özellik katsayılarını sıfıra ayarlayarak (L1 düzenlileştirme/LASSO Regresyonu olarak adlandırılır) kontrol eder.

Bazı doğrusal modellerde, özellikleri cezalandırmak için bir hiper parametre olarak yerleşik L1 düzenlemesi bulunur. Bu özellikler meta dönüştürücü kullanılarak ortadan kaldırılabilir. SelectFromModel.

uygulayalımLinearSVC hiper parametreli algoritma ceza = 'l1'. sonra kullanırız SelectFromModelBazı özellikleri kaldırmak için.

# implement algorithm
from sklearn.svm import LinearSVC
model = LinearSVC(penalty= 'l1', C = 0.002, dual=False)
model.fit(X,y)# select features using the meta transformer
selector = SelectFromModel(estimator = model, prefit=True)
X_new = selector.transform(X)
X_new.shape[1]>> 2# names of selected features
feature_names = np.array(X.columns)
feature_names[selector.get_support()]>> array(['sepal_length', 'petal_length'], dtype=object)

4) Sıralı seçim

 
 
Sıralı özellik seçimi, çok eski bir istatistiksel tekniktir. Bu durumda, modele birer birer özellikler eklersiniz (veya kaldırırsınız) ve model performansınızı kontrol eder ve ardından hangisini tutacağınızı buluşsal olarak seçersiniz.

Sıralı seçimin iki çeşidi vardır. bu ileri seçim teknik sıfır özellik ile başlar, ardından hatayı en aza indiren bir özellik ekler; sonra başka bir özellik ekler, vb. bu geriye doğru seçim ters yönde çalışır. Model tüm özelliklerle başlar ve hatayı hesaplar; daha sonra hatayı daha da en aza indiren bir özelliği ortadan kaldırır ve istenen sayıda özellik kalana kadar bu böyle devam eder.

Scikit-Learn modülü vardır SequentialFeatureSelector Hayatı kolaylaştırmak için meta dönüştürücü. Bunun için çalıştığını unutmayın sklearnv0.24 veya üstü.

# import transformer class
from sklearn.feature_selection import SequentialFeatureSelector# instantiate model
model = RandomForestClassifier(n_estimators=200, random_state=0)# select features
selector = SequentialFeatureSelector(estimator=model, n_features_to_select=3, direction='backward')
selector.fit_transform(X,y).shape[1]>> 3# names of features selected
feature_names = np.array(X.columns)
feature_names[selector.get_support()]>> array(['sepal_width', 'petal_length', 'petal_width'], dtype=object)

Alternatif teknikler…

 
 
Az önce anlattığım tekniklerin dışında deneyebileceğiniz birkaç yöntem daha var. Bazıları tam olarak özellik seçimi için tasarlanmamıştır, ancak biraz daha derine inerseniz bunların özellik seçimi için nasıl yaratıcı bir şekilde uygulanabileceğini göreceksiniz.

  • Beta katsayıları: doğrusal bir regresyon çalıştırdıktan sonra elde ettiğiniz katsayılar (beta katsayıları), bağımlı değişkenin her bir özelliğe göreli duyarlılığını gösterir. Buradan katsayı değerleri yüksek olan özellikleri seçebilirsiniz.
  • p-değeri: Klasik bir istatistiksel pakette regresyon uygularsanız (örn. statsmodels ), model çıktısının her özellik için p değerleri içerdiğini fark edeceksiniz (Bu check out). p değeri, katsayının tam olarak sıfır olduğu sıfır hipotezini test eder. Böylece yüksek p değerleri ile ilişkili özellikleri ortadan kaldırabilirsiniz.
  • Varyans Enflasyon Faktörü (VIF): Tipik olarak VIF, veri kümesindeki çoklu doğrusallığı tespit etmek için kullanılır. İstatistikçiler, temel bir doğrusal regresyon varsayımını karşılamak için genellikle yüksek VIF'li değişkenleri kaldırır.
  • Akaike ve Bayesian Bilgi Kriterleri (AIC/BIC): Genellikle iki model arasındaki performansları karşılaştırmak için AIC ve BIC kullanılır. Ancak, örneğin AIC/BIC açısından ölçülen daha iyi bir model kalitesi elde etmenizi sağlayan belirli özellikleri seçerek özellik seçimi için bunu kendi yararınıza kullanabilirsiniz.
  • Temel Bileşen Analizi (PCA): PCA'nın ne olduğunu biliyorsanız, doğru tahmin ettiniz. Bu tam olarak bir özellik seçme tekniği değildir, ancak PCA'nın boyutsallık azaltma özellikleri, özellikleri tamamen ortadan kaldırmadan bu etki için kullanılabilir ancak kullanılabilir.
  • Ve bircok digerleri: Birlikte gelen epeyce başka özellik seçim sınıfı var. sklearn modül, belgelere göz atın. Yakın zamanda bir kümeleme tabanlı algoritma da önerilmiştir. bilimsel makale. Fisher's Skoru mevcut başka bir tekniktir.

Kümelemeye ne dersiniz?

 
 
Kümeleme, denetimsiz bir makine öğrenimi algoritmasıdır, yani verilerinizi bir kümeleme algoritmasına beslersiniz ve algoritma, verileri bazı "özelliklere" dayalı olarak farklı kümelere nasıl böleceğinizi çözecektir. Bu özellikler aslında özelliklerden gelir.

Kümeleme, özellik seçimi gerektiriyor mu? Elbette. Uygun özellikler olmadan, kümeler işe yaramaz olabilir. Yüksek kaliteli, orta sınıf ve düşük kaliteli ürünler satmak için müşterileri segmentlere ayırmak istediğinizi varsayalım. Bu, dolaylı olarak kullandığınız anlamına gelir müşteri geliri bir faktör olarak. sen de geçebilirsin eğitim karışımın içine. Onların yaş ve yıllar deneyim? Emin. Ancak özellik sayısını artırdıkça, algoritma neyi başarmaya çalıştığınız konusunda kafa karıştırır ve bu nedenle çıktılar tam olarak aradığınız şey olmayabilir.

Yani, veri bilimcileri kümeleme algoritmalarını bir boşlukta çalıştırmazlar, genellikle akıllarında bir hipotez veya soru vardır. Yani özellikler bu ihtiyaca uygun olmalıdır.

Özet

 
 
Veri bilimcileri, model performansı üzerindeki etkisi nedeniyle özellik seçimini çok ciddiye alır. Düşük boyutlu bir veri kümesi buluşsal yöntemi ve sezgisi için mükemmel çalışır, ancak yüksek boyutlu veriler için işi yapmak için otomatikleştirilmiş teknikler vardır. En kullanışlı teknikler, ki-kare ve safsızlık tabanlı algoritmaların yanı sıra düzenlileştirme ve sıralı özellik seçimini içerir. Ek olarak, regresyonda beta katsayıları, p-değeri, VIF, AIC/BIC ve boyutsallık indirgeme gibi kullanışlı hale getirilebilecek alternatif teknikler vardır.

Bu makalenin başlığında “bilim sanatla buluşuyor” dedim. Bunun nedeni, özellik seçimi söz konusu olduğunda doğru ya da yanlış cevap olmamasıdır. Bilim araçlarını kullanabiliriz, ancak sonuçta bu, bir veri bilimcisi tarafından verilen öznel bir karar olabilir.

Okuduğunuz için teşekkürler. Çekinmeyin abone ol gelecek makalelerimden haberdar olmak veya benimle iletişim kurmak için Twitter or  LinkedIn.

 
Bio: Mahbubul Alem politika ve iş kararları vermede veri bilimini uygulama konusunda 8 yılı aşkın iş deneyimine sahiptir ve devlet ve sivil toplum kuruluşlarındaki paydaşlarla yakın bir şekilde çalışmıştır ve veriye dayalı çözümlerle daha iyi kararlar alınmasına yardımcı olmuştur. Mab, istatistiksel modelleme ve anket tasarımı ve veri toplamadan gelişmiş tahmine dayalı modeller oluşturmaya kadar veri biliminin tüm yönleri konusunda tutkulu. Mab ayrıca, kariyerlerinin başlarından ortalarına kadar analistlere, ekip liderlerine ve veri bilimine geçiş yapan veya kuruluşlarında veri bilimi becerileri geliştiren BT uzmanlarına yönelik olarak tasarlanmış bir veri bilimi ve iş analitiği kursu öğretiyor/danışmanlık yapıyor.

orijinal. İzinle yeniden yayınlandı.

İlgili:

Kaynak: https://www.kdnuggets.com/2021/12/feature-selection-science-meets-art.html

spot_img

En Son İstihbarat

spot_img