Получение 100% точности обучения, но 60% точности тестирования - PullRequest
0 голосов
/ 28 апреля 2018

Я пробую разные классификаторы с разными параметрами и материалом в наборе данных, предоставленном нам в рамках проекта курса. Мы должны постараться добиться максимальной производительности набора данных. Набор данных на самом деле является сокращенной версией популярности онлайн-новостей

Я попробовал SVM, Random Forest, SVM с перекрестной проверкой с k = 5, и все они, кажется, дают приблизительно 100% точность обучения, в то время как точность тестирования находится между 60-70. Я думаю, что точность тестирования хорошая, но точность обучения беспокоит меня. Я бы сказал, что, возможно, это был случай переобучения данных, но ни один из моих одноклассников, похоже, не получил схожих результатов, поэтому, возможно, проблема в моем коде.

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

def crossValidation(X_train, X_test, y_train, y_test, numSplits):
    skf = StratifiedKFold(n_splits=5, shuffle=True)
    Cs = np.logspace(-3, 3, 10)
    gammas = np.logspace(-3, 3, 10)

    ACC = np.zeros((10, 10))
    DEV = np.zeros((10, 10))

    for i, gamma in enumerate(gammas):
        for j, C in enumerate(Cs):
            acc = []
            for train_index, dev_index in skf.split(X_train, y_train):
                X_cv_train, X_cv_dev = X_train[train_index], X_train[dev_index]
                y_cv_train, y_cv_dev = y_train[train_index], y_train[dev_index]
                clf = SVC(C=C, kernel='rbf', gamma=gamma, )
                clf.fit(X_cv_train, y_cv_train)
                acc.append(accuracy_score(y_cv_dev, clf.predict(X_cv_dev)))

            ACC[i, j] = np.mean(acc)
            DEV[i, j] = np.std(acc)

    i, j = np.argwhere(ACC == np.max(ACC))[0]
    clf1 = SVC(C=Cs[j], kernel='rbf', gamma=gammas[i], decision_function_shape='ovr')
    clf1.fit(X_train, y_train)
    y_predict_train = clf1.predict(X_train)
    y_pred_test = clf1.predict(X_test)
    print("Train Accuracy :: ", accuracy_score(y_train, y_predict_train))
    print("Test Accuracy  :: ", accuracy_score(y_test, y_pred_test))


def randomForestClassifier(X_train, X_test, y_train, y_test):
    """

    clf = RandomForestClassifier()
    clf.fit(X_train, y_train)
    y_predict_train = clf.predict(X_train)
    y_pred_test = clf.predict(X_test)
    print("Train Accuracy :: ", accuracy_score(y_train, y_predict_train))
    print("Test Accuracy  :: ", accuracy_score(y_test, y_pred_test))

1 Ответ

0 голосов
/ 28 апреля 2018

Существует две проблемы, связанные с проблемой: точность обучения и точность тестирования существенно различаются.

  1. Различное распределение обучающих данных и данных тестирования. (Из-за выбора части набора данных)
  2. Подгонка модели к тренировочным данным.

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

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