Meezo ML نشر 19 يونيو 2021 أرسل تقرير نشر 19 يونيو 2021 ظهور الخطأ التالي ValueError: bad input shape عند محاولة تدريب نموذج باستخدام خوارزمية MultinomialNB. الكود مع الخطأ: import numpy as np from sklearn.naive_bayes import MultinomialNB from tensorflow.keras.utils import to_categorical from tensorflow.keras.datasets import mnist from sklearn.metrics import accuracy_score (X, Y),(Xtest, Ytest) = mnist.load_data() Y = to_categorical(Y) Ytest = to_categorical(Ytest) X = np.reshape(X, [-1, X.shape[1]*X.shape[1]]) Xtest = np.reshape(Xtest, [-1, input_size]) M =MultinomialNB() M.fit(X, Y) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-19-161d6ac448e8> in <module> 10 Xtest = np.reshape(Xtest, [-1, input_size]) 11 t =MultinomialNB() ---> 12 t.fit(X, Y) 13 accuracy_score(Ytest,t.predict(Xtest)) # 0.8357 ~\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) 758 dtype=None) 759 else: --> 760 y = column_or_1d(y, warn=True) 761 _assert_all_finite(y) 762 if y_numeric and y.dtype.kind == 'O': ~\anaconda3\lib\site-packages\sklearn\utils\validation.py in column_or_1d(y, warn) 795 return np.ravel(y) 796 --> 797 raise ValueError("bad input shape {0}".format(shape)) 798 799 ValueError: bad input shape (60000, 10) اقتباس
1 Ali Haidar Ahmad نشر 19 يونيو 2021 أرسل تقرير نشر 19 يونيو 2021 هذا الخطأ قد يظهر لك في أي خوارزمية أخرى قد تستخدمها. المشكلة في أنك تقوم بترميز قيم ال labels باستخدام ال One-Hot Encoding (التابع to_categorical) فتحدث المشكلة في التابع fit أي عندما يبدأ التدريب. صحيح أننا نستخدم عادةً التابع to_categorical لترميز ال labels في مسائل التصنيف المتعدد لكن في الخوارزميات المعرفة في مكتبة Sklearn لانستخدمه لأن الخوارزميات فيها لاتتعامل مع هذا الشكل من البيانات. إن شكل التابع fit في مكتبة Sklearn كالتالي: fit(X, Y) بحيث أن y هي مصفوفة من الشكل (,n_sampels) أي مصفوفة أحادية الأبعاد (1D-array). وعند استخدامك لترميز to_categorical سوف يتحول شكل البيانات إلى (n_sampels,voc) بحيث voc هي عدد ال labels الموجودة. وهذا الشكل لايتطابق مع شكل البيانات الذي تتعامل معه fit. لذا يجب أن لانقوم باستخدام هذا الترميز وأن نجعل ال labels ضمن مصفوفة 1D: حل المشكلة: import numpy as np from sklearn.naive_bayes import MultinomialNB from tensorflow.keras.utils import to_categorical from tensorflow.keras.datasets import mnist from sklearn.metrics import accuracy_score (X, Y),(Xtest, Ytest) = mnist.load_data() Y=Y.reshape(-1,) Ytest=Ytest.reshape(-1,) X = np.reshape(X, [-1, X.shape[1]*X.shape[1]]) Xtest = np.reshape(Xtest, [-1, input_size]) M =MultinomialNB() M.fit(X, Y) accuracy_score(Ytest,M.predict(Xtest)) # 0.83 1 اقتباس
1 ريم المهدي نشر 19 يونيو 2021 أرسل تقرير نشر 19 يونيو 2021 حسب تعريف موقع sklearn للخوارزمية، عدد الصور samples يجب أن تساوى في كل من قيم y الممرة للنموذج و المدخل الأول ل X: اقتباس Parameters X{array-like, sparse matrix} of shape (n_samples, n_features) Training vectors, where n_samples is the number of samples and n_features is the number of features. yarray-like of shape (n_samples,) Target values. sample_weightarray-like of shape (n_samples,), default=None Weights applied to individual samples (1. for unweighted). بالتالي الخطأ هو عملية تحويل مصفوفات Y و Ytest إلى مصفوفات ذات بعدين بإستخدام to_categorical والتي تنتج (6000,10) و (1000,10) على التوالي و الصحيح تمريرها بنفس الشكل 6000,100. import numpy as np from sklearn.naive_bayes import MultinomialNB from tensorflow.keras.utils import to_categorical from tensorflow.keras.datasets import mnist from sklearn.metrics import accuracy_score (X, Y),(Xtest, Ytest) = mnist.load_data() # Y = to_categorical(Y) # Ytest = to_categorical(Ytest) X = np.reshape(X, [-1, X.shape[1]*X.shape[1]]) Xtest = np.reshape(Xtest, [-1, Xtest.shape[1]*Xtest.shape[1]]) M =MultinomialNB() M.fit(X, Y) لاحظ للبرنامج أعلاه، لقد قمت بإخفاء الدالة to_categorical لكل من Y و Ytest و لا تنسى إستبدال المتغير input_size في السطر رقم 10 إلى Xtest.shape[1]*Xtest.shape[1] للحصول على مصفوفة ذات بعدين بدلاً من ثلاثة أبعاد. اقتباس
السؤال
Meezo ML
ظهور الخطأ التالي ValueError: bad input shape عند محاولة تدريب نموذج باستخدام خوارزمية MultinomialNB.
الكود مع الخطأ:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.