• 0

ظهور الخطأ التالي ValueError: Found array with dim 3. Estimator expected <= 2 عند محاولة تدريب نموذج

ظهور الخطأ التالي ValueError: Found array with dim 3. Estimator expected <= 2 عند محاولة تدريب نموذج باستخدام خوارزمية  MultinomialNB؟

import numpy as np
from tensorflow.keras.datasets import mnist
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from tensorflow.keras.utils import to_categorical
from sklearn.metrics import f1_score,precision_score,recall_score,accuracy_score,log_loss
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train.shape
t = Pipeline([('clf',MultinomialNB())])
t = text_clf.fit(x_train, y_train)
accuracy_score(y_test,t.predict(x_test))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-25-434bf8f46433> in <module>
     10 # تعريف pipline
     11 t = Pipeline([('clf',MultinomialNB())])
---> 12 t = text_clf.fit(x_train, y_train)
     13 accuracy_score(y_test,t.predict(x_test))

~\anaconda3\lib\site-packages\sklearn\pipeline.py in fit(self, X, y, **fit_params)
    352                                  self._log_message(len(self.steps) - 1)):
    353             if self._final_estimator != 'passthrough':
--> 354                 self._final_estimator.fit(Xt, y, **fit_params)
    355         return self
    356 

~\anaconda3\lib\site-packages\sklearn\naive_bayes.py in fit(self, X, y, sample_weight)
    607         self : object
    608         """
--> 609         X, y = self._check_X_y(X, y)
    610         _, n_features = X.shape
    611         self.n_features_ = n_features

~\anaconda3\lib\site-packages\sklearn\naive_bayes.py in _check_X_y(self, X, y)
    473 
    474     def _check_X_y(self, X, y):
--> 475         return check_X_y(X, y, accept_sparse='csr')
    476 
    477     def _update_class_log_prior(self, class_prior=None):

~\anaconda3\lib\site-packages\sklearn\utils\validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
    753                     ensure_min_features=ensure_min_features,
    754                     warn_on_dtype=warn_on_dtype,
--> 755                     estimator=estimator)
    756     if multi_output:
    757         y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False,

~\anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    572         if not allow_nd and array.ndim >= 3:
    573             raise ValueError("Found array with dim %d. %s expected <= 2."
--> 574                              % (array.ndim, estimator_name))
    575 
    576         if force_all_finite:

ValueError: Found array with dim 3. Estimator expected <= 2.

 

تمّ تعديل بواسطة Meezo ML

انشر على الشّبكات الاجتماعية


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

هذا الخطأ قد يظهر لك في أي خوارزمية أخرى في مكتبة Sklearn  وليس فقط MultinomialNB، أي ممكن أن يظهر خلال استخدامك خوارزميات أخرى مثل LogisticRegression  أو RandomForest.
السبب هو أن التابع fit يقبل مصفوفة 2D وأنت تحاول تمرير مصفوفة 3D فيعطيك هذا الخطأ.
البيانات التي تتعامل معها هي MINST Dataset وهي بيانات تمثل صور وحجم هذه الداتا  28*28*60000 أي 60 ألف عينة وكل عينة هي صورة بأبعاد 28*28.
لذا لحل مشكلتك يجب أن تقوم بعمل reshape للداتاسيت حيث نقوم بجعلها 2D كما يلي:

import numpy as np
from tensorflow.keras.datasets import mnist
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from tensorflow.keras.utils import to_categorical
from sklearn.metrics import f1_score,precision_score,recall_score,accuracy_score,log_loss
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train.shape
image_size = x_train.shape[1]
input_size = image_size * image_size
input_size
# نقوم بعمل إعادة تعيين للأبعاد
x_train = np.reshape(x_train, [-1, input_size])
x_train = x_train.astype('float32') / 255
x_test = np.reshape(x_test, [-1, input_size])
x_test = x_test.astype('float32') / 255
# تعريف pipline
t = Pipeline([('clf',MultinomialNB())])
t = text_clf.fit(x_train, y_train)
accuracy_score(y_test,t.predict(x_test)) # 0.8357

ملاحظة: قمت بتقسيم كل قيمة من الداتا على 255 (أي على أكبر قيمة ممكنة للبكسل) وبالتالي تكون كل قيم البكسلات بين 0 و 1 (وهذا أمر ضروري ونسميه توحيد البيانات (Standardaization).

تمّ تعديل بواسطة Ali Haidar Ahmad
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن