اختيار نموذج لاصو عبر معايير المعلومات#

هذا المثال يعيد إنتاج مثال الشكل 2 من [ZHT2007]. يقوم مقدر LassoLarsIC بالتناسب مع مجموعة بيانات مرض السكري ويتم استخدام معياري معلومات أكايكي (AIC) ومعلومات بايز (BIC) لاختيار أفضل نموذج.

ملاحظة

من المهم ملاحظة أن التحسين للعثور على alpha مع LassoLarsIC يعتمد على معياري AIC أو BIC اللذين يتم حسابهما داخل العينة، وبالتالي على مجموعة التدريب مباشرة. يختلف هذا النهج عن إجراء التحقق من الصحة المتقاطع. لمقارنة النهجين، يمكنك الرجوع إلى المثال التالي: نموذج لاصو: اختيار النموذج باستخدام معايير AIC-BIC والتحقق المتقاطع.

المراجع

# المؤلفون: مطوري سكايلرن
# معرف الترخيص: BSD-3-Clause

سنستخدم مجموعة بيانات مرض السكري.

from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True)
n_samples = X.shape[0]
X.head()
age sex bmi bp s1 s2 s3 s4 s5 s6
0 0.038076 0.050680 0.061696 0.021872 -0.044223 -0.034821 -0.043401 -0.002592 0.019907 -0.017646
1 -0.001882 -0.044642 -0.051474 -0.026328 -0.008449 -0.019163 0.074412 -0.039493 -0.068332 -0.092204
2 0.085299 0.050680 0.044451 -0.005670 -0.045599 -0.034194 -0.032356 -0.002592 0.002861 -0.025930
3 -0.089063 -0.044642 -0.011595 -0.036656 0.012191 0.024991 -0.036038 0.034309 0.022688 -0.009362
4 0.005383 -0.044642 -0.036385 0.021872 0.003935 0.015596 0.008142 -0.002592 -0.031988 -0.046641


يوفر سكايلرن مقدرًا يسمى LassoLarsIC الذي يستخدم إما معيار معلومات أكايكي (AIC) أو معيار معلومات بايز (BIC) ل اختيار أفضل نموذج. قبل تناسب هذا النموذج، سنقوم بتصغير مجموعة البيانات.

في ما يلي، سنقوم بتناسب نموذجين لمقارنة القيم المبلغ عنها من قبل AIC و BIC.

from sklearn.linear_model import LassoLarsIC
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

lasso_lars_ic = make_pipeline(StandardScaler(), LassoLarsIC(criterion="aic")).fit(X, y)

لكي نكون على نفس الخط مع التعريف في [ZHT2007]، نحتاج إلى إعادة تصغير AIC و BIC. في الواقع، يتجاهل Zou et al. بعض المصطلحات الثابتة مقارنة بالتعريف الأصلي لـ AIC المشتق من اللوغاريتم الأقصى لنموذج خطي. يمكنك الرجوع إلى قسم التفاصيل الرياضية لدليل المستخدم.

def zou_et_al_criterion_rescaling(criterion, n_samples, noise_variance):
    """إعادة تصغير معيار المعلومات لمتابعة تعريف Zou et al."""
    return criterion - n_samples * np.log(2 * np.pi * noise_variance) - n_samples
import numpy as np

aic_criterion = zou_et_al_criterion_rescaling(
    lasso_lars_ic[-1].criterion_,
    n_samples,
    lasso_lars_ic[-1].noise_variance_,
)

index_alpha_path_aic = np.flatnonzero(
    lasso_lars_ic[-1].alphas_ == lasso_lars_ic[-1].alpha_
)[0]
lasso_lars_ic.set_params(lassolarsic__criterion="bic").fit(X, y)

bic_criterion = zou_et_al_criterion_rescaling(
    lasso_lars_ic[-1].criterion_,
    n_samples,
    lasso_lars_ic[-1].noise_variance_,
)

index_alpha_path_bic = np.flatnonzero(
    lasso_lars_ic[-1].alphas_ == lasso_lars_ic[-1].alpha_
)[0]

الآن بعد أن جمعنا AIC و BIC، يمكننا أيضًا التحقق من أن الحد الأدنى لكل من المعايير يحدث عند نفس alpha. بعد ذلك، يمكننا تبسيط الرسم البياني التالي.

index_alpha_path_aic == index_alpha_path_bic
np.True_

أخيرًا، يمكننا رسم معيار AIC و BIC والمعلمة المنتظمة اللاحقة.

import matplotlib.pyplot as plt

plt.plot(aic_criterion, color="tab:blue", marker="o", label="AIC criterion")
plt.plot(bic_criterion, color="tab:orange", marker="o", label="BIC criterion")
plt.vlines(
    index_alpha_path_bic,
    aic_criterion.min(),
    aic_criterion.max(),
    color="black",
    linestyle="--",
    label="Selected alpha",
)
plt.legend()
plt.ylabel("Information criterion")
plt.xlabel("Lasso model sequence")
_ = plt.title("Lasso model selection via AIC and BIC")
Lasso model selection via AIC and BIC

Total running time of the script: (0 minutes 0.337 seconds)

Related examples

نموذج لاصو: اختيار النموذج باستخدام معايير AIC-BIC والتحقق المتقاطع

نموذج لاصو: اختيار النموذج باستخدام معايير AIC-BIC والتحقق المتقاطع

اختيار نموذج المزيج الغاوسي

اختيار نموذج المزيج الغاوسي

إيقاف مبكر لنزول التدرج العشوائي

إيقاف مبكر لنزول التدرج العشوائي

نماذج L1 للاشارات المتناثرة

نماذج L1 للاشارات المتناثرة

Gallery generated by Sphinx-Gallery