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