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

خوارزمية LDA(Linear Discriminant Analysis) في مكتبة Sklearn

Meezo ML

السؤال

Recommended Posts

  • 1

LDA(Linear Discriminant Analysis)
هي طريقة تستخدم في تقليل الأبعاد وخاصة في مسائل التصنيف التابعة بالتعليم بإشراف فلو كان لدينا عملية تصنيف ما لأكثر من صنف وكان تمثيل الداتا بالمستوى ثنائي الابعاد فالخط المستقيم يمكن أن يكون غير كافي في عملية الفصل لذلك يتم استخدام LDA ليقوم بتحويل المستوي ثنائي الابعاد إلى أحادي الأبعاد.
ويمكن استخدامه كموديل للتنصيف.
يتم استخداه عبر الموديول:

 sklearn.discriminant_analysis

استدعاء المكتبات:

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

في البداية قمنا باستدعاء المكتبة التي يوجد فيها هذا الموديل.
# الصيغة المبسطة للموديل:

LDA=LinearDiscriminantAnalysis(solver='svd', shrinkage=None, 
                               priors=None, n_components=None,
                               tol=0.0001)

الوسيط الأول solver يمثل طريقة الحل ويأخذ ثلاث قيم  {‘svd’, ‘lsqr’, ‘eigen’}
الوسيط الثاني shrinkage معامل تنعيم يستخدم لتحسين تقدير المصفوفات في حال كان عدد عينات التدريب صغير وعدد الميزات كبير
الوسيط الثالث priors قيم الاحتمالات للصفوف أي تساوي عدد الصفوف يمكن تمريرها كمصفوفة تحوي الاحتمال لكل صف
الوسيط الرابع n_components هو عدد حقيقي أو صحيح يشير إلى عدد المكونات التي سيتم الإبقاء عليها المقصود بالمكونات أٌقل عدد أمثلة وعدد الفيتشرز وإذا أخذ None يتم الاحتفاظ بجميع المكونات
الوسيط الخامس tol مقدار التسامح في التقارب من القيم الدنيا
طبعا قمت بشرح الشكل العام للموديل ولكن عن طريقة استخدامه سهل جداً فقط بعد أن تقوم بتقسيم الداتا إلى X_train, y_train,X_test, y_test  تسطيع كتابة الأتي لعملية التدريب
# الشكل العام للموديل:

LDA=LinearDiscriminantAnalysis(solver='svd', shrinkage=None, 
                               priors=None, n_components=None,
                               tol=0.0001 )
LDA.fit(X_train, y_train)

حيث الدالة fit يوجد ضمنها جميع العمليات الداخلية لعملية التدريب.
يوجد دالة أخرى تستخدم لغرض التنبؤ كالاتي..
#حساب القيم المتوقعة:

y_pred =LDA.predict(X_test)

نستطيع حساب دقة الموديل أو كفاءته  على التدريب والاختبار عن طريق التابع score ويكون وفق الشكل:
حساب الكفاءة على الاختبار والتدريب:

print('LDA Train Score is : ' , LDA.score(X_train, y_train))
print('LDA Test Score is : ' , LDA.score(X_test, y_test))

لنأخذ مثال يوضح المصنف..
قمنا باستدعاء المكتبات وبناء عينة مزيفة وكان التصنيف ثنائي أما 1 أو 0.
ثم قمنا بتجريب الموديل على عينة معطاة.

استدعاء المكتبات
import numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
#تعين داتا دخل مزيفة
X = np.array([[1, 1], [3, 1], [-3, -2], [-1, -1], [-3, -1], [3, 2]])
y = np.array([0, 0, 1, 1, 0, 1])
#بناء الموديل
LDA = LinearDiscriminantAnalysis()
LDA.fit(X,y)
#طباعة تصنيف العينه
print(LDA.predict([[-1, -0.4]]))
#النتيجة
#[0]

 

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

  • 1

LDA هو أحد خوارزميات التصنيف الخطي، و التي تقوم بإنشاء نموذج إحتمالي لكل صنف بالإعتماد على توزيع البيانات، و بذلك العينات الجديدة تصنف بالرجوع للإحتمالية الشرطية لإنتمائها لأحد الأصناف و بالتالي إمكانية إختيار الصنف ذو الإحتمالية الأعلى. كل هذا يتم عن طريق إجراء بعض الحسابات الإحصائية مثل الوسط الحسابي mean و الإنحراف المعياري standard deviation.

خوارزمية LDA تفترض ان المدخلات عبارة عن قيم رقمية numeric values موزعة طبيعياً normally distributed ولديها نفس التباين variance، بالرغم من إعتماد LDA على هذه الفرضيات في توزيع العينة بالنسبة لمجموعة الأصناف إلا أنه من النماذج التي تعطي نتائج فعالة.

سأقوم هنا بعرض مثال للمصنف و الذي يقوم بتحديد أفضل solver حسب البيانات المدخلة، في هذا المثال تم توليد البيانات بإستخدام make_classification:

# إستدعاء الدوال من المكتبات
from sklearn.datasets import make_classification
from sklearn.model_selection import GridSearchCV
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# تعريف مجموعة البيانات و التي تحتوي على 1000 عينة كل منها له 10 خصائص
X, y = make_classification(n_samples=1000, n_features=10)
# solver تعريف النموذج بدون تحديد ل
model = LinearDiscriminantAnalysis()
# محفوظ كمفاتيح solver لحفظ مدخلات النموذج كإسم dictionary  تعريف
grid = dict()
grid['solver'] = ['svd', 'lsqr', 'eigen']
# تعريف دالة البحث عن الحلول بإستخدام نماذج تستخدم 
search = GridSearchCV(model, grid, scoring='accuracy', n_jobs=-1)
# تطبيق عملية البحث
results = search.fit(X, y)
# طباعة النتائج
print('Mean Accuracy: %.3f' % results.best_score_)
print('Config: %s' % results.best_params_)

في هذا البرنامج قمنا بإختبار ال solver  المناسب للبيانات التي تحتوى على 10 خصائص features، البحث عن النموذج الأفضل نٌفذ بإستخدام GridSearchCV (يمكنك مراجعة هذه الصفحة لمزيد من التفاصيل) والتي تستقبل كل من النموذج LDA و مدخلات النموذج أو parameters و دالة التقييم scoring والتي هي عبارة عن مقياس الدقة accuracy، و n_jobs هنا ترمز لعدد المعالجات التي إنجازها بالتوازي و العدد -1 تعني إستخدام كافة المعالجات. بعد ذلك تم البحث عن النموذج الأفضل بالتدريب بإستخدام الدالة fit لدالة البحث، أخيراً تم طباعة الsolver الأعلى دقة.

 

 

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...