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

السؤال

نشر

قمت ببناء نموذج  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

بماذا أخطأت؟

Recommended Posts

  • 1
نشر

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

  • 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 من هنا.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...