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

السؤال

Recommended Posts

  • 1
نشر (معدل)

تفترض خوارزميات التعلم الآلي مثل Linear Regression و Gaussian Naive Bayes أن المتغيرات العددية لها توزيع احتمالي غاوسي.
قد لا تحتوي بياناتك على توزيع غاوسي وبدلاً من ذلك قد يكون لها توزيع يشبه Gaussian (على سبيل المثال تقريبًا Gaussian ولكن مع القيم المتطرفة أو الانحراف) أو توزيع مختلف تمامًا (على سبيل المثال الأسي).
وعلى هذا النحو  قد تكون قادراً على تحقيق أداء أفضل على نطاق واسع من خوارزميات التعلم الآلي عن طريق تحويل متغيرات الإدخال و/ أو الإخراج للحصول على توزيع غاوسي. توفر تحويلات Power transforms مثل تحويل Box-Cox وتحويل Yeo-Johnson طريقة تلقائية لإجراء هذه التحولات على بياناتك ويتم توفيرها في مكتبة التعلم الآلي لـ scikit-Learn Python.
لاستخدامه، يجب أن يتم استيراده عبر الموديول:

sklearn.preprocessing

الصيغة العامة:

sklearn.preprocessing.PowerTransformer(method='yeo-johnson', standardize=True, copy=True)

method: خوارزمية التحويل التي ذكرناها {‘yeo-johnson’, ‘box-cox’} وافتراضيا ’yeo-johnson’ مع الانتباه إلى أن ال box-cox تعمل فقط مع القيم الموجبة.
standardize:لتطبيق تطبيع متوسط التباين الصفري على الناتج المحول في حالة True.
copy: لإنشاء نسخة، أي لكي لايتم التعديل على البيانات الأصلية.
مثال:

# سنشكل بيانات تبع توزيعاً أسياً
from sklearn.preprocessing import PowerTransformer
from numpy import exp
from numpy.random import randn
from matplotlib import pyplot
# تشكيل بيانات غاوصية
data = randn(2000)
# تحويلها لبيانات أسية
data = exp(data)
# رسم الهستوغرام للبيانات الأسية
pyplot.hist(data, bins=50)
pyplot.show()
#على البيانات PowerTransformer الآن سنجري تحويل 
data = data.reshape((len(data),1))
power = PowerTransformer(method='yeo-johnson', standardize=True)
data_trans = power.fit_transform(data)
# عرض الهستوغرام للبيانات بعد القيام بالتحويل
pyplot.hist(data_trans, bins=25)
pyplot.show()

 

powertrans.png

تم التعديل في بواسطة Ali Haidar Ahmad
  • 0
نشر

هي دالة تستخدم لتحويل البيانات من توزيعها الحالي إلى التوزيع الطبيعي او الغاوسي (Gaussian)، يمكن تطبيق الدالة بطريقتين، إما بإستخدام PowerTransformer أو power_transform، لاحظ المثالين التاليين:

import numpy as np
from sklearn.preprocessing import PowerTransformer
pt = PowerTransformer()
data = [[1, 2], [3, 2], [4, 5]]
print(pt.fit(data))
print(pt.transform(data))

لاحظ قيم البيانات الناتجة بعد عملية التحويل، والان لنرى طريقة تحويل البيانات بالصورة الثانية:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import power_transform

data = [[1, 2], [3, 2], [4, 5]]
plt.hist(data)
plt.show()

في هذه الحالة قمنا بتمثيل القيم في شكل رسم بياني والذي ينتج:

1data.png.b423d8acfa36d4eccc2487c9c5a4a1cb.png

الان لاحظ للشكل الناتج بعد تطبيق الدالة:

transformed = power_transform(data, method='box-cox')
print(transformed)
plt.hist(transformed)
plt.show()

2data.png.3888d039a69d48c98129130208c478dd.png

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...