我使用的 KNN 模型总是以 100% 的准确率返回,但事实不应该如此

问题描述 投票:0回答:1

我刚刚进入机器学习领域,正在研究使用分类模型。目前我正在使用蘑菇分类数据集(类别是有毒的或可食用的)。问题是,虽然我实际上遵循的是我看到其他人所做的最基本的可能程序,但我的模型只返回完美的分类。这是我用来创建模型的代码。

model = KNeighborsClassifier(n_neighbors = 5)
    model.fit(X_train, y_train)
    y_preds = model.predict(X_test)
    score = accuracy_score(y_test, y_preds)

这会返回 1.0 的准确度分数,一个完全没有混淆的混淆矩阵(100% 正确的预测值),并且如果我更改 k 数或测试大小,这不会改变。即使将其设置为 50%,结果也是一样。

我已尽我所能清理数据,并且数据完全是一次性编码的。我想这可能会产生影响,但我不确定。下面是我用来准备数据的代码。首先,我填充了缺失值,然后编码了序数数据。任何意见都表示赞赏!


    qmarks = df.loc[df['Stalk Root'].str.contains('\?')] # nan values are ? here
mode = df['Stalk Root'].mode() #most common answer is b
df_enc = df.replace('?', 'b') #replace all question marks with most common value

df_enc['Ring Number'] = df_enc['Ring Number'].replace({'n': 0, 'o': 1, 't': 2}).astype(int)
df_enc['Gill Spacing'] = df_enc['Gill Spacing'].replace({'c': 0, 'w': 1, 'd': 2}).astype(int)
df['Poisonous'] = (df['Poisonous'] == 'p').astype(int)
df_enc = pd.get_dummies(df)

我尝试过更改很多变量,但这并不是第一个对我进行此操作的数据集。不久前,在不同数据集上的线性回归模型发生了这种情况,我也无法弄清楚那里出了什么问题。我可以想象数据编码、训练测试分割或用户错误有问题,但我不知道如何修复它。然而,我确信数据被准确地分割,在训练和测试分割中并不相同,并且数据集的每个类别的分布相对均匀。请帮忙!

编辑:添加数据准备代码

python machine-learning classification knn
1个回答
0
投票

假设代码中没有错误,使得 y_test 等于 y_pred,我将分析数据集以尝试理解结果是否有意义。

请记住,K-Neighbors 算法将在最接近该点的 K 个观测值中选择最常见的类。因此,如果数据已经很好地分离,则 K 个最接近的观测值很可能始终来自正确的类别。

想象一个 XY 平面,其中两个簇彼此相距很远,在这种情况下,K 邻居几乎总是返回 100% 的准确度。

© www.soinside.com 2019 - 2024. All rights reserved.