Я пытаюсь протестировать эту реализацию классификатора adaBoost для голосования.
Мой набор данных имеет форму 650 триплетов G1, G2, G3, где G1 и G2 содержатся в [1-20], а G3 равно 1 или 0 в зависимости от G1 и G2.
Из того, что я читал, cross_val_score отдельно разделяет входные данные в обучающих и тестовых группах, но я неправильно выполняю инициализацию X, y. Если я попытаюсь инициализировать X и y со всем набором данных, точность составит 100%, что кажется немного неправильным.
Я попытался ввести только значение G3 в y, но получил тот же результат.
Обычно я разделяю данные на наборы для обучения и тестирования, и это упрощает работу.
У меня нет большого опыта работы с python или машинным обучением, но я решил попробовать.
Не могли бы вы объяснить, как должна выглядеть инициализация X и y, чтобы это работало правильно?
import os
import subprocess
import pandas as pd
import numpy as np
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier
input_file = "student_data_grades_only.csv"
data = pd.read_csv(input_file, header = 0)
X, y = data, data['G3']
print(X,y)
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(n_estimators=50, random_state=1)
clf3 = GaussianNB()
eclf = VotingClassifier(
estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)],
voting='hard')
for clf, label in zip([clf1, clf2, clf3, eclf], ['Logistic Regression', 'Random Forest', 'naive Bayes', 'Ensemble']):
scores = cross_val_score(clf, X, y, scoring='accuracy', cv=2)
print("Accuracy: %0.2f (+/- %0.2f) [%s]" % (scores.mean(), scores.std(), label))