Сбой ввода данных skLearn fitting, даже если форма данных numpy правильная

#python-3.x #numpy #scikit-learn

#python-3.x #numpy #scikit-learn

Вопрос:

Я пытаюсь вставить некоторые (numpy) данные в модули python skLearn, но продолжаю получать сообщения об ошибках.

Когда я использую пример набора данных из iris, куда я загружаю его, как показано ниже

 from sklearn import datasets
iris = datasets.load_diabetes() # load pseudo test data

print(np.shape(iris.data))
print(np.shape(iris.target))

(442, 10)
(442,)
  

Это работает нормально. Но когда я использую свой собственный набор данных, который я преобразую в массив numpy, происходит сбой. Я не могу понять, почему, поскольку я явно преобразовал его в тот же тип формы, что и iris

 fileLoc = 'C:\Users\2018_signal.csv'
    data = pd.read_csv(fileLoc)
    fl_data = data[['signal', 'sig_dig', 'std_prx']].values
    fl_target = data[['actual']].actual.values
    ml_data = fl_data[0:int(fraction * len(fl_data))]
    ml_target = fl_target[0:int(fraction * len(fl_target))]

print(np.shape(ml_data))
print(np.shape(ml_target))

(6663, 3)
(6663,)
  

Код skLearn, приведенный ниже

 start_time = time.time()
SKknn_pred = KNeighborsClassifier(n_neighbors=1, algorithm='ball_tree', metric = 'euclidean').fit(ml_data, ml_target).predict(ml_data)
print("knn --- %s seconds ---" % (time.time() - start_time))
print("Number of mislabeled points out of a total %d points : %d" % (fl_data.shape[0],(fl_target != SKknn_pred).sum()))
l_time.append(['knn', 1000 * (time.time() - start_time)])
  

Я получаю сообщение об ошибке ниже… Помогите!!!!!

 ValueError                                Traceback (most recent call last)
    <ipython-input-96-91e2b93e2580> in <module>()
         57 
         58 start_time = time.time()
    ---> 59 SKgnb_pred = GaussianNB().fit(ml_data, ml_target).predict(fl_data)
         60 print("gnb --- %s seconds ---" % (time.time() - start_time))
         61 print("Number of mislabeled points out of a total %d points : %d" % (fl_data.shape[0],(fl_target != SKgnb_pred).sum()))

    C:ProgramDataAnaconda3libsite-packagessklearnnaive_bayes.py in fit(self, X, y, sample_weight)
        183         X, y = check_X_y(X, y)
        184         return self._partial_fit(X, y, np.unique(y), _refit=True,
    --> 185                                  sample_weight=sample_weight)
        186 
        187     @staticmethod

    C:ProgramDataAnaconda3libsite-packagessklearnnaive_bayes.py in _partial_fit(self, X, y, classes, _refit, sample_weight)
        348             self.classes_ = None
        349 
    --> 350         if _check_partial_fit_first_call(self, classes):
        351             # This is the first call to partial_fit:
        352             # initialize various cumulative counters

    C:ProgramDataAnaconda3libsite-packagessklearnutilsmulticlass.py in _check_partial_fit_first_call(clf, classes)
        319         else:
        320             # This is the first call to partial_fit
    --> 321             clf.classes_ = unique_labels(classes)
        322             return True
        323 

    C:ProgramDataAnaconda3libsite-packagessklearnutilsmulticlass.py in unique_labels(*ys)
         95     _unique_labels = _FN_UNIQUE_LABELS.get(label_type, None)
         96     if not _unique_labels:
    ---> 97         raise ValueError("Unknown label type: %s" % repr(ys))
         98 
         99     ys_labels = set(chain.from_iterable(_unique_labels(y) for y in ys))

    ValueError: Unknown label type: (array([-78.375, -67.625, -66.75 , ...,  71.375,  76.75 ,  78.1  ]),)
  

Ответ №1:

Способ использовать python для исправления вашей собственной ошибки.

 from sklearn import preprocessing
from sklearn import utils

ml_target = lab_enc.fit_transform(ml_target)

print(utils.multiclass.type_of_target(ml_target))
print(utils.multiclass.type_of_target(ml_target.astype('float')))
print(utils.multiclass.type_of_target(ml_target))
  

Модуль skLearn подгоняет данные после приведенного выше преобразования