Python ile Makine Öğrenimi - Veri Özelliği Seçimi
Önceki bölümde, makine öğrenimi için verilerin nasıl ön işleneceğini ve hazırlanacağını ayrıntılı olarak gördük. Bu bölümde, veri özelliği seçimini ve bununla ilgili çeşitli yönleri ayrıntılı olarak anlayalım.
Veri Özelliği Seçiminin Önemi
Makine öğrenimi modelinin performansı, onu eğitmek için kullanılan veri özellikleriyle doğru orantılıdır. ML modelinin performansı, kendisine sağlanan veri özelliklerinin alakasız olması durumunda olumsuz etkilenecektir. Öte yandan, ilgili veri özelliklerinin kullanılması, ML modelinizin doğruluğunu, özellikle doğrusal ve lojistik regresyonu artırabilir.
Şimdi, otomatik özellik seçiminin ne olduğu sorusu ortaya çıkıyor. Verilerimizde ilgilendiğimiz çıktı veya tahmin değişkeniyle en alakalı özellikleri seçtiğimiz süreç olarak tanımlanabilir. Aynı zamanda nitelik seçimi olarak da adlandırılır.
Aşağıdakiler, verileri modellemeden önce otomatik özellik seçiminin faydalarından bazılarıdır -
Veri modellemeden önce özellik seçimi yapmak, aşırı uyumu azaltacaktır.
Veri modellemeden önce özellik seçiminin yapılması ML modelinin doğruluğunu artıracaktır.
Veri modellemeden önce özellik seçimi yapmak eğitim süresini azaltacaktır
Özellik Seçim Teknikleri
Aşağıdakiler, Python'da makine öğrenimi verilerini modellemek için kullanabileceğimiz otomatik özellik seçme teknikleridir -
Tek Değişkenli Seçim
Bu özellik seçim tekniği, tahmin değişkenleriyle en güçlü ilişkiye sahip olan istatistiksel testlerin yardımıyla bu özelliklerin seçiminde çok kullanışlıdır. Scikit-learn Python kitaplığının SelectKBest0class yardımıyla tek değişkenli özellik seçim tekniğini uygulayabiliriz.
Example
Bu örnekte, ki-kare istatistiksel test yardımıyla en iyi özelliklere sahip olan özelliklerden 4 tanesini seçmek için Pima Indians Diabetes veri setini kullanacağız.
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Ardından, diziyi giriş ve çıkış bileşenlerine ayıracağız -
X = array[:,0:8]
Y = array[:,8]
Aşağıdaki kod satırları, veri kümesinden en iyi özellikleri seçecektir -
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)
Ayrıca çıktı için verileri seçimimize göre özetleyebiliriz. Burada, hassasiyeti 2'ye ayarlıyoruz ve her bir özelliğin en iyi puanıyla birlikte en iyi özelliklere sahip 4 veri özelliğini gösteriyoruz -
set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])
Output
[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[
[148. 0. 33.6 50. ]
[ 85. 0. 26.6 31. ]
[183. 0. 23.3 32. ]
[ 89. 94. 28.1 21. ]
]
Yinelemeli Özellik Kaldırma
Adından da anlaşılacağı gibi, RFE (Yinelemeli özellik eliminasyonu) özellik seçme tekniği, öznitelikleri özyinelemeli olarak kaldırır ve modeli kalan özniteliklerle oluşturur. RFE özellik seçim tekniğini scikit-learn Python kitaplığının RFE sınıfı yardımıyla uygulayabiliriz.
Misal
Bu örnekte, Pima Indians Diabetes veri kümesinden en iyi özelliklere sahip en iyi 3 özelliği seçmek için lojistik regresyon algoritmalı RFE'yi kullanacağız.
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Sonra, diziyi giriş ve çıkış bileşenlerine ayıracağız -
X = array[:,0:8]
Y = array[:,8]
Aşağıdaki kod satırları, bir veri kümesindeki en iyi özellikleri seçecektir -
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")
Çıktı
Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]
Yukarıdaki çıktıda görebiliyoruz, RFE ilk 3 en iyi özellik olarak preg, mass ve pedi'yi seçiyor. Çıkışta 1 olarak işaretlenirler.
Temel Bileşen Analizi (PCA)
Genel olarak veri azaltma tekniği olarak adlandırılan PCA, veri setini sıkıştırılmış bir forma dönüştürmek için doğrusal cebir kullandığı için çok kullanışlı özellik seçme tekniğidir. PCA özellik seçme tekniğini scikit-learn Python kitaplığının PCA sınıfı yardımıyla uygulayabiliriz. Çıktıdaki ana bileşen sayısını seçebiliriz.
Misal
Bu örnekte, Pima Indians Diabetes veri setinden en iyi 3 Ana bileşeni seçmek için PCA'yı kullanacağız.
from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Ardından, diziyi giriş ve çıkış bileşenlerine ayıracağız -
X = array[:,0:8]
Y = array[:,8]
Aşağıdaki kod satırları, veri kümesinden özellikleri çıkaracaktır -
pca = PCA(n_components=3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)
Çıktı
Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[
[
-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02
9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03
]
[
2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02
-9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01
]
[
-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01
2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01
]
]
Yukarıdaki çıktıdan, 3 Ana Bileşenin kaynak verilere çok az benzerlik gösterdiğini gözlemleyebiliriz.
Özellik Önemi
Adından da anlaşılacağı gibi, önem özelliklerini seçmek için özellik önem tekniği kullanılmaktadır. Temel olarak, özellikleri seçmek için eğitimli bir denetimli sınıflandırıcı kullanır. Scikit-learn Python kitaplığının ExtraTreeClassifier sınıfı yardımıyla bu özellik seçim tekniğini uygulayabiliriz.
Misal
Bu örnekte, Pima Indians Diabetes veri setinden özellikler seçmek için ExtraTreeClassifier kullanacağız.
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values
Ardından, diziyi giriş ve çıkış bileşenlerine ayıracağız -
X = array[:,0:8]
Y = array[:,8]
Aşağıdaki kod satırları, veri kümesinden özellikleri çıkaracaktır -
model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)
Çıktı
[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]
Çıktıdan, her bir özniteliğin puanları olduğunu gözlemleyebiliriz. Puan ne kadar yüksekse, bu özelliğin önemi de o kadar yüksektir.