أشجار القرار بلغة البايثون لحل مسائل التصنيف Classification

تعريف أشجار القرار

أشجار القرار (DTs) هي خوارزمية من خوارزميات التعليم الالي الخاضع للإشراف تستخدم لحل مسائل التصنيف والانحدار. الهدف هو إنشاء نموذج يتنبأ بقيمة المتغير المستهدف من خلال تعلم قواعد القرار البسيطة مستنتجة من ميزات البيانات.

على سبيل المثال ، في المثال أدناه ، تتعلم أشجار القرار من البيانات لتقريب المنحنى الجيبي مع مجموعة من قواعد القرار if-then-else decision . كلما كانت الشجرة أعمق ، كلما كانت قواعد القرار أكثر تعقيدًا وأصبح النموذج أكثر تناسبا.

../_images/sphx_glr_plot_tree_regression_0011.png

مزايا أشجار القرار :

  1. سهلة الفهم والتفسير. أي يمكن تصور الأشجار.
  2. يتطلب القليل من الجهد لإعداد البيانات. غالبًا ما تتطلب التقنيات الأخرى تسوية البيانات data standardization، ويجب إنشاء متغيرات وهمية وإزالة القيم الفارغة. ملاحظة هذا النموذج لا يدعم القيم المفقودة.
  3. تكلفة استخدام الشجرة (أي التنبؤ بالبيانات) هي لوغاريتمية في عدد نقاط البيانات المستخدمة لتدريب الشجرة.
  4. قادرة على التعامل مع كل من البيانات العددية والفئوية. عادة ما تكون التقنيات الأخرى متخصصة في تحليل مجموعات البيانات التي تحتوي على نوع واحد فقط من المتغيرات.
  5. قادرة على حل مسائل الإخراج المتعدد multi-output problems.
  6. من الممكن التحقق من صحة النموذج باستخدام الاختبارات الإحصائية. هذا يجعل من الممكن حساب مصداقية النموذج.
  7. يعمل بشكل جيد حتى لو تم كسر افتراضاته إلى حد ما بواسطة النموذج الحقيقي الذي تم إنشاء البيانات منه.

عيوب أشجار القرار:

  1. يمكن لمتعلمي شجرة القرار إنشاء أشجار معقدة للغاية لكن لا تعمل على تعميم البيانات بشكل جيد. وهذا ما يسمى بالافراط في التناسب overfitting. آليات مثل التقليم pruning، وتحديد الحد الأدنى لعدد العينات المطلوبة في عقدة الورقة أو تحديد أقصى عمق للشجرة ، ضروري لتجنب هذه المشكلة.
  2. يمكن أن تكون أشجار القرار غير مستقرة unstable لأن الاختلافات الصغيرة في البيانات قد تؤدي إلى إنشاء شجرة مختلفة تمامًا. يتم تخفيف هذه المشكلة باستخدام أشجار القرار داخل مجموعة.
  3.  تعتمد خوارزميات التعلم العملية لشجرة القرار على خوارزميات الكشف عن مجريات الأمور heuristic algorithms مثل الخوارزمية الجشعة greedy algorithm ( هي خوارزمية التي تستند على الحدس المهني الذي يتم عن طريقه اختيار الإمكانية الأفضل المرئية في المرحلة الحالية، من دون الأخذ بالحسبان تأثير هذه الخطوة على تكملة الحل. الخوارزميات الجشعة مشهورة في حل مشاكل الاستمثال، حيث يتم عن طريقها محاولة الوصول إلى الجواب الأفضل ) حيث يتم اتخاذ القرارات المثلى مكانيا locally في كل عقدة.
  4. هناك مفاهيم يصعب تعلمها لأن أشجار القرار لا تعبر عنها بسهولة ، مثل مشاكل XOR أو التماثل أو معدد الإرسال parity or multiplexer problems.
  5. إذا هيمنت بعض الفئات قد يتم إنشاء أشجار منحازة. لذا يوصى بموازنة مجموعة البيانات قبل ملاءمتها لشجرة القرار.

مثال على التصنيف Classification

DecisionTreeClassifier هو مصنف class قادر على إجراء تصنيف متعدد الفئات multi-class classification في مجموعة بيانات dataset.

كما هو الحال مع المصنفات الأخرى ، يأخذ DecisionTreeClassifier مصفوفين two arrays كمدخل input: مصفوف X ، متناثر أو كثيف ، بحجم [n_samples ، n_features] يحتوي على عينات التدريب ، ومصوف Y من القيم الصحيحة ، الحجم [n_samples] ، مع الاحتفاظ بتسميات الفئة class labels لـ عينات التدريب:

>>> from sklearn import tree
>>> X = [[0, 0], [1, 1]]
>>> Y = [0, 1]
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(X, Y)

بعد تطبيقه و تجهيزه، يمكن استخدام النموذج للتنبؤ بفئة العينات:

>>> clf.predict([[2., 2.]])
array([1])

بدلاً من ذلك ، يمكن التنبؤ باحتمال كل فئة ، وهو جزء من عينات التدريب من نفس الفئة في الورقة:

>>> clf.predict_proba([[2., 2.]])
array([[0., 1.]])

DecisionTreeClassifier قادر على حل مسائل التصنيف ثنائي الفئات (حيث تكون التسميات [-1 ، 1]) والتصنيف متعدد الفئات (حيث التسميات هي [0 ،… ، K-1]).

باستخدام مجموعة بيانات زهرة السوسن Iris ، يمكننا إنشاء شجرة قرار على النحو التالي:

>>> from sklearn.datasets import load_iris
>>> from sklearn import tree
>>> X, y = load_iris(return_X_y=True)
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(X, y)

بمجرد تدريب النموذج، يمكنك رسم الشجرة باستخدام الامر plot_tree:

>> tree.plot_tree(clf.fit(iris.data, iris.target))

../_images/sphx_glr_plot_iris_dtc_0021.png

يمكننا أيضًا تصدير الشجرة الموضحة أعلاه بتنسيق Graphviz باستخدام الامر export_graphviz. إذا كنت تستخدم  حزمة Conda ، ثنائيات Graphviz

ويمكن تثبيتها في حزمة بايثون باستخدام الكود

conda install python-graphviz

او يمكن تثبيتها عن طريق الكود

pip install graphviz

فيما يلي مثال على تصدير ملف Graphviz للشجرة أعلاه المدربة على مجموعة بيانات زهرة السوسن بأكملها ؛ يتم حفظ النتائج في ملف إخراج iris.pdf:

>>> import graphviz 
>>> dot_data = tree.export_graphviz(clf, out_file=None) 
>>> graph = graphviz.Source(dot_data) 
>>> graph.render("iris")

يدعم export_graphviz المصدِّر أيضًا مجموعة متنوعة من الخيارات الجمالية ، بما في ذلك عقد التلوين حسب فئتها (أو قيمة الانحدار) واستخدام أسماء متغيرات وفئات صريحة إذا رغبت في ذلك. كما تقدم Jupyter notebooks هذه الرسوم البيانية مضمنة تلقائيًا:

>> dot_data = tree.export_graphviz(clf, out_file=None, 
...                      feature_names=iris.feature_names,  
...                      class_names=iris.target_names,  
...                      filled=True, rounded=True,  
...                      special_characters=True)  
>>> graph = graphviz.Source(dot_data)  
>>> graph 

../_images/iris.png

وبالاضافة إلى ذلك ، يمكن أيضًا تصدير الشجرة بتنسيق نصي مع الكود export_text. لا تتطلب هذه الطريقة تثبيت مكتبات خارجية و تعتبر أكثر إحكاما:

>> from sklearn.datasets import load_iris
>>> from sklearn.tree import DecisionTreeClassifier
>>> from sklearn.tree.export import export_text
>>> iris = load_iris()
>>> decision_tree = DecisionTreeClassifier(random_state=0, max_depth=2)
>>> decision_tree = decision_tree.fit(iris.data, iris.target)
>>> r = export_text(decision_tree, feature_names=iris['feature_names'])
>>> print(r)
|--- petal width (cm) <= 0.80
|   |--- class: 0
|--- petal width (cm) >  0.80
|   |--- petal width (cm) <= 1.75
|   |   |--- class: 1
|   |--- petal width (cm) >  1.75
|   |   |--- class: 2
<BLANKLINE>

المراجع

  • https://scikit-learn.org/stable/modules/tree.html
Share on facebook
فيسبوك
Share on twitter
تويتر
Share on linkedin
لينكدإن
Share on whatsapp
واتساب

اترك تعليقاً

المشاركات الاخيرة

أحدث التعليقات

أفحص بحثك بالمجان

رفع الملف