• 0

ظهور الخطأ التالي IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices  أثناء بناء نموذج BaggingClassifier 

قمت ببناء نموذج  BaggingClassifier  لكن يظهر لي الخطأ التالي:

from sklearn.ensemble import BaggingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.datasets import load_breast_cancer
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.svm import SVR
Data = load_breast_cancer()
X = Data.data
y = Data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=44, shuffle =True)
clf = BaggingClassifier(base_estimator=SVR(),n_estimators=150, random_state=444)
clf.fit(X_train, y_train)
print('BaggingClassifier Train Score is : ' , clf.score(X_train, y_train)) 
print('BaggingClassifier Test Score is : ' , clf.score(X_test, y_test)) 
c = confusion_matrix(y_test, clf.predict(X_test))
print('Confusion Matrix is : \n', c)
sns.heatmap(c, center = True)
plt.show()
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-45-1d3261b5c2fc> in <module>
     12 clf = BaggingClassifier(base_estimator=SVR(),n_estimators=150, random_state=444)
     13 clf.fit(X_train, y_train)
---> 14 print('BaggingClassifier Train Score is : ' , clf.score(X_train, y_train))
     15 print('BaggingClassifier Test Score is : ' , clf.score(X_test, y_test))
     16 c = confusion_matrix(y_test, clf.predict(X_test))

~\anaconda3\lib\site-packages\sklearn\base.py in score(self, X, y, sample_weight)
    367         """
    368         from .metrics import accuracy_score
--> 369         return accuracy_score(y, self.predict(X), sample_weight=sample_weight)
    370 
    371 

~\anaconda3\lib\site-packages\sklearn\ensemble\_bagging.py in predict(self, X)
    668             The predicted classes.
    669         """
--> 670         predicted_probabilitiy = self.predict_proba(X)
    671         return self.classes_.take((np.argmax(predicted_probabilitiy, axis=1)),
    672                                   axis=0)

~\anaconda3\lib\site-packages\sklearn\ensemble\_bagging.py in predict_proba(self, X)
    718                 X,
    719                 self.n_classes_)
--> 720             for i in range(n_jobs))
    721 
    722         # Reduce

~\anaconda3\lib\site-packages\joblib\parallel.py in __call__(self, iterable)
   1002             # remaining jobs.
   1003             self._iterating = False
-> 1004             if self.dispatch_one_batch(iterator):
   1005                 self._iterating = self._original_iterator is not None
   1006 

~\anaconda3\lib\site-packages\joblib\parallel.py in dispatch_one_batch(self, iterator)
    833                 return False
    834             else:
--> 835                 self._dispatch(tasks)
    836                 return True
    837 

~\anaconda3\lib\site-packages\joblib\parallel.py in _dispatch(self, batch)
    752         with self._lock:
    753             job_idx = len(self._jobs)
--> 754             job = self._backend.apply_async(batch, callback=cb)
    755             # A job can complete so quickly than its callback is
    756             # called before we get here, causing self._jobs to

~\anaconda3\lib\site-packages\joblib\_parallel_backends.py in apply_async(self, func, callback)
    207     def apply_async(self, func, callback=None):
    208         """Schedule a func to be run"""
--> 209         result = ImmediateResult(func)
    210         if callback:
    211             callback(result)

~\anaconda3\lib\site-packages\joblib\_parallel_backends.py in __init__(self, batch)
    588         # Don't delay the application, to avoid keeping the input
    589         # arguments in memory
--> 590         self.results = batch()
    591 
    592     def get(self):

~\anaconda3\lib\site-packages\joblib\parallel.py in __call__(self)
    254         with parallel_backend(self._backend, n_jobs=self._n_jobs):
    255             return [func(*args, **kwargs)
--> 256                     for func, args, kwargs in self.items]
    257 
    258     def __len__(self):

~\anaconda3\lib\site-packages\joblib\parallel.py in <listcomp>(.0)
    254         with parallel_backend(self._backend, n_jobs=self._n_jobs):
    255             return [func(*args, **kwargs)
--> 256                     for func, args, kwargs in self.items]
    257 
    258     def __len__(self):

~\anaconda3\lib\site-packages\sklearn\ensemble\_bagging.py in _parallel_predict_proba(estimators, estimators_features, X, n_classes)
    140 
    141             for i in range(n_samples):
--> 142                 proba[i, predictions[i]] += 1
    143 
    144     return proba

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

بماذا أخطأت؟

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


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

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

1 شخص أعجب بهذا

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


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

حسناً لا أعلم تماماً ما هي فكرتك في حل هذه المشكلة لكن لدي إفتراضين على حسب الخطأ الناتج من البرنامج:

اولاً أنك تريد إستخدام نموذج تصنيفي كما إقترح @Ali Haidar Ahmad في الإجابة السابقة، فبالتالي لحل المشكلة يمكننا إستخدام SVC التصنيفي بدلاً من نموذج SVR الذي ينتج قيم رقمية، بذلك يكون التعديل فقط في المصنف الممرر لدالة ال baggingclassifier و يصبح كالتالي:

from sklearn.ensemble import BaggingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.datasets import load_breast_cancer
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.svm import SVC
Data = load_breast_cancer()
X = Data.data
y = Data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=44, shuffle =True)
clf = BaggingClassifier(base_estimator=SVC(),n_estimators=150, random_state=444)
clf.fit(X_train, y_train)
print('BaggingClassifier Train Score is : ' , clf.score(X_train, y_train)) 
print('BaggingClassifier Test Score is : ' , clf.score(X_test, y_test)) 
c = confusion_matrix(y_test, clf.predict(X_test))
print('Confusion Matrix is : \n', c)
sns.heatmap(c, center = True)
plt.show()

أو أنك فقط تحاول التجريب و قمت بتعريف أي نموذج للتدريب و الحصول على النتائج لتعرف أيها أكثر دقة، فبالتالي، النموذج الأتوماتيكي في هذه الحالة هو DecisionTreeClassifier، يمكن أن نمسح base_estimator من النموذج BaggingClassifier أو أن نسند له القيمة None:

from sklearn.ensemble import BaggingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.datasets import load_breast_cancer
import seaborn as sns
import matplotlib.pyplot as plt
Data = load_breast_cancer()
X = Data.data
y = Data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=44, shuffle =True)
clf = BaggingClassifier(base_estimator=None,n_estimators=150, random_state=444)
clf.fit(X_train, y_train)
print('BaggingClassifier Train Score is : ' , clf.score(X_train, y_train)) 
print('BaggingClassifier Test Score is : ' , clf.score(X_test, y_test)) 
c = confusion_matrix(y_test, clf.predict(X_test))
print('Confusion Matrix is : \n', c)
sns.heatmap(c, center = True)
plt.show()

 

يمكنك أيضاً زيارة صفحة sklearn لتتعرف على المعلومات الممررة لنموذج BaggingClassifier من هنا.

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


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

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

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

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


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

تسجيل الدخول

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


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