缩放决策树中的数据会改变我的结果吗



我知道决策树不会受到数据缩放的影响,但当我在决策树中缩放数据时,它会给我带来糟糕的性能(糟糕的回忆、精度和准确性)

但是,当我没有缩放所有的性能指标时,决策树会给我一个惊人的结果。这怎么可能?

注意:我使用GridSearchCV,但我不认为交叉验证是我出现问题的原因。这是我的代码:

scaled = MinMaxScaler()
pca = PCA()
bestK = SelectKBest()
combined_transformers = FeatureUnion([ ("scale",scaled),("best", bestK),         
("pca", pca)])
clf = tree.DecisionTreeClassifier(class_weight= "balanced")
pipeline = Pipeline([("features", combined_transformers), ("tree", clf)])
param_grid = dict(features__pca__n_components=[1, 2,3],
features__best__k=[1, 2,3],
tree__min_samples_split=[4,5],
tree__max_depth= [4,5],
)
grid_search = GridSearchCV(pipeline, param_grid=param_grid,scoring='f1')
grid_search.fit(features,labels)

使用缩放函数MinMaxScaler(),我的性能是:

f1 =  0.837209302326
recall =  1.0
precision =  0.72
accuracy =  0.948148148148

但没有缩放:

f1 =  0.918918918919
recall =  0.944444444444
precision =  0.894736842105
accuracy =  0.977777777778

我不熟悉scikit learn,如果我误解了什么,请原谅。

首先,主成分分析是否标准化了特征?如果没有,它将为缩放和非缩放输入提供不同的结果。

其次,由于样本分割的随机性,CV在每次运行时可能会给出不同的结果。这将影响结果,尤其是对于小样本量。此外,如果样本量较小,结果可能不会有太大差异。

我有以下建议:

  1. 缩放可以被视为一个额外的超参数,可以通过CV进行优化
  2. 执行额外的CV(称为嵌套CV)或保持以评估性能。这是通过保留一个测试集来完成的,使用训练数据上的CV选择模型,然后评估其在测试集上的性能(如果是嵌套CV,则对所有折叠重复执行此操作,并对性能估计进行平均)。当然,您的最终模型应该在整个数据集上进行训练。通常,您不应该使用CV的性能评估来选择模型,因为这会过于乐观

相关内容

  • 没有找到相关文章

最新更新