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

تقسيم البيانات باستخدام LeaveOneOut في مكتبة Sklearn

Meezo ML

السؤال

Recommended Posts

  • 1

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

import numpy as np
from sklearn.model_selection import LeaveOneOut
X = np.array([[1,4],[2,1],[3,4],[7,8]])
y = np.array([2,1,3,9])
loo = LeaveOneOut()
# لمعرفة عدد التقسيمات الممكنة
print(loo.get_n_splits(X))
# تقسيم البيانات
for train_index, test_index in loo.split(X):
    # للتقسيمة index  عرض ال 
    print("TRAIN:"+str(train_index)+'\n'+"TEST:"+str(test_index),end='\n\n')
    # تقسيم البيانات
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    # عرض البيانات المقسمة
    print('X_train:\n '+str(X_train),end='\n\n')
    print('X_test:\n '+str(X_test),end='\n\n')
    print('y_train:\n '+str(y_train),end='\n\n')
    print('y_test:\n' +str(y_test),end='\n\n')
#--------------------------------------------------------------------------------------------------#
4
TRAIN:[1 2 3]
TEST:[0]

X_train:
 [[2 1]
 [3 4]
 [7 8]]

X_test:
 [[1 4]]

y_train:
 [1 3 9]

y_test:
[2]

TRAIN:[0 2 3]
TEST:[1]

X_train:
 [[1 4]
 [3 4]
 [7 8]]

X_test:
 [[2 1]]

y_train:
 [2 3 9]

y_test:
[1]

TRAIN:[0 1 3]
TEST:[2]

X_train:
 [[1 4]
 [2 1]
 [7 8]]

X_test:
 [[3 4]]

y_train:
 [2 1 9]

y_test:
[3]

TRAIN:[0 1 2]
TEST:[3]

X_train:
 [[1 4]
 [2 1]
 [3 4]]

X_test:
 [[7 8]]

y_train:
 [2 1 3]

y_test:
[9]

لاحظ كيف أنه في كل تكرار يتم أخذ عينة واحدة للاختبار وباقي العينات للتدريب.
في المثال التالي سوف أستخدم هذا النهج في تدريب نموذج واختباره:

from sklearn.model_selection import LeaveOneOut
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import make_blobs
# إنشاء داتاسيت مزيفة ب10 عينات و3 فئات
X, y = make_blobs(n_samples=10, random_state=2021) # y=array([1, 1, 2, 0, 1, 2, 0, 2, 0, 0])
# LeaveOneOut إنشاء كائن من الكلاس
cv = LeaveOneOut()
# لتخزين النتائج من كل تقسيمة 
y_true, y_pred = list(), list()
# عملية التقسيم
for train_ix, test_ix in cv.split(X):
    print("TRAIN:"+str(train_ix)+'\n'+"TEST:"+str(test_ix),end='\n\n')
    # تقسيم البيانات
    X_train, X_test = X[train_ix, :], X[test_ix, :]
    y_train, y_test = y[train_ix], y[test_ix]
    # تدريب النموذج
    model = RandomForestClassifier(random_state=44)
    model.fit(X_train, y_train)
    # تقييم النموذج
    yhat = model.predict(X_test)
    # تخزين النتيجة
    y_true.append(y_test[0])
    y_pred.append(yhat[0])
# حساب الدقة
acc = accuracy_score(y_true, y_pred)
print('Accuracy: %.3f' % acc)

لاحظ كيف أنه في كل مرة أقوم بأخذ عينة واحدة للاختبار والباقي للتدريب ثم أدرب النموذج عليها وأقوم بحساب القيمة المتوقعة على عينة الاختبار وأضعها في  y_pred  وأضع القيمة الحقيقية في y_true, وهكذا بالنسبة لبقية التقسيمات حتى ننتهي وبعدها أقوم بحساب دقة النموذج.

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...