首页 文章

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

提问于
浏览
2

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

但是当我不扩展所有性能指标时,决策树给了我一个惊人的结果 . 怎么会这样?

注意:我使用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

1 回答

  • 0

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

    首先,PCA标准化功能吗?如果没有,它将为缩放和非缩放输入提供不同的结果 .

    其次,由于分裂样本的随机性,CV可能在每次运行时给出不同的结果 . 这将影响结果,特别是对于小样本量 . 此外,如果您的样本量较小,结果可能会有所不同 .

    我有以下建议:

    • 缩放可以视为额外的超参数,可以通过CV进行优化 .

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

相关问题