أبرز ميزات الإصدار 1.3 من scikit-learn#

يسعدنا الإعلان عن إصدار scikit-learn 1.3! تم إصلاح العديد من الأخطاء وإجراء تحسينات، بالإضافة إلى بعض الميزات الرئيسية الجديدة. نستعرض أدناه بعض الميزات الرئيسية لهذا الإصدار. للاطلاع على قائمة شاملة بجميع التغييرات، يرجى الرجوع إلى ملاحظات الإصدار.

لتثبيت أحدث إصدار (باستخدام pip):

pip install --upgrade scikit-learn

أو باستخدام conda:

conda install -c conda-forge scikit-learn

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

نحن بصدد تقديم طريقة جديدة لتوجيه البيانات الوصفية مثل sample_weight في جميع أنحاء قاعدة الكود، والتي ستؤثر على كيفية توجيه البيانات الوصفية في المُقدرات الفوقية مثل pipeline.Pipeline و model_selection.GridSearchCV. على الرغم من أن البنية التحتية لهذه الميزة موجودة بالفعل في هذا الإصدار، إلا أن العمل لا يزال جارياً ولا تدعم جميع المُقدرات الفوقية هذه الميزة الجديدة. يمكنك قراءة المزيد عن هذه الميزة في دليل المستخدم لتوجيه البيانات الوصفية. يرجى ملاحظة أن هذه الميزة لا تزال قيد التطوير ولم يتم تنفيذها لمعظم المُقدرات الفوقية.

يمكن لمطوري الجهات الخارجية البدء بالفعل في دمج هذه الميزة في المُقدرات الفوقية الخاصة بهم. لمزيد من التفاصيل، راجع دليل المطور لتوجيه البيانات الوصفية.

HDBSCAN: التجميع القائم على الكثافة الهرمية#

تم استضافة cluster.HDBSCAN في مستودع scikit-learn-contrib في الأصل، وتم اعتماده الآن في scikit-learn. يفتقد بعض الميزات من التنفيذ الأصلي والتي سيتم إضافتها في الإصدارات المستقبلية. من خلال تنفيذ نسخة معدلة من cluster.DBSCAN على عدة قيم epsilon في نفس الوقت، يقوم cluster.HDBSCAN باكتشاف مجموعات ذات كثافات متنوعة، مما يجعله أكثر مرونة في اختيار المعلمات مقارنة بـ cluster.DBSCAN. لمزيد من التفاصيل، راجع دليل المستخدم.

import numpy as np
from sklearn.cluster import HDBSCAN
from sklearn.datasets import load_digits
from sklearn.metrics import v_measure_score

X, true_labels = load_digits(return_X_y=True)
print(f"عدد الأرقام: {len(np.unique(true_labels))}")

hdbscan = HDBSCAN(min_cluster_size=15).fit(X)
non_noisy_labels = hdbscan.labels_[hdbscan.labels_ != -1]
print(f"عدد المجموعات المكتشفة: {len(np.unique(non_noisy_labels))}")

print(v_measure_score(true_labels[hdbscan.labels_ != -1], non_noisy_labels))
عدد الأرقام: 10
عدد المجموعات المكتشفة: 11
0.969526722382904

TargetEncoder: استراتيجية ترميز فئات جديدة#

مناسب للفئات ذات الكاردينالية العالية، preprocessing.TargetEncoder يقوم بترميز الفئات بناءً على تقدير منكمش للقيم المتوسطة للهدف للملاحظات التي تنتمي إلى تلك الفئة. لمزيد من التفاصيل، راجع دليل المستخدم.

import numpy as np
from sklearn.preprocessing import TargetEncoder

X = np.array([["cat"] * 30 + ["dog"] * 20 + ["snake"] * 38], dtype=object).T
y = [90.3] * 30 + [20.4] * 20 + [21.2] * 38

enc = TargetEncoder(random_state=0)
X_trans = enc.fit_transform(X, y)

enc.encodings_
[array([90.3, 20.4, 21.2])]

دعم القيم المفقودة في أشجار القرار#

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

import numpy as np
from sklearn.tree import DecisionTreeClassifier

X = np.array([0, 1, 6, np.nan]).reshape(-1, 1)
y = [0, 0, 1, 1]

tree = DecisionTreeClassifier(random_state=0).fit(X, y)
tree.predict(X)
array([0, 0, 1, 1])

عرض جديد ValidationCurveDisplay#

model_selection.ValidationCurveDisplay متاح الآن لرسم النتائج من model_selection.validation_curve.

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import ValidationCurveDisplay

X, y = make_classification(1000, 10, random_state=0)

_ = ValidationCurveDisplay.from_estimator(
    LogisticRegression(),
    X,
    y,
    param_name="C",
    param_range=np.geomspace(1e-5, 1e3, num=9),
    score_type="both",
    score_name="Accuracy",
)
plot release highlights 1 3 0

خسارة Gamma للتعزيز التدريجي#

تدعم الفئة ensemble.HistGradientBoostingRegressor دالة خسارة الانحراف Gamma عبر loss="gamma". هذه دالة خسارة مفيدة لنمذجة الأهداف الإيجابية الصارمة مع توزيع منحرف إلى اليمين.

import numpy as np
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_low_rank_matrix
from sklearn.ensemble import HistGradientBoostingRegressor

n_samples, n_features = 500, 10
rng = np.random.RandomState(0)
X = make_low_rank_matrix(n_samples, n_features, random_state=rng)
coef = rng.uniform(low=-10, high=20, size=n_features)
y = rng.gamma(shape=2, scale=np.exp(X @ coef) / 2)
gbdt = HistGradientBoostingRegressor(loss="gamma")
cross_val_score(gbdt, X, y).mean()
np.float64(0.46858513287221665)

تجميع الفئات غير المتكررة في OrdinalEncoder#

على غرار preprocessing.OneHotEncoder، تدعم الفئة preprocessing.OrdinalEncoder الآن تجميع الفئات غير المتكررة في ناتج واحد لكل ميزة. المعاملات لتمكين تجميع الفئات غير المتكررة هي min_frequency و max_categories. راجع دليل المستخدم لمزيد من التفاصيل.

from sklearn.preprocessing import OrdinalEncoder
import numpy as np

X = np.array(
    [["dog"] * 5 + ["cat"] * 20 + ["rabbit"] * 10 + ["snake"] * 3], dtype=object
).T
enc = OrdinalEncoder(min_frequency=6).fit(X)
enc.infrequent_categories_
[array(['dog', 'snake'], dtype=object)]

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

Related examples

أبرز ميزات الإصدار 0.22 من scikit-learn

أبرز ميزات الإصدار 0.22 من scikit-learn

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

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

عرض توضيحي لخوارزمية التجميع HDBSCAN

عرض توضيحي لخوارزمية التجميع HDBSCAN

أبرز ميزات الإصدار 1.4 من scikit-learn

أبرز ميزات الإصدار 1.4 من scikit-learn

Gallery generated by Sphinx-Gallery