الشروع في العمل مع Scikit-Learn للتصنيف في التعلم الآلي

الشروع في العمل مع Scikit-Learn للتصنيف في التعلم الآلي

عقدة المصدر: 1780638
الشروع في العمل مع Scikit-Learn للتصنيف في التعلم الآلي
الصورة بواسطة المحرر
 

تعد Scikit-Learn واحدة من أكثر مكتبات التعلم الآلي شيوعًا المستخدمة في لغة python. يمكن أن تُعزى شعبيتها إلى هيكل الكود السهل والمتسق الذي يعد مناسبًا للمطورين المبتدئين. أيضًا ، هناك مستوى عالٍ من الدعم متاح جنبًا إلى جنب مع المرونة لدمج وظائف الطرف الثالث مما يجعل المكتبة قوية ومناسبة للإنتاج. تحتوي المكتبة على العديد من نماذج التعلم الآلي للتصنيف والانحدار والتكتل. في هذا البرنامج التعليمي ، سوف نستكشف مشكلة التصنيف متعدد الطبقات من خلال خوارزميات مختلفة. دعنا نتعمق فيه ونبني نماذج scikit-Learn الخاصة بنا.

pip install scikit-learn

سنستخدم مجموعة بيانات "Wine" المتوفرة في وحدة مجموعات البيانات في scikit-Learn. تتكون مجموعة البيانات هذه من 178 عينة و 3 فئات إجمالاً. تمت بالفعل معالجة مجموعة البيانات مسبقًا وتحويلها إلى متجهات ميزات ، ومن ثم يمكننا استخدامها مباشرة لتدريب نماذجنا.

from sklearn.datasets import load_wine X, y = load_wine(return_X_y=True)

سنحتفظ بـ 67٪ من البيانات للتدريب والباقي 33٪ للاختبار.

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42
)

 

الآن ، سنقوم بتجربة 5 نماذج مختلفة من التعقيدات المختلفة وتقييم نتائجها في مجموعة البيانات الخاصة بنا.

model_lr = LogisticRegression()
model_lr.fit(X_train, y_train)
y_pred_lr = model_lr.predict(X_test) print("Accuracy Score: ", accuracy_score(y_pred_lr, y_test))
print(classification_report(y_pred_lr, y_test))

 

الناتج

Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59
model_knn = KNeighborsClassifier(n_neighbors=1)
model_knn.fit(X_train, y_train)
y_pred_knn = model_knn.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_knn, y_test))
print(classification_report(y_pred_knn, y_test))

 

الناتج 

Accuracy Score: 0.7796610169491526 precision recall f1-score support 0 0.90 0.78 0.84 23 1 0.75 0.82 0.78 22 2 0.67 0.71 0.69 14 accuracy 0.78 59 macro avg 0.77 0.77 0.77 59
weighted avg 0.79 0.78 0.78 59

 

عند تغيير المعلمة 'n_neighbours = 2' نلاحظ انخفاضًا في قيمة الدقة. ومن ثم ، فإنه يوضح أن البيانات بسيطة بدرجة كافية وتحقق تعلمًا أفضل مع جار واحد يجب مراعاته. 

الناتج 

Accuracy Score: 0.6949152542372882 precision recall f1-score support 0 0.90 0.72 0.80 25 1 0.75 0.69 0.72 26 2 0.33 0.62 0.43 8 accuracy 0.69 59 macro avg 0.66 0.68 0.65 59
weighted avg 0.76 0.69 0.72 59
from sklearn.naive_bayes import GaussianNB model_nb = GaussianNB()
model_nb.fit(X_train, y_train)
y_pred_nb = model_nb.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_nb, y_test))
print(classification_report(y_pred_nb, y_test))

 

الناتج

Accuracy Score: 1.0 precision recall f1-score support 0 1.00 1.00 1.00 20 1 1.00 1.00 1.00 24 2 1.00 1.00 1.00 15 accuracy 1.00 59 macro avg 1.00 1.00 1.00 59
weighted avg 1.00 1.00 1.00 59
from sklearn.tree import DecisionTreeClassifier model_dtclassifier = DecisionTreeClassifier()
model_dtclassifier.fit(X_train, y_train)
y_pred_dtclassifier = model_dtclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_dtclassifier, y_test))
print(classification_report(y_pred_dtclassifier, y_test))

 

الناتج

Accuracy Score: 0.9661016949152542 precision recall f1-score support 0 0.95 0.95 0.95 20 1 1.00 0.96 0.98 25 2 0.93 1.00 0.97 14 accuracy 0.97 59 macro avg 0.96 0.97 0.97 59
weighted avg 0.97 0.97 0.97 59
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV def get_best_parameters(): params = { "n_estimators": [10, 50, 100], "max_features": ["auto", "sqrt", "log2"], "max_depth": [5, 10, 20, 50], "min_samples_split": [2, 4, 6], "min_samples_leaf": [2, 4, 6], "bootstrap": [True, False], } model_rfclassifier = RandomForestClassifier(random_state=42) rf_randomsearch = RandomizedSearchCV( estimator=model_rfclassifier, param_distributions=params, n_iter=5, cv=3, verbose=2, random_state=42, ) rf_randomsearch.fit(X_train, y_train) best_parameters = rf_randomsearch.best_params_ print("Best Parameters:", best_parameters) return best_parameters parameters_rfclassifier = get_best_parameters() model_rfclassifier = RandomForestClassifier( **parameters_rfclassifier, random_state=42
) model_rfclassifier.fit(X_train, y_train) y_pred_rfclassifier = model_rfclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_rfclassifier, y_test))
print(classification_report(y_pred_rfclassifier, y_test))

 

الناتج


Best Parameters: {'n_estimators': 100, 'min_samples_split': 6, 'min_samples_leaf': 4, 'max_features': 'log2', 'max_depth': 5, 'bootstrap': True}
Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59

 

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

الموديلات دقة الملاحظات
الانحدار اللوجستي 98.30% يحقق دقة كبيرة. النموذج قادر على التعميم بشكل جيد على مجموعة بيانات الاختبار.
K- أقرب الجيران 77.96% الخوارزمية غير قادرة على تعلم تمثيل البيانات بشكل جيد.
ساذجة بايز 100% النموذج أقل تعقيدًا ومن ثم فهو يلائم البيانات للحصول على الدقة المطلقة.
مصنف شجرة القرار 96.61% يحقق دقة لائقة.
مصنف الغابة العشوائي 98.30% كونه نهجًا يعتمد على المجموعة ، فإنه يؤدي بشكل أفضل من شجرة القرار. يؤدي إجراء ضبط للمعلمة الفائقة إلى تحقيق دقة مماثلة للانحدار اللوجستي.

في هذا البرنامج التعليمي، تعلمنا كيفية البدء في بناء نماذج التعلم الآلي وتدريبها في scikit-learn. قمنا بتنفيذ وتقييم بعض الخوارزميات للحصول على فكرة أساسية عن أدائها. يمكن للمرء دائمًا اعتماد استراتيجيات متقدمة لهندسة الميزات أو ضبط المعلمات الفائقة أو التدريب لتحسين الأداء. لقراءة المزيد حول الوظائف التي تقدمها scikit-learn، انتقل إلى الوثائق الرسمية - مقدمة في التعلم الآلي باستخدام scikit-Learn, تعلم الآلة في بايثون مع scikit-Learn.

 
 
يشع شاستري مطور وكاتب عاطفي للذكاء الاصطناعي يسعى للحصول على درجة الماجستير في التعلم الآلي من جامعة مونتريال. Yesha مهتمة باستكشاف تقنيات الذكاء الاصطناعي المسؤولة لحل التحديات التي تفيد المجتمع ومشاركة ما تعلمته مع المجتمع.
 

الطابع الزمني:

اكثر من KD nuggets