我有5列虚拟人物,代表5个类别。我运行3个分类模型,但交叉验证得分的平均值相同。我想知道这是否可能?
我的代码在下面,
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=1/3, random_state=88888)
cvL = cross_val_score(LogisticRegression(), x_test, y_test,cv=5)
cvD = cross_val_score(DecisionTreeClassifier(max_depth=5), x_test, y_test,cv=5)
cvF = cross_val_score(RandomForestClassifier(n_estimators=10), x_test, y_test,cv=5)
I get the same score for all 3 model, which is
array([0.78125 , 0.78125 , 0.77777778, 0.77777778, 0.77777778])
我的问题是:
答案 0 :(得分:0)
是的,两个不同的分类器可以为您提供相同的分数。问题的可能性在很大程度上因问题而异。我的第一个直觉是质疑数据的大小。太小了,过拟合和仅学习一部分数据将很容易。
通常,您不需要指定随机状态。如果您希望能够在给定相同数据和分类器的情况下在每次运行中重现结果,则保留此选项。您不必选择最佳随机状态。
看起来您实际上并不是在训练数据。您直接跳起来得分。我建议您返回sklearn文档并阅读更多教程,但基本上,您会想要以下内容:
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 1/3,random_state = 88888)
logreg = LogisticRegression()
logreg.fit(x_train, y_train)
cvL = cross_val_score(logreg, x_test, y_test, cv=5)
当然,交叉验证的一个主要特征是能够选择最佳超参数。我建议找到有关sklearn的GridSearchCV
的教程。对于每个分类器,您都可以调整基础模型的参数,以实现最佳分类性能。此类可帮助您找到这些内容。
答案 1 :(得分:0)
使用训练集x_train
来查看不同模型的分数是否发生变化。使用x_test
进行交叉验证毫无意义,因为训练集将有更多的行来训练估计量。
此外,请勿将random_state
的{{1}}更改为train_test_split
,因为它只是用于复制相同的分割以进行训练和测试。