缩放决策树中的数据改变了我的结果?
问题描述:
我知道,一个决策树没有得到受缩放数据,但是当我扩展我的决策树中的数据它给了我一个糟糕的表现(坏召回,精度和准确度)缩放决策树中的数据改变了我的结果?
但是,当我不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可能会给出不同的结果。这会影响结果,特别是对于小样本量。另外,如果你的样本量很小,结果可能并没有那么不同。
我有以下建议:
- 缩放可以被视为附加的超参数,其可通过CV进行优化。
- 执行一个额外的CV(称为嵌套CV)或保持以估计性能。这是通过保持测试集,使用CV对训练数据选择模型,然后评估其在测试集上的性能(在嵌套CV的情况下,对所有折叠重复并对性能估计进行平均)。当然,您的最终模型应该在整个数据集上进行培训。一般来说,您不应该使用用于模型选择的CV的性能估计,因为它会过于乐观。
为什么我的最终模型需要对整个数据进行训练?如果我已经对其进行了交叉验证?第二,你的意思是训练整个数据还是训练数据? – floyd