невозможно пройти check_estimator () - PullRequest
0 голосов
/ 06 мая 2020

Я пытался написать AdaBoostClassifier сам и хочу сделать его совместимым с scikit-learn. Однако моя оценка не может пройти check_estimator(). Я проверил свой код, и классификатор очень хорошо работает с моими наборами данных. ps Я не изучаю информатику, поэтому в основном использую простой код.

import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.utils.estimator_checks import check_estimator
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import confusion_matrix,classification_report
from sklearn.utils.validation import check_X_y, check_array, check_is_fitted
from sklearn.base import BaseEstimator, ClassifierMixin
from sklearn.utils.multiclass import check_classification_targets
class AdaboostClassifier(BaseEstimator, ClassifierMixin):


И когда я запускаю check_estimator(AdaboostClassifier, generate_only = False), возникает ошибка, как показано ниже.

ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-13-67c9b1a2bb34> in <module>
----> 1 check_estimator(AdaboostClassifier)

~\Anaconda3\lib\site-packages\sklearn\utils\estimator_checks.py in check_estimator(Estimator, generate_only)
    425     for estimator, check in checks_generator:
    426         try:
--> 427             check(estimator)
    428         except SkipTest as exception:
    429             # the only SkipTest thrown currently results from not

~\Anaconda3\lib\site-packages\sklearn\utils\_testing.py in wrapper(*args, **kwargs)
    325             with warnings.catch_warnings():
    326                 warnings.simplefilter("ignore", self.category)
--> 327                 return fn(*args, **kwargs)
    328 
    329         return wrapper

~\Anaconda3\lib\site-packages\sklearn\utils\estimator_checks.py in check_estimators_empty_data_messages(name, estimator_orig)
   1355                        "to train. Perhaps use "
   1356                        "check_array in train.".format(name)):
-> 1357         e.fit(X_zero_samples, [])
   1358 
   1359     X_zero_features = np.empty(0).reshape(3, 0)

<ipython-input-12-eb321088a172> in fit(***failed resolving arguments***)
     26         self.mis_rate = []
     27         self.index_tree = []
---> 28         data_weights = [1/len(x)]*len(x)
     29 
     30         x, y = check_X_y(x, y)

ZeroDivisionError: division by zero

x должно быть введено, поэтому, конечно, его длина в настоящее время равна нулю. Не знаю, работает check_estimator(). Кто-нибудь может мне сказать?

Оцените это.

1 Ответ

0 голосов
/ 06 мая 2020

Это просто предложение, пожалуйста, проверьте, не нарушит ли это ваш алгоритм:

lenX = len(x)
if lenX == 0:
  lenX = 1
data_weights = [1/lenX]*len(x)

если len (x) == 0, вы установите 0 в data_weights, потому что вычисление будет быть (1/1) * 0

...