我正在尝试使用梯度增强模型来预测幻想足球的未来得分-目前仅查看前两轮比赛。当前,如果期望球员得分超过6分,则模型将返回“ 1”,否则返回“ 0”,表明该球员是否将是一个不错的队长选择。
在我的原始表中,我有球员姓名和回合信息以提供上下文信息,但是在训练算法时将其删除。我的问题是,一旦模型做出预测,我该如何结合玩家名称显示该预测,例如:
PlayerA-队长预测= 1
等
y = ds.isCaptain
GB_table = ds.drop(['Player', 'Round', 'isCaptain', 'Points'], axis=1)
X_train, X_test, y_train, y_test = train_test_split(GB_table, y, test_size=0.2)
baseline = GradientBoostingClassifier(learning_rate=0.01,n_estimators=1500,max_depth=4, min_samples_split=40, min_samples_leaf=7,max_features=4 , subsample=0.95, random_state=10)
baseline.fit(X_train,y_train)
predictors=list(X_train)
feat_imp = pd.Series(baseline.feature_importances_, predictors).sort_values(ascending=False)
feat_imp.plot(kind='bar', title='Importance of Features')
plt.ylabel('Feature Importance Score')
print('Accuracy of GBM on test set: {:.3f}'.format(baseline.score(X_test, y_test)))
pred=baseline.predict(X_test)
print(classification_report(y_test, pred))
上面显示了我的预测结果,但是不幸的是,由于我从GB_table
中删除了玩家的姓名和回合信息,因此我再也无法从谁/哪个回合中进行预测。
答案 0 :(得分:2)
我假设您正在使用pandas DataFrames,在这种情况下,它非常简单。
X_train和X_test数据框中的索引号将与原始“ ds”数据框中的索引相对应。
尝试:
pred = baseline.predict(X_test)
pred_original_data = ds.iloc[X_test.index]
pred_original_data['prediction'] = pred
答案 1 :(得分:1)
您可以将播放器列和其他字段放在train_test_split
之后。
这是我的建议
y = ds.isCaptain
X_train, X_test, y_train, y_test = train_test_split(ds, y, test_size=0.2)
baseline = GradientBoostingClassifier(learning_rate=0.01, n_estimators=1500,max_depth=4, min_samples_split=40, min_samples_leaf=7,max_features=4 , subsample=0.95, random_state=10)
baseline.fit(X_train.drop(['Player', 'Round', 'isCaptain', 'Points'], axis=1),y_train)
X_test_input = X_test.drop(['Player', 'Round', 'isCaptain', 'Points']
score = baseline.score(X_test_input, y_test))
print('Accuracy of GBM on test set: {:.3f}'.format(score)
X_test['prediction'] = baseline.predict(X_test_input)
print(classification_report(y_test, X_test['prediction']))