为何使用y与y.values时DecisionTreeClassifier准确率差异巨大?
为何使用y.values划分数据集会导致决策树模型准确率骤降?
问题场景
在使用DecisionTreeClassifier训练模型时,出现了两种标签输入方式下准确率差异巨大的情况:
- 使用原始DataFrame列作为标签,测试集准确率达100%
- 将标签转为一维数组(
y.values)后,测试集准确率降至75%
准确率100%的训练代码
X = new_df.drop('salary_more_then_100k', axis='columns') y = new_df.salary_more_then_100k X_train, X_test, y_train, y_test = train_test_split(X, y) Tree = DecisionTreeClassifier() Tree.fit(X_train,y_train)
准确率75%的训练代码
X_train, X_test, y_train, y_test = train_test_split(X, y.values)
核心原因
问题的根源在于train_test_split的拆分逻辑:
- 当传入
X(DataFrame)和y(Series)时,两者带有一致的索引,train_test_split会基于索引同步打乱并拆分,保证每一条特征都对应正确的标签,模型训练和测试的数据匹配度完全没问题,因此能达到正常的准确率。 - 而
y.values是剥离了索引的一维numpy数组,此时train_test_split会把X和y.values视为两个独立的数据集,分别进行随机拆分——这直接破坏了特征与标签的对应关系,训练时用的特征和标签可能完全不匹配,测试时自然无法正确预测,准确率也就大幅下降。
内容的提问来源于stack exchange,提问作者Ayandip Pal
相关产品推荐
相关产品推荐

