我是机器学习的新手,并试图构建符合良好实践且不易受偏见影响的机器学习模型。我决定使用 Sklearn 的Pipeline
类来确保我的模型不容易出现数据泄漏。我正在构建一个机器学习模型,试图预测下一小时 的买入、持有、卖出趋势。
但是,我的多类分类数据集非常不平衡。虽然不一定要担心测试集不平衡,但重要的是训练集是平衡的。但是,我已经进行了适当的研究,但我找不到关于应该在哪里执行此数据集重新平衡步骤的答案。应该在缩放之前还是之后完成?应该在训练/测试拆分后还是之后完成?
我不知道应该在哪里完成这个关键步骤。为简单起见,我不会使用 SMOTE,而是使用随机少数上采样。任何答案将不胜感激。
我的代码如下:
#All necessary packages have already been imported
x = df['MACD', 'MFI', 'ROC', 'RSI', 'Ultimate Oscillator', 'Williams %R', 'Awesome Oscillator', 'KAMA',
'Stochastic Oscillator', 'TSI', 'Volume Accumulator', 'ADI', 'CMF', 'EoM', 'FI', 'VPT','ADX','ADX Negative',
'ADX Positive', 'EMA', 'CRA']
y = df['Label']
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)
pipe = Pipeline([('sc', StandardScaler()),
('svc', SVC(decision_function_shape = 'ovr'))])
candidate_parameters = [{'C': [0.0001, 0.001, 0.01, 0.1, 1, 2, 3],
'gamma': [0.0001, 0.001, 0.01, 0.1, 1, 2, 3], 'kernel': ['poly']
}]
clf = GridSearchCV(estimator = pipe, param_grid = candidate_parameters, cv = 5, n_jobs = -1)
clf.fit(X_train, y_train)```