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

问题描述:

我知道,一个决策树没有得到受缩放数据,但是当我扩展我的决策树中的数据它给了我一个糟糕的表现(坏召回,精度和准确度)缩放决策树中的数据改变了我的结果?

但是,当我不t决定了决策树给我带来的惊人结果的所有性能指标。怎么会这样?

注:我使用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学习,所以如果我误解了某些东西,请原谅。

首先,PCA标准化功能是什么?如果没有,它会给缩放和非缩放输入带来不同的结果。其次,由于样本分裂的随机性,每次运行时CV可能会给出不同的结果。这会影响结果,特别是对于小样本量。另外,如果你的样本量很小,结果可能并没有那么不同。

我有以下建议:

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

为什么我的最终模型需要对整个数据进行训练?如果我已经对其进行了交叉验证?第二,你的意思是训练整个数据还是训练数据? – floyd