Bilişim dünyasına kaliteli, özgün ve Türkçe içerikler kazandırmayı hedefleyen bir platform..

friends friends friends

Feature Importance

Makine öğrenmesinde, özelliklerin(feature) önem puanları, bir tahmin modeli oluştururken bir veri kümesindeki her bir özelliğin göreceli önemini belirlemek için kullanılır. Bu puanlar, karar ağaçları, rastgele ormanlar, doğrusal modeller ve sinir ağları gibi çeşitli teknikler kullanılarak hesaplanır.

Bir veri setinde hangi kolonların ne kadar önemli olduklarını(feature importance) anlamak için Random Forest kullanabiliriz. Aşağıda İris veri seti üzerinden bunu nasıl yaptığımızı görebilirsiniz:

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

# 1. Veri setini yükleyin
# Örneğin: iris veri seti
from sklearn.datasets import load_iris
data = load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target

# 2. Özellikler (X) ve hedef (y) değişkeni
X = df.drop(columns=['target'])
y = df['target']

# 3. Eğitim ve test setlerine bölme
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 4. Random Forest Modelini Eğitme
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

# 5. Özellik önemlerini alma
feature_importances = model.feature_importances_

# 6. Özellik önemlerini görselleştirme
plt.figure(figsize=(10, 6))
plt.barh(X.columns, feature_importances, color='turquoise')
plt.xlabel("Feature Importance")
plt.ylabel("Features")
plt.title("Feature Importance Using Random Forest")
plt.show()
Feature Importance in iris dataset
Feature Importance in iris dataset
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt
import pandas as pd

# CSV dosyasını okuma ve ilk satırı sütun isimleri olarak ayarlama
df = pd.read_csv("https://bilisimkitabi.com/files/kimyasal_bilesenler_dummy.csv", header=0)

# Özellikler (X) ve hedef değişkeni (y) belirleme
X = df.drop(columns=['HarvestTime'])
y = df['HarvestTime']

# Modeli oluştur ve eğit
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X, y)

# Özellik önemlerini al
importances = clf.feature_importances_

# Özelliklerin önemini yazdır
for feature, importance in zip(X.columns, importances):
    print(f"{feature}: {importance:.4f}")

# Özellik önemlerini görselleştir
plt.bar(X.columns, importances)
plt.xlabel('Features')
plt.ylabel('Importance')
plt.title('Feature Importances')
plt.xticks(rotation=45)
plt.show()
Feature Importance
Feature Importance
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

# 1. Veri setini yükleyin
df = pd.read_csv("https://bilisimkitabi.com/files/kimyasal_bilesenler_dummy.csv", header=0)

# 2. Özellikler (X) ve hedef (y) değişkeni
X = df.drop(columns=['HarvestTime'])
y = df['HarvestTime']

# 3. Eğitim ve test setlerine bölme
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 4. Random Forest Modelini Eğitme
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

# 5. Özellik önemlerini alma
feature_importances = model.feature_importances_

# 6. Özellik önemlerini görselleştirme
plt.figure(figsize=(10, 6))
plt.barh(X.columns, feature_importances, color='turquoise')
plt.xlabel("Feature Importance")
plt.ylabel("Features")
plt.title("Feature Importance Using Random Forest")
plt.show()
Feature Importance
Feature Importance

Özellik seçimi: En önemli özellikleri belirleyerek, uygulayıcılar bir model oluşturmada kullanılacak ilgili özelliklerin bir alt kümesini seçebilir, verilerdeki boyutluluğu ve gürültüyü azaltabilir ve model yorumlanabilirliğini iyileştirebilir.

Model yorumlanabilirliği: Hangi özelliklerin en önemli olduğunu anlayarak, uygulayıcılar verilerdeki temel ilişkiler ve modelin nasıl tahminler yaptığı hakkında fikir edinebilirler.

Model hata ayıklama: Bir model iyi performans göstermiyorsa, özellik önemi hangi özelliklerin sorunlara neden olabileceğini ve daha fazla araştırma gerektirebileceğini belirlemek için kullanılabilir.

İş karar alma: Hangi özelliklerin en önemli olduğunu anlayarak, uygulayıcılar hangi özelliklerin toplanacağı ve kaynakların nasıl tahsis edileceği konusunda daha bilinçli kararlar alabilirler.

Model performansını iyileştirme: Daha az önemli özellikleri kaldırarak, uygulayıcılar aşırı uyumu ve eğitim süresini azaltarak model performansını iyileştirebilir.

Eksik Veri Varsa Feature Importance Yapılır mı?

Yukarıdaki veri setlerinde eksik veri yoktu onun için bir hata almadan çalıştırabildik ancak eksik veriler varsa iki yaklaşım ile hata almadan çıktı alabiliriz:

  1. Eksik veri varsa, silmek
  2. Eksik veri varsa, tamamlamamak

Eksik Verileri Silmek

df.dropna(inplace=True)

Eksik Verileri Doldurmak (Tamamlamak)

df.fillna(df.mean(numeric_only=True), inplace=True)
df.fillna("Bilinmiyor", inplace=True)

Pipeline ile

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
from sklearn.ensemble import RandomForestClassifier

# 1. Veri yükleme
df = pd.read_excel("data.xlsx")

# 2. Hedef ve özellikler
X = df.drop("HASTA", axis=1)
y = df["HASTA"]

# 3. Sayısal ve kategorik sütunları ayır
num_cols = X.select_dtypes(include=['int64', 'float64']).columns
cat_cols = X.select_dtypes(include=['object']).columns

# 4. Ön işleme pipeline
numeric_transformer = Pipeline(steps=[
    ("imputer", SimpleImputer(strategy="mean"))
])

categorical_transformer = Pipeline(steps=[
    ("imputer", SimpleImputer(strategy="most_frequent")),
    ("encoder", OneHotEncoder(handle_unknown="ignore"))
])

preprocessor = ColumnTransformer(
    transformers=[
        ("num", numeric_transformer, num_cols),
        ("cat", categorical_transformer, cat_cols)
    ]
)

# 5. Model pipeline
model = Pipeline(steps=[
    ("preprocess", preprocessor),
    ("rf", RandomForestClassifier(random_state=42))
])

# 6. Train-test split
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 7. Model eğitimi
model.fit(X_train, y_train)

# 8. Feature importance alma
rf_model = model.named_steps["rf"]

# One-hot sonrası feature isimlerini al
ohe = model.named_steps["preprocess"].named_transformers_["cat"].named_steps["encoder"]

cat_feature_names = ohe.get_feature_names_out(cat_cols)
all_feature_names = np.concatenate([num_cols, cat_feature_names])

importances = rf_model.feature_importances_

# 9. DataFrame oluştur (sıralı)
feat_imp_df = pd.DataFrame({
    "Feature": all_feature_names,
    "Importance": importances
}).sort_values(by="Importance", ascending=True)

# 10. Görselleştirme
plt.figure(figsize=(10, 8))
plt.barh(feat_imp_df["Feature"], feat_imp_df["Importance"], color="turquoise")
plt.xlabel("Feature Importance")
plt.ylabel("Features")
plt.title("Feature Importance (Random Forest)")
plt.tight_layout()
plt.show()
0 Beğeni
Makine Öğrenmesi
Önceki Yazı

Excel'de Çoklu EĞER Formülü

29 Kas. 2024 tarihinde yayınlandı.
Sonraki Yazı

Çocuk Kitapları Hazırlamak İçin Yapay Zeka Aracı

29 Kas. 2024 tarihinde yayınlandı.
arrow