デシジョン ツリーがデータのスケーリングの影響を受けないことはわかっていますが、デシジョン ツリー内でデータをスケーリングすると、パフォーマンスが低下します (再現率、精度、精度が低下します)。
しかし、すべてのパフォーマンス メトリクスをスケーリングしないと、デシジョン ツリーから驚くべき結果が得られます。どうすればいいの?
注: 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