ValueError Минимальное количество групп для любого класса не может быть меньше 2 - PullRequest
0 голосов
/ 02 апреля 2019
ValueError: The least populated class in y has only 1 member, which is too few. The minimum number of groups for any class cannot be less than 2.

это ошибка, которую я получил из следующего кода

# List of machine learning algorithms that will be used for predictions
estimator = [('Logistic Regression', LogisticRegression), ('Ridge Classifier', RidgeClassifier), 
             ('SGD Classifier', SGDClassifier), ('Passive Aggressive Classifier', PassiveAggressiveClassifier), 
             ('SVC', SVC), ('Linear SVC', LinearSVC), ('Nu SVC', NuSVC), 
             ('K-Neighbors Classifier', KNeighborsClassifier),
             ('Gaussian Naive Bayes', GaussianNB), ('Multinomial Naive Bayes', MultinomialNB), 
             ('Bernoulli Naive Bayes', BernoulliNB), ('Complement Naive Bayes', ComplementNB), 
             ('Decision Tree Classifier', DecisionTreeClassifier), 
             ('Random Forest Classifier', RandomForestClassifier), ('AdaBoost Classifier', AdaBoostClassifier), 
             ('Gradient Boosting Classifier', GradientBoostingClassifier), ('Bagging Classifier', BaggingClassifier), 
             ('Extra Trees Classifier', ExtraTreesClassifier), ('XGBoost', XGBClassifier)]

# Separating independent features and dependent feature from the dataset
#X_train = titanic.drop(columns='Survived')
#y_train = titanic['Survived']

# Creating a dataframe to compare the performance of the machine learning models
comparison_cols = ['Algorithm', 'Training Time (Avg)', 'Accuracy (Avg)', 'Accuracy (3xSTD)']
comparison_df = pd.DataFrame(columns=comparison_cols)

# Generating training/validation dataset splits for cross validation
cv_split = StratifiedShuffleSplit(n_splits=10, test_size=0.3, random_state=0)

# Performing cross-validation to estimate the performance of the models
for idx, est in enumerate(estimator):

    cv_results = cross_validate(est[1](), X, y, cv=cv_split)

    comparison_df.loc[idx, 'Algorithm'] = est[0]
    comparison_df.loc[idx, 'Training Time (Avg)'] = cv_results['fit_time'].mean()
    comparison_df.loc[idx, 'Accuracy (Avg)'] = cv_results['test_score'].mean()
    comparison_df.loc[idx, 'Accuracy (3xSTD)'] = cv_results['test_score'].std() * 3

comparison_df.set_index(keys='Algorithm', inplace=True)
comparison_df.sort_values(by='Accuracy (Avg)', ascending=False, inplace=True)

Я думаю, что часть cv_split дает мне проблемуЯ нашел решение использовать train_test_split, но это не возвращает его, как cv_split

но странно то, что я использовал этот код нормально с другой проблемой kaggleпоэтому я пытаюсь сравнить форму данных кадра для обоих kaggle

без проблемпечать (X.shape)печать (y.shape)(891, 9)(891,)массив ([0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1 .....])

============================================================

бормотание с проблемой (ошибка)печать (X.shape)печать (y.shape)(15035, 24)(15035,)массив ([221900., 180000., 510000., ..., 360000., 400000., 325000.])

форма обоих ядер для меня выглядит одинаковоЯ понятия не имею, в чем разница между этими двумя ядрами X, y.

У кого-нибудь есть идея, почему возникает следующая ошибка?

1 Ответ

0 голосов
/ 02 апреля 2019

это ваш y, выбирающий значения индексов .. хотя не уверен .. вы можете попробовать StraifiedKFold вместо этого ... ниже работал для меня

kfold = StraifiedKFold (n_splits = 10, random_state = 7) результаты = cross_val_score (модель, X_train, y_train, cv = kfold)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...