اذهب إلى المحتوى
  • 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

Recommended Posts

  • 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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...