scikit-изучите массив RFECV с 0 образцами

Я пытался следовать учебнику, как указано здесь, для использования рекурсивного исключения функций с перекрестной проверкой (RFECV) функциональности scikit-learn, используя мои собственные данные, и продолжать получать озадачивающую ошибку:

ValueError: найденный массив с 0 образцами (образцами) (shape=(0, 9)) при минимальном значении 1.

Я использую следующий код:

import pandas as pd
import numpy as np

from sklearn import svm
from sklearn.cross_validation import StratifiedKFold
from sklearn.feature_selection import RFECV

data = pd.read_csv('data.csv', index_col = 0)

training = data.iloc[:50]
# training on the first 50 rows
training_y = np.asarray(training.C1, dtype="|S6")
training_x = training.drop('C1', axis=1)

print training_y.shape
print training_x.shape


# Create the RFE object and compute a cross-validated score.
svc = svm.SVC(kernel="linear")
# The "accuracy" scoring is proportional to the number of correct
# classifications
rfecv = RFECV(estimator = svc, step = 1, cv = StratifiedKFold(training_y, 3),
              scoring = 'accuracy')

rfecv.fit(training_x, training_y)

Просто для справки, выходные данные для двух инструкций печати:

(50,)

(50, 9)

Спасибо!

1 ответ

  1. Я создал фиктивные данные, и это сработало для меня:

    import pandas as pd
    import numpy as np
    
    from sklearn import svm
    from sklearn.cross_validation import StratifiedKFold
    from sklearn.feature_selection import RFECV
    
    data = np.random.randn(50,9)
    
    # training on the first 50 rows
    training_y = np.random.random(50).round()
    training_x = data
    
    print(training_y.shape)
    print(training_x.shape)
    
    
    # Create the RFE object and compute a cross-validated score.
    svc = svm.SVC(kernel="linear")
    # The "accuracy" scoring is proportional to the number of correct
    # classifications
    rfecv = RFECV(estimator = svc, step = 1, cv = StratifiedKFold(training_y, 3),
                  scoring = 'accuracy')
    
    rfecv.fit(training_x, training_y)
    

    Выход:

    RFECV(cv=sklearn.cross_validation.StratifiedKFold(labels=[ 1.  1.  1.  0.  1.  1.  1.  1.  0.  1.  1.  1.  1.  1.  0.  1.  0.  1.
      1.  0.  1.  0.  1.  1.  1.  0.  0.  0.  0.  1.  0.  1.  1.  0.  1.  0.
      1.  1.  0.  1.  1.  0.  0.  0.  1.  0.  0.  0.  1.  0.], n_folds=3, shuffle=False, random_state=None),
       estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
      decision_function_shape=None, degree=3, gamma='auto', kernel='linear',
      max_iter=-1, probability=False, random_state=None, shrinking=True,
      tol=0.001, verbose=False),
       estimator_params=None, scoring='accuracy', step=1, verbose=0)
    

    Было бы хорошо, если вы можете предоставить нам свои данные.