تناسب شبكة مرنة مع مصفوفة جرام مسبقة الحساب وعينات مرجحة#

يوضح المثال التالي كيفية حساب مصفوفة جرام مسبقًا مع استخدام عينات مرجحة مع ElasticNet.

إذا تم استخدام عينات مرجحة، يجب أن يتم ترتيب مصفوفة التصميم ثم إعادة قياسها بواسطة الجذر التربيعي لمتجه الأوزان قبل حساب مصفوفة جرام.

ملاحظة

يتم إعادة قياس متجه sample_weight أيضًا ليجمع إلى n_samples، راجع التوثيق لمتغير sample_weight في fit.

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

دعنا نبدأ بتحميل مجموعة البيانات وإنشاء بعض أوزان العينات.

import numpy as np

from sklearn.datasets import make_regression

rng = np.random.RandomState(0)

n_samples = int(1e5)
X, y = make_regression(n_samples=n_samples, noise=0.5, random_state=rng)

sample_weight = rng.lognormal(size=n_samples)
# قم بتطبيع أوزان العينات
normalized_weights = sample_weight * (n_samples / (sample_weight.sum()))

لتناسب الشبكة المرنة باستخدام خيار precompute مع أوزان العينات، يجب علينا أولاً ترتيب مصفوفة التصميم، وإعادة قياسها بواسطة الأوزان الموحدة قبل حساب مصفوفة جرام.

X_offset = np.average(X, axis=0, weights=normalized_weights)
X_centered = X - np.average(X, axis=0, weights=normalized_weights)
X_scaled = X_centered * np.sqrt(normalized_weights)[:, np.newaxis]
gram = np.dot(X_scaled.T, X_scaled)

يمكننا الآن المتابعة بالتناسب. يجب أن نمرر مصفوفة التصميم المركزية إلى fit وإلا سيقوم مقدر الشبكة المرنة بالكشف عن أنها غير مركزة وسيقوم بتجاهل مصفوفة جرام التي قمنا بتمريرها. ومع ذلك، إذا قمنا بتمرير مصفوفة التصميم المقياس، فإن كود المعالجة المسبقة سيقوم بإعادة قياسها بشكل خاطئ للمرة الثانية.

from sklearn.linear_model import ElasticNet

lm = ElasticNet(alpha=0.01, precompute=gram)
lm.fit(X_centered, y, sample_weight=normalized_weights)
ElasticNet(alpha=0.01,
           precompute=array([[ 9.98809919e+04, -4.48938813e+02, -1.03237920e+03, ...,
        -2.25349312e+02, -3.53959628e+02, -1.67451144e+02],
       [-4.48938813e+02,  1.00768662e+05,  1.19112072e+02, ...,
        -1.07963978e+03,  7.47987268e+01, -5.76195467e+02],
       [-1.03237920e+03,  1.19112072e+02,  1.00393284e+05, ...,
        -3.07582983e+02,  6.66670169e+02,  2.65799352e+02],
       ...,
       [-2.25349312e+02, -1.07963978e+03, -3.07582983e+02, ...,
         9.99891212e+04, -4.58195950e+02, -1.58667835e+02],
       [-3.53959628e+02,  7.47987268e+01,  6.66670169e+02, ...,
        -4.58195950e+02,  9.98350372e+04,  5.60836363e+02],
       [-1.67451144e+02, -5.76195467e+02,  2.65799352e+02, ...,
        -1.58667835e+02,  5.60836363e+02,  1.00911944e+05]]))
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.


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

Related examples

SVM: العينات ذات الأوزان

SVM: العينات ذات الأوزان

توجيه البيانات الوصفية

توجيه البيانات الوصفية

SGD: العينات المرجحة

SGD: العينات المرجحة

أبرز الميزات الجديدة في إصدار scikit-learn 0.23

أبرز الميزات الجديدة في إصدار scikit-learn 0.23

Gallery generated by Sphinx-Gallery