6.9. تحويل هدف التنبؤ (y)#

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

6.9.1. تثنية التصنيف#

6.9.1.1. LabelBinarizer#

LabelBinarizer هي فئة مساعدة للمساعدة في إنشاء مصفوفة مؤشر التصنيف من قائمة التصنيفات متعددة الفئات:

>>> from sklearn import preprocessing
>>> lb = preprocessing.LabelBinarizer()
>>> lb.fit([1, 2, 6, 4, 2])
LabelBinarizer()
>>> lb.classes_
array([1, 2, 4, 6])
>>> lb.transform([1, 6])
array([[1, 0, 0, 0],
       [0, 0, 0, 1]])

يسمح استخدام هذا التنسيق بالتصنيف متعدد الفئات في المقدرات التي تدعم تنسيق مصفوفة مؤشر التصنيف.

تحذير

لا يلزم استخدام LabelBinarizer إذا كنت تستخدم مقدرًا يدعم بالفعل بيانات متعددة الفئات.

لمزيد من المعلومات حول التصنيف متعدد الفئات، راجع متعدد الفئات.

6.9.1.2. MultiLabelBinarizer#

في التعلم متعدد التصنيفات، يتم التعبير عن مجموعة مهام التصنيف الثنائية المشتركة بمؤشر مصفوفة ثنائية التصنيف: كل عينة هي صف واحد من مصفوفة ثنائية الأبعاد ذات الشكل (n_samples، n_classes) بقيم ثنائية حيث الواحد، أي العناصر غير الصفرية، يقابل مجموعة التصنيفات لهذه العينة. مصفوفة مثل np.array([[1, 0, 0], [0, 1, 1], [0, 0, 0]]) تمثل التصنيف 0 في العينة الأولى، والتصنيفات 1 و 2 في العينة الثانية، ولا تصنيفات في العينة الثالثة.

قد يكون إنتاج بيانات متعددة التصنيفات على شكل قائمة من مجموعات التصنيفات أكثر بديهية. يمكن استخدام المحول MultiLabelBinarizer لتحويل بين مجموعة من مجموعات التصنيفات وتنسيق المؤشر:

>>> from sklearn.preprocessing import MultiLabelBinarizer
>>> y = [[2, 3, 4], [2], [0, 1, 3], [0, 1, 2, 3, 4], [0, 1, 2]]
>>> MultiLabelBinarizer().fit_transform(y)
array([[0, 0, 1, 1, 1],
       [0, 0, 1, 0, 0],
       [1, 1, 0, 1, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 0, 0]])

لمزيد من المعلومات حول التصنيف متعدد التصنيفات، راجع متعدد الفئات.

6.9.2. الترميز التصنيفي#

LabelEncoder هي فئة مساعدة للمساعدة في تطبيع التصنيفات بحيث تحتوي فقط على قيم بين 0 و n_classes-1. هذا مفيد أحيانًا لكتابة روتينات Cython الفعالة. يمكن استخدام LabelEncoder على النحو التالي:

>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit([1, 2, 2, 6])
LabelEncoder()
>>> le.classes_
array([1, 2, 6])
>>> le.transform([1, 1, 2, 6])
array([0, 0, 1, 2])
>>> le.inverse_transform([0, 0, 1, 2])
array([1, 1, 2, 6])

يمكن استخدامه أيضًا لتحويل التصنيفات غير الرقمية (طالما أنها قابلة للتجزئة والقابلة للمقارنة) إلى تصنيفات رقمية:

>>> le = preprocessing.LabelEncoder()
>>> le.fit(["paris", "paris", "tokyo", "amsterdam"])
LabelEncoder()
>>> list(le.classes_)
['amsterdam', 'paris', 'tokyo']
>>> le.transform(["tokyo", "tokyo", "paris"])
array([2, 2, 1])
>>> list(le.inverse_transform([2, 2, 1]))
['tokyo', 'tokyo', 'paris']