Skip to content

Cum să extragi și să selecționezi features

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn how to extract and select the most relevant features from your dataset using techniques like feature importance, PCA, and mutual information, reducing dimensionality and improving model performance.

Problema

Prea multe features încetinesc antrenarea, cresc riscul de overfitting și fac modelul greu de interpretat. Nu toate coloanele din date aduc informație utilă — unele sunt redundante sau chiar zgomot.

Soluția Greșită

import pandas as pd
from sklearn.ensemble import RandomForestClassifier

df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]

# Folosesti toate coloanele fara selectie
model = RandomForestClassifier()
model.fit(X, y)

Problema: Dacă ai 200 de coloane, multe irelevante, modelul va fi lent, va face overfitting și scorul va fi suboptim.

Soluția Corectă

from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
import pandas as pd

df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]

# Antreneaza un model pentru a calcula importanta
selector = SelectFromModel(RandomForestClassifier(n_estimators=100))
selector.fit(X, y)

# Pastreaza doar feature-urile importante
X_important = selector.transform(X)
print(f"Features initiale: {X.shape[1]}")
print(f"Features selectate: {X_important.shape[1]}")

Output:

Features initiale: 50
Features selectate: 12

Implementare Pas cu Pas

1. Calculează importanța cu Random Forest

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)

importante = pd.DataFrame({
    "feature": X.columns,
    "importanta": model.feature_importances_
}).sort_values("importanta", ascending=False)

print(importante.head(10))

2. Alege pragul de selecție

from sklearn.feature_selection import SelectKBest, f_classif

selector = SelectKBest(score_func=f_classif, k=15)
X_selected = selector.fit_transform(X, y)
coloane_selectate = X.columns[selector.get_support()]
print(coloane_selectate.tolist())

3. Folosește PCA pentru reducere de dimensionalitate

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scalat = scaler.fit_transform(X)

pca = PCA(n_components=10)
X_pca = pca.fit_transform(X_scalat)
print(f"Varianta explicata: {pca.explained_variance_ratio_.sum():.2%}")

Sfaturi pentru Prevenire

  • Începe cu SelectKBest sau importanța Random Forest — sunt simple și interpretabile
  • Folosește PCA când ai multe coloane corelate între ele
  • Setează n_components astfel încât varianta explicată să fie > 90%
  • Nu aplica PCA înainte de a scala datele
  • Combină selecția automată cu cunoștințele de domeniu

Greșeli Comune

  1. Aplici PCA fără să scalezi — componentele principale sunt deformate
  2. Folosești prea multe features — modelul face overfitting
  3. Arunci features fără să înțelegi contextul — unele features aparent slabe sunt esențiale
  4. Nu verifici multicolinearitatea — PCA sau regularizarea pot ajuta
  5. Selectezi features pe tot dataset-ul înainte de train/test split — cauți data leakage

Întrebări Frecvente

### Care este diferența dintre extracție și selecție de features?

Extracția (PCA) creează features noi din combinații ale celor existente. Selecția (SelectKBest) păstrează doar un subset din features originale.

Când să folosesc PCA vs selecție directă?

PCA când features sunt corelate și vrei dimensionalitate mai mică. Selecția directă când interpretabilitatea e importantă.

Ce metodă de selecție e cea mai rapidă?

f_classif (ANOVA) e rapid și funcționează bine pentru clasificare. Mutual information e mai lent dar detectează relații neliniare.

Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with sklearn for enhanced productivity and security.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro