اذهب إلى المحتوى
  • 0

تطبيع البيانات باستخدام الصف Normalizer في Sklearn

Meezo ML

السؤال

كيف نقوم بتطبيع البيانات باستخدام الصف Normalizer في Sklearn؟  وما هو مبدأ عمله وما الفرق بينه وبين البقية في Sklearn؟

تم التعديل في بواسطة Meezo ML
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يقوم بجعل قيم البيانات تنتمي إلى المجال من 0 إلى 1، ومبدأ عمله مختلف عن باقي طرق التطبيع "أو التقييس Scaling" في Sklearn حيث يقوم بتناول كل صف على حدى في المصفوفات ثنائية الأبعاد وينفذ عليها عملية التطبيع. ويكون التقييس بإحدى الطرق التالية:
إما باستخدام l1 حيث يجمع مجموع القيم في الصف i وليكن sum ثم يقسم كل قيمة من هذا الصف على sum أي على المجموع. أو l2 بنفس المبدأ لكن هنا يكون جذر مجموع مربعات كل صف هو القيمة العظمى. أو max وهنا القيمة العظمى في كل صف هي القيمة العظمى. ويتم استخدامه في بايثون من مكتبة Sklearn كالتالي:

from sklearn.preprocessing import Normalizer
inpt_data = [[1,2,3],
            [4,5,6],
            [7,8,9]]
transformer =Normalizer(norm='l1')
#transformer =Normalizer(inpt_data,norm='l2')
#transformer =Normalizer(inpt_data,norm='max')
#fit إجراء العمليات اللازمة للتحويل باستخدام التابع
transformer.fit(inpt_data)
# إجراء التحويل
transformer.transform(inpt_data)
# الخرج
"""
array([[0.16666667, 0.33333333, 0.5       ],
       [0.26666667, 0.33333333, 0.4       ],
       [0.29166667, 0.33333333, 0.375     ]])
"""

وفي Sklearn له الشكل التالي:

sklearn.preprocessing.normalize(X, norm='l2', axis=1, copy=True)
# Copy: لتحديد فيما إذا كنت تريد أن يتم تطبيق التغييرات على المصفوفة الأصلية أي إنشاء نسخة أم لا
# axis: إذا كان 1 سوف يتم تطبيقه على كل صف أي كل عينة أما 0 فسيتم تطبيقه على كل عمود أي على كل فيتشرز

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

نقوم بمعالجة البيانات قبل تمريرها للنموذج بعدة طرق منها التطبيع normalizing والتي تقوم بتطبيع القيم لوحدة محددة بإستخدام بيانات الصف (هنالك أيضاً StandardScaler والذي يتعامل مع البيانات بصورة عمودية). يتم تطبيق التطبيع في sklearn إما بإستخدام Normalizer أو preprocessing.normalize اللذان يعطيان نفس الناتج في حال تمرير نفس القيم لكليهما. والناتج يختلف حسب نوع التطبيع المطبق على البيانات و قد ينتج قيم أقل من صفر إذا كانت البيانات الممررة تحتوي على قيم سالبة، لاحظ المثال التالي:

from sklearn.preprocessing import Normalizer

X = [[4, 1, 2, 2],
     [-1, -3, -10, -3],
     [5, 7, 5, 1]]

Normalizer(norm='l1').fit_transform(X)

والذي ينتج:

array([[ 0.44444444,  0.11111111,  0.22222222,  0.22222222],
       [-0.05882353, -0.17647059, -0.58823529, -0.17647059],
       [ 0.27777778,  0.38888889,  0.27777778,  0.05555556]])

وهي ايضاً نفس القيم الناتجة في حال إستخدام preprocessing.normalize:

import sklearn
sklearn.preprocessing.normalize(X, norm='l1')

لابد أن  تتذكر بالقيام بعمليات معالجة القيم المفقودة قبل مناداة الدالة لانها تنتج خطأ، راجع المثال التالي:

from sklearn.preprocessing import Normalizer
import numpy as np

X = [[4, 1, 2, 2],
     [1, 3, np.nan, 3],
     [5, 7, 5, 1]]

Normalizer().fit_transform(X)

والذي يتنج عنه:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...