决策树提供 100% 的准确率 - 我做错了什么?

数据挖掘 决策树 机器学习模型 准确性
2022-02-27 10:57:52

我的假设是我的训练集包括测试集,但我不知道如何改变它。

from sklearn.model_selection import train_test_split
import sklearn.metrics as metrics

# dataframe to store model performances
scores=pd.DataFrame([],columns=['model', 'recall', 'f1', 'accuracy'])
from sklearn.tree import DecisionTreeClassifier

cv_scores_ac=[]
cv_scores_f1=[]    
cv_scores_re=[]            
for cv in range(1, 6):
    print ("Decision Tree - Iteration %i" % cv)
    X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=cv)

    tree=DecisionTreeClassifier(min_samples_split=20)
    tree.fit(X_train, y_train)
    y_pred=tree.predict(X_test)
    cv_scores_ac.append(metrics.accuracy_score(y_test, y_pred))
    cv_scores_f1.append(metrics.f1_score(y_test, y_pred))
    cv_scores_re.append(metrics.recall_score(y_test, y_pred))
2个回答

机器学习是为数不多的 99% 优秀而 100% 糟糕的事情之一。

好吧,我无法证明这一点,因为我没有您的数据,但可能:

  • 测试数据包含在训练数据中。

要检查这种可能性,这里有一个提示:

print(X_test[X_test.isin(X_train)])

将打印 X_test 中出现在 X_train 中的所有行。你能想到如何处理这些信息吗?:)

或者

  • 您忘记X中删除目标变量y

要检查这种可能性,只需键入:

print(X_train.columns)

并检查其中一列是否与目标变量的名称匹配。

最有可能是数据泄漏,在这种情况下,您在训练和测试数据中具有相同的值(或线性相关)。所以请检查输入值。