【发布时间】:2021-04-18 15:21:00
【问题描述】:
我有一个名为 features 的数据框,我按如下方式缩放数据:
col_names=features.columns
scaler=StandardScaler()
scaler.fit(features)
standardized_features=scaler.transform(features)
standardized_features.shape
df=pd.DataFrame(data=standardized_features,columns=col_names)
然后我将训练集和测试集拆分如下:
df_idx = df[df.Date == '1996-12-01'].index[0]
df_targets=df['Label'].values
df_features=df.drop(['Regime','Date','Label'], axis=1)
df_training_features = df.iloc[:df_idx,:].drop(['Regime','Date','Label'], axis=1)
df_validation_features = df.iloc[df_idx:, :].drop(['Regime','Date','Label'], axis=1)
df_training_targets = df['Label'].values
df_training_targets=df_training_targets[:df_idx]
df_validation_targets = df['Label'].values
df_validation_targets=df_validation_targets[df_idx:]
最后我测试了不同的方法:
scoring='f1'
kfold = model_selection.TimeSeriesSplit(n_splits=5)
models = []
models.append(('LR', LogisticRegression(C=1e10, class_weight = 'balanced')))
models.append(('KNN', KNeighborsClassifier()))
models.append(('GB', GradientBoostingClassifier(random_state = 42)))
models.append(('ABC', AdaBoostClassifier(random_state = 42)))
models.append(('RF', RandomForestClassifier(class_weight = 'balanced')))
models.append(('XGB', xgb.XGBClassifier(objective='binary:logistic', booster='gbtree')))
results = []
names = []
lb = preprocessing.LabelBinarizer()
for name, model in models:
cv_results = model_selection.cross_val_score(estimator = model, X = df_training_features,
y = lb.fit_transform(df_training_targets), cv=kfold, scoring = scoring)
model.fit(df_training_features, df_training_targets) # train the model
fpr, tpr, thresholds= metrics.roc_curve(df_training_targets,model.predict_proba(df_training_features)[:,1])
auc = metrics.roc_auc_score(df_training_targets,model.predict(df_training_features))
plt.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % (name, auc))
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
print(msg)
我的问题是:
- 如果最初我使用 StandardScaler 缩放我的数据,那么在最后一部分中我使用 fit_transform 而不是 fit 作为 model_selection.cross_val_score 的 y 参数是否正确?为什么?
- 对于预测,我是否应该简单地使用 model.predict(df_validation_features)?
【问题讨论】:
标签: python-3.x scikit-learn cross-validation