Низкая точность классификации, что мне делать? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь сделать классификацию об этом наборе данных:

https://www.openml.org/d/1475

Я использую преимущественно scikit обучение, и я пытался выбрать функции по их коэффициенты корреляции:

#X is the training data
X1 = X.transpose()
cr = np.corrcoef(X1)
   count = 0
index = []
for i in range(n_features):
    for j in range(n_features):
        if ((cr[i, j] > 0.85 or cr[i, j]<-0.85)  and i != j and i < j):
            print(i, '-', j, 'valore:' + str(cr[i, j]))
            count = count + 1
            index.append(i)

или их VIF, с этой функцией:

def VIF(dataset, n_feature):
    df = dataset.iloc[:, 0:51]
    df.dropna()
    df = df._get_numeric_data()  # This line will drop non-numeric cols
    df.head()

    # For each X, calculate VIF and save in dataframe
    vif = pd.DataFrame()
    vif["VIF Factor"] = [variance_inflation_factor(df.values, i) for i in range(df.shape[1])]
    indici = []
    for i in range(n_feature):
        indici.append('feature:' + str(i + 1))
    vif["features"] = indici
    return vif

, затем я обучил и проверил данные с помощью SVM (пробуя 'rbf', 'linear' и 'poly ', с оптимальными значениями C), k-NN и MLPClassifier, но лучшим результатом была точность около 57%. Я также пытался проверить SVM с данными поезда, и в этом случае я получил очень низкую точность. Это код о SVM:

svm = SVC(kernel='rbf', decision_function_shape='ovr',C=1)

svm.fit(all_train_data, all_target)
ypred = svm.predict(all_train_data)

cf = confusion_matrix(all_target, ypred)
print(cf)
print(classification_report(all_target, ypred))
print('Accuracy on the test set is: ' + str(np.round(accuracy_score(all_target, ypred) * 100, 2)) + '%')

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

https://www.openml.org/t/9985

1 Ответ

0 голосов
/ 28 января 2020

Добро пожаловать в переполнение стека. Основываясь на предоставленной вами ссылке, вы не сделали ничего плохого в построении своей модели классификации, так что хорошо сделали. С точки зрения улучшения вашей модели, чтобы вы приблизились к более высоким показателям, показанным на этой странице, вы должны попробовать

  • Копировать некоторые из моделей, которые хорошо себя зарекомендовали, особенно случайные леса и деревья с градиентным повышением
  • Пропуск шага выбора объекта - пусть ваш алгоритм классификации выберет для вас важные функции (выберите тот, который будет соответствовать двум, упомянутым в предыдущем пункте), так как корреляция не всегда является хорошим индикатором важности переменной ( classi c пример состоит в том, что при классификации того, выжил ли кто-то, информация о том, принимали ли они определенное противоядие, была бы существенной, если бы он также принимал связанный яд, но не имеет значения в противном случае)
...