python 中的 adaBoost 投票数据和目标形式
adaBoost voting data and target form in python
我正在尝试测试这个投票 adaBoost 分类器的实现。
我的数据集具有 650 个三元组 G1、G2、G3 的形式,其中 G1 和 G2 包含在 [1-20] 中,并且 G3 是基于 G1 和 G2 的 1 或 0。
根据我的阅读,cross_val_score 将训练组和测试组中的输入数据单独拆分,但我做的 X,y 初始化错误。如果我尝试用整个数据集初始化 X 和 y,准确度是 100%,这似乎有点偏差。
我试过在 y 中只输入 G3 值,但我得到了相同的结果。
通常我将数据分成训练集和测试集,这让事情变得更容易。
我在 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))
您应该从 X 变量中删除 G3 列,因为这是您要预测的内容。
X,y = data.drop('G3'), data['G3']
此代码可以正常工作,应该能帮到您。
我正在尝试测试这个投票 adaBoost 分类器的实现。
我的数据集具有 650 个三元组 G1、G2、G3 的形式,其中 G1 和 G2 包含在 [1-20] 中,并且 G3 是基于 G1 和 G2 的 1 或 0。
根据我的阅读,cross_val_score 将训练组和测试组中的输入数据单独拆分,但我做的 X,y 初始化错误。如果我尝试用整个数据集初始化 X 和 y,准确度是 100%,这似乎有点偏差。
我试过在 y 中只输入 G3 值,但我得到了相同的结果。
通常我将数据分成训练集和测试集,这让事情变得更容易。
我在 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))
您应该从 X 变量中删除 G3 列,因为这是您要预测的内容。
X,y = data.drop('G3'), data['G3']
此代码可以正常工作,应该能帮到您。