我知道决策树不会受到缩放数据的影响,但是当我在决策树中缩放数据时,它会给我带来糟糕的表现(糟糕的回忆,精确度和准确性)
但是,当我不缩放所有性能指标时,决策树会给我一个惊人的结果。怎么会这样?
注意:我使用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
答案 0 :(得分:0)
我不熟悉scikit-learn,所以请原谅我,如果我误解了什么。
首先,PCA标准化功能吗?如果没有,它将为缩放和非缩放输入提供不同的结果。
其次,由于分割样本的随机性,CV可能在每次运行时给出不同的结果。这将影响结果,特别是对于小样本量。此外,如果您的样本量较小,结果可能会有所不同。
我有以下建议: