ElasticNet
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 107/112
- 5 dk
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
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
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.
en = ElasticNet(alpha=0.1, ____=0.5)
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 |