Python 在3个不同分类器上使用相同的数据集输出相同的混淆矩阵/准确度分数

Python 在3个不同分类器上使用相同的数据集输出相同的混淆矩阵/准确度分数,python,machine-learning,scikit-learn,classification,supervised-learning,Python,Machine Learning,Scikit Learn,Classification,Supervised Learning,我面临一个问题,三个不同的分类器,都在同一个数据集(sklearn iris数据集)上训练,输出完全相同的精度分数和混淆矩阵。我给我的教授发了电子邮件,问她这是否正常,如果不是,她有什么建议,她给我的基本上是“这不正常,回去看看你的代码” 从那以后,我对我的代码做了相当多的研究,但我似乎看不到发生了什么。我希望这里的人能给我一些启示,我也能从这次经历中学到一些东西 这是我的密码: #数据集 从sklearn导入数据集 #数据预处理 从sklearn.model\u选择导入列车\u测试\u拆分 从

我面临一个问题,三个不同的分类器,都在同一个数据集(sklearn iris数据集)上训练,输出完全相同的精度分数和混淆矩阵。我给我的教授发了电子邮件,问她这是否正常,如果不是,她有什么建议,她给我的基本上是“这不正常,回去看看你的代码”

从那以后,我对我的代码做了相当多的研究,但我似乎看不到发生了什么。我希望这里的人能给我一些启示,我也能从这次经历中学到一些东西

这是我的密码:

#数据集
从sklearn导入数据集
#数据预处理
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.preprocessing导入StandardScaler
#分类器
从sklearn.svm导入SVC
从sklearn.tree导入DecisionTreeClassifier
从sklearn.linear_模型导入逻辑回归
#性能指标
从sklearn.metrics导入混淆矩阵、准确性得分
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
#将数据集读入内存。
iris=数据集。加载\u iris()
#将自变量和因变量提取为变量。
X=iris.data
y=iris.target
#分割训练和测试集(70/30)。
X_序列,X_测试,y_序列,y_测试=序列测试分割(X,y,测试大小=0.30,随机状态=0)
#将定标器适配到训练集,并变换训练集和测试集
#列,因为所有因变量都不包含分类数据,所以都是列。
ss=StandardScaler()
X_序列=ss.fit_变换(X_序列)
X_测试=ss.变换(X_测试)
#创建分类器。
dt_分类器=决策树分类器(随机_状态=0)
svm_分类器=SVC(核=rbf',随机_状态=0)
lr_分类器=逻辑回归(随机_状态=0)
#将分类器与训练数据相匹配。
dt_分类器拟合(X_序列,y_序列)
svm_分类器.fit(X_序列,y_序列)
lr_分类器。拟合(X_序列、y_序列)
#使用现在训练好的分类器进行预测。
dt_y_pred=dt_分类器.预测(X_检验)
svm_y_pred=svm_分类器。预测(X_测试)
lr_y_pred=lr_分类器.预测(X_检验)
#使用测试集的预测结果和实际结果创建混淆矩阵。
dt_cm=混淆矩阵(y_测试,dt_y_pred)
svm_cm=混淆矩阵(y_测试,svm_y_pred)
lr_cm=混淆矩阵(y_测试,lr_y_pred)
#使用测试集的预测结果和实际结果计算准确度分数。
dt_分数=准确度_分数(y_测试,dt_y_pred)
svm_分数=准确度_分数(y_测试,svm_y_pred)
lr_分数=准确度_分数(y_测试,lr_y_pred)
#打印每个分类器的混淆矩阵和精度分数。
打印('---决策树分类器---')
打印(f'混淆矩阵:\n{dt_cm}')
打印(f'精度分数:{dt\U分数}\n')
打印('---支持向量机分类器---')
打印(f'混淆矩阵:\n{svm\u cm}')
打印(f'精度分数:{svm_分数}\n')
打印('--Logistic回归分类器--')
打印(f'混淆矩阵:\n{lr_cm}')
打印(f'准确度分数:{lr_分数}')
输出:

--- Decision Tree Classifier ---
Confusion Matrix:
[[16  0  0]
 [ 0 17  1]
 [ 0  0 11]]
Accuracy Score:0.9777777777777777

--- Support Vector Machine Classifier ---
Confusion Matrix:
[[16  0  0]
 [ 0 17  1]
 [ 0  0 11]]
Accuracy Score:0.9777777777777777

--- Logistic Regression Classifier ---
Confusion Matrix:
[[16  0  0]
 [ 0 17  1]
 [ 0  0 11]]
Accuracy Score:0.9777777777777777

如您所见,每个不同分类器的输出完全相同。任何人能给我的任何帮助都将不胜感激。

您的代码没有问题

在以下情况下,结果的相似性并非意外:

  • 数据相当“简单”
  • 样品太小了
  • 这两个前提都在这里。虹膜数据将使用现代ML算法(包括您在此处使用的算法)进行分类;再加上你的测试集小得离谱(只有45个样本),这样的结果并不令人惊讶

    事实上,只需将数据分割更改为使用
    测试大小=0.20
    ,所有3个模型的准确度都将达到1.0


    没什么好担心的。

    非常感谢您的回答以及与另一个问题的链接,这进一步帮助我理解了为什么会是这样。这是一个有趣的结果,我认为这是我程序中的一个错误。@georgeedwardshauv非常欢迎你;下面是关于NNs和Keras(这次有自己的答案)。