CodeBlanks Logo Icon CodeBlanks

ElasticNet

ElasticNet, L1 ve L2 regularizasyonunu birleştirir.

ElasticNet

ElasticNet, L1 ve L2 cezalarını birleştirir. l1_ratio karışım oranıdır: 1 saf Lasso, 0 saf Ridge. Lasso'nun seyrekliğini ve Ridge'in ilişkili özelliklerdeki kararlılığını birlikte sunar:

from sklearn.linear_model import ElasticNet, ElasticNetCV
en = ElasticNet(alpha=0.1, l1_ratio=0.5).fit(Xs, y)
encv = ElasticNetCV(l1_ratio=[0.1, 0.5, 0.9, 1.0], cv=5, random_state=0).fit(Xs, y)
print(encv.alpha_, encv.l1_ratio_)

İlişkili özellik grupları varsa ElasticNet grubu birlikte tutma eğilimindedir; Lasso ise gruptan tek birini seçer.

Sınıflandırmada düzenlileştirme

Lojistik regresyon da düzenlileştirilir; ama scikit-learn'de ceza gücü C = 1/α ile verilir: küçük C güçlü ceza demektir. L1 cezası için uygun çözücü seçilmelidir:

LogisticRegression(C=0.1)                                  # güçlü L2
LogisticRegression(penalty="l1", C=0.1, solver="liblinear")   # seyrek
LogisticRegression(penalty="elasticnet", l1_ratio=0.5, solver="saga", C=1)

SVM'deki C da aynı mantıktadır: büyük C az ceza, sıkı uyum.

Uygulama Gruplu özellikler

İlk sütunun üç gürültülü kopyasından oluşan G ile Lasso(alpha=0.1) ve ElasticNet(alpha=0.1, l1_ratio=0.3) eğit. Her biri için sıfır olmayan katsayı sayısını aynı satırda yazdır (önce Lasso).

Başlangıç kodu

model.py
import numpy as np
from sklearn.preprocessing import StandardScaler

rng = np.random.default_rng(0)
X = rng.normal(size=(60, 20))
y = 3 * X[:, 0] - 2 * X[:, 1] + 1.5 * X[:, 2] + rng.normal(0, 1, 60)
Xs = StandardScaler().fit_transform(X)
from sklearn.linear_model import Lasso, ElasticNet

G = np.column_stack([Xs[:, 0] + rng.normal(0, 0.05, 60) for _ in range(3)])

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.preprocessing import StandardScaler

rng = np.random.default_rng(0)
X = rng.normal(size=(60, 20))
y = 3 * X[:, 0] - 2 * X[:, 1] + 1.5 * X[:, 2] + rng.normal(0, 1, 60)
Xs = StandardScaler().fit_transform(X)
from sklearn.linear_model import Lasso, ElasticNet

G = np.column_stack([Xs[:, 0] + rng.normal(0, 0.05, 60) for _ in range(3)])

a = (Lasso(alpha=0.1).fit(G, y).coef_ != 0).sum()
b = (ElasticNet(alpha=0.1, l1_ratio=0.3).fit(G, y).coef_ != 0).sum()
print(a, b)

Beklenen çıktı

1 3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>ElasticNet(l1_ratio=1.0)</code> neye eşittir?

  • LinearRegression
  • Hiçbiri
  • Lasso Doğru cevap
  • Ridge

Açıklama: l1_ratio = 1 cezanın tamamen L1 olduğu anlamına gelir.

2 L1 ve L2'yi eşit karıştır.

Soru
en = ElasticNet(alpha=0.1, ____=0.5)
Cevap
en = ElasticNet(alpha=0.1, l1_ratio=0.5)

Açıklama: l1_ratio cezanın L1 payıdır.

3 Parametreleri eşleştir.

Kavram Anlamı
l1_ratio=0 Saf Ridge
l1_ratio=1 Saf Lasso
C küçük Güçlü ceza
solver="liblinear" L1 lojistik

Orta seviye bölümündeki tüm dersler