0

我有 2 个数据集训练和测试:

print(f"""{type(X_train)} {X_train.shape}""")
print(f"""{type(Y_train)} {Y_train.shape}""")
print(f"""{type(Y_train.iloc[:,0])} {Y_train.iloc[:,0].shape}""")
<class 'pandas.core.frame.DataFrame'> (531456, 6)
<class 'pandas.core.frame.DataFrame'> (531456, 1)
<class 'pandas.core.series.Series'> (531456,)

我得到 ValueError: Supported target types are: ('binary', 'multiclass')。取而代之的是“未知”。当我从 sklearn.model_selection 调用 cross_val_score 函数时。

看起来参数类型不好。我有一个: <class 'pandas.core.frame.DataFrame'> (531456, 6) for X_train <class 'pandas.core.frame.DataFrame'> (531456, 1) for _train 我转换为 <class' pandas.core.series.Series'> (531456,) 用于 cross_valscore。

cross_val_score(SVC(random_state=random_state), X_train, y=Y_train.iloc[:,0], scoring='accuracy', cv=kfold, n_jobs=4)

我不知道会发生什么。如果你能帮助我,请。非常感谢。泰奥

完整日志:

Empty                                     Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in dispatch_one_batch(self, iterator)
    807             try:
--> 808                 tasks = self._ready_batches.get(block=False)
    809             except queue.Empty:

C:\ProgramData\Anaconda3\lib\queue.py in get(self, block, timeout)
    166                 if not self._qsize():
--> 167                     raise Empty
    168             elif timeout is None:

Empty: 
During handling of the above exception, another exception occurred:
ValueError                                Traceback (most recent call last)
<ipython-input-180-8f14ca49d3fa> in <module>
----> 1 cross_val_score(SVC(random_state=random_state), X_train, y=Y_train.iloc[:,0], scoring='accuracy', cv=kfold, n_jobs=4)

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs)
     71                           FutureWarning)
     72         kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})
---> 73         return f(**kwargs)
     74     return inner_f
     75 

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py in cross_val_score(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, error_score)
    399     scorer = check_scoring(estimator, scoring=scoring)
    400 
--> 401     cv_results = cross_validate(estimator=estimator, X=X, y=y, groups=groups,
    402                                 scoring={'score': scorer}, cv=cv,
    403                                 n_jobs=n_jobs, verbose=verbose,

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs)
     71                           FutureWarning)
     72         kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})
---> 73         return f(**kwargs)
     74     return inner_f
     75 

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py in cross_validate(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, return_train_score, return_estimator, error_score)
    240     parallel = Parallel(n_jobs=n_jobs, verbose=verbose,
    241                         pre_dispatch=pre_dispatch)
--> 242     scores = parallel(
    243         delayed(_fit_and_score)(
    244             clone(estimator), X, y, scorers, train, test, verbose, None,

C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in __call__(self, iterable)
   1027             # remaining jobs.
   1028             self._iterating = False
-> 1029             if self.dispatch_one_batch(iterator):
   1030                 self._iterating = self._original_iterator is not None
   1031 

C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in dispatch_one_batch(self, iterator)
    817                 big_batch_size = batch_size * n_jobs
    818 
--> 819                 islice = list(itertools.islice(iterator, big_batch_size))
    820                 if len(islice) == 0:
    821                     return False

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py in <genexpr>(.0)
    240     parallel = Parallel(n_jobs=n_jobs, verbose=verbose,
    241                         pre_dispatch=pre_dispatch)
--> 242     scores = parallel(
    243         delayed(_fit_and_score)(
    244             clone(estimator), X, y, scorers, train, test, verbose, None,

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py in split(self, X, y, groups)
    334                 .format(self.n_splits, n_samples))
    335 
--> 336         for train, test in super().split(X, y, groups):
    337             yield train, test
    338 

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py in split(self, X, y, groups)
     78         X, y, groups = indexable(X, y, groups)
     79         indices = np.arange(_num_samples(X))
---> 80         for test_index in self._iter_test_masks(X, y, groups):
     81             train_index = indices[np.logical_not(test_index)]
     82             test_index = indices[test_index]

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py in _iter_test_masks(self, X, y, groups)
    695 
    696     def _iter_test_masks(self, X, y=None, groups=None):
--> 697         test_folds = self._make_test_folds(X, y)
    698         for i in range(self.n_splits):
    699             yield test_folds == i

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py in _make_test_folds(self, X, y)
    647         allowed_target_types = ('binary', 'multiclass')
    648         if type_of_target_y not in allowed_target_types:
--> 649             raise ValueError(
    650                 'Supported target types are: {}. Got {!r} instead.'.format(
    651                     allowed_target_types, type_of_target_y))

ValueError: Supported target types are: ('binary', 'multiclass'). Got 'unknown' instead.
4

1 回答 1

0

我找到了解决方案:具有浮点值的 X_train 列的类型是对象,而不是 float64 类型。

X_train.dtypes 
AccX    object
AccY    object
AccZ    object
GyrX    object
GyrY    object
GyrZ    object
dtype: object

因此,在将这些 columns 的类型转换为 float64 之后,它现在可以正常工作了。

X_train = X_train.apply(lambda col:pd.to_numeric(col, errors='coerce'))
AccX    float64
AccY    float64
AccZ    float64
GyrX    float64
GyrY    float64
GyrZ    float64

Y_train 目标列(二进制值)上的相同操作将 columns 的类型转换为 int 类型。

于 2021-02-01T19:04:02.890 回答