【问题标题】:How do I predict future results with scikitlearn, pandas in Python using RandomForestRegressor method?如何使用 scikit learn 预测未来的结果,Python 中的 pandas 使用随机森林回归器方法?
【发布时间】:2020-04-06 09:07:59
【问题描述】:

您好,我看到了本教程,介绍了如何使用 python 和一些库来预测未来的 NCAAB 比赛,使用运动参考库。我将发布代码以及文章。这似乎运作良好,但我认为它只是过去基于游戏的测试。我将如何使用它来预测特定球队的未来比赛?例如,该日期 A 队和 B 队的比分是多少?

我看到的问题是,使用的一些数据只有在游戏结束后才能知道。这些已知数据是程序中用来预测分数的数据。

第一个实验:我尝试只填充我在游戏发生之前就知道的数据,并使用 fillna(0) 将剩余的数据填充为零。这是 csv 的样子:

date_team,away_assist_percentage,away_assists,away_block_percentage,away_blocks,away_defensive_rating,away_defensive_rebound_percentage,away_defensive_rebounds,away_effective_field_goal_percentage,away_field_goal_attempts,away_field_goal_percentage,away_field_goals,away_free_throw_attempt_rate,away_free_throw_attempts,away_free_throw_percentage,away_free_throws,away_losses,away_minutes_played,away_offensive_rating,away_offensive_rebound_percentage,away_offensive_rebounds,away_personal_fouls,AWAY_POINTS,away_steal_percentage ,away_steals,away_three_point_attempt_rate,away_three_point_field_goal_attempts,away_three_point_field_goal_percentage,away_three_point_field_goals,away_total_rebound_percentage,away_total_rebounds,away_true_shooting_percentage,away_turnover_percentage,away_turnovers,away_two_point_field_goal_attempts,away_two_point_field_goal_percentage,away_two_point_field_goals,away_win_percentage,away_wins,home_assist_percentage,home_assists,home_block_percentage,home_blocks,H ome_defensive_rating,home_defensive_rebound_percentage,home_defensive_rebounds,home_effective_field_goal_percentage,home_field_goal_attempts,home_field_goal_percentage,home_field_goals,home_free_throw_attempt_rate,home_free_throw_attempts,home_free_throw_percentage,home_free_throws,home_losses,home_minutes_played,home_offensive_rating,home_offensive_rebound_percentage,home_offensive_rebounds,home_personal_fouls,HOME_POINTS,home_steal_percentage,home_steals,home_three_point_attempt_rate,home_three_point_field_goal_attempts,home_three_point_field_goal_percentage,home_three_point_field_goals,home_total_rebound_percentage, home_total_rebounds,home_true_shooting_percentage,home_turnover_percentage,home_turnovers,home_two_point_field_goal_attempts,home_two_point_field_goal_percentage,home_two_point_field_goals,home_win_percentage,home_wins,pace 0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0.7,7,0,0,0,0,0,0,0,0,0,0,42, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,.1,1,0 最后一行代码改为: print(model.predict(final_trim).astype(int), y_test)

“final_trim”是正在预测的新 csv。

结果根本不准确。我错过了什么?

这里是原始代码:

import pandas as pd
from sportsreference.ncaab.teams import Teams
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split

FIELDS_TO_DROP = ['away_points', 'home_points', 'date', 'location',
                  'losing_abbr', 'losing_name', 'winner', 'winning_abbr',
                  'winning_name', 'home_ranking', 'away_ranking']

dataset = pd.DataFrame()
teams = Teams()
for team in teams:
    dataset = pd.concat([dataset, team.schedule.dataframe_extended])
X = dataset.drop(FIELDS_TO_DROP, 1).dropna().drop_duplicates()
y = dataset[['home_points', 'away_points']].values
X_train, X_test, y_train, y_test = train_test_split(X, y)
parameters = {'bootstrap': False,
              'min_samples_leaf': 3,
              'n_estimators': 50,
              'min_samples_split': 10,
              'max_features': 'sqrt',
              'max_depth': 6}
model = RandomForestRegressor(**parameters)
model.fit(X_train, y_train)
print(model.predict(X_test).astype(int), y_test)

这是我从中得到的帖子: https://towardsdatascience.com/predict-college-basketball-scores-in-30-lines-of-python-148f6bd71894

谢谢!

【问题讨论】:

  • 欢迎堆栈溢出!你的问题有点令人困惑,因为train_test_split 只与模型训练和评估有关,与预测看不见的数据无关。有很多资源可以告诉您如何将新数据传递给经过训练的模型,请edit 提出您的问题,以根据您自己的研究显示您尝试过什么,以及您的尝试出了什么问题
  • @G.Anderson 我已经更新了这个问题,以包括我已经尝试过的一个实验。谢谢

标签: python pandas scikit-learn train-test-split


【解决方案1】:

这样想,如果你想测试模型的拟合优度,那么你必须提前知道结果,这样你就可以测量你的(模型)输出和实际结果并执行必要的调整以提高模型的整体性能。

一旦您训练了模型,如果您想预测未来的值,那么(在不了解您的工作内容的情况下)您应该为模型提供与训练时相同的特征,但使用您将要制作的数据你的预测。这是一个非常基本的示例,使用两个变量来预测两支球队(A 和 B)的得分:

import pandas as pd 
data = {'Temperature':[10,20,30,25],'Humidity':[40,50,80,65],'Score_A':[1,2,3,2],'Score_B':[6,3,1,2]}
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
df = pd.DataFrame(data)
print(df)
X = df[['Temperature','Humidity']]
Y = df[['Score_A','Score_B']]
X_train, X_test, y_train, y_test = train_test_split(X, Y,random_state=42)
model = RandomForestRegressor(random_state=42)
model.fit(X_train, y_train)

在这里我已经训练了我的模型,所以如果我想对未来进行预测,我需要传递我在训练中使用的相同特征(温度和湿度),但要传递我想要进行预测的值在。假设我们的朋友气象学家说他们下一场比赛的温度和湿度分别是 35 和 70。所以我需要将.predict() 与这些值一起使用:

model.predict(print(model.predict([[35,70]])) 

返回以下输出:

[[2.6 1.4]]

如果你想让它更漂亮:

prediction = model.predict([[35,70]])
print("Team A will score: ",prediction[0][0])
print("Team B will score: ",prediction[0][1])

返回:

Team A will score:  2.6
Team B will score:  1.4

【讨论】:

    猜你喜欢
    • 2021-01-07
    • 2021-01-22
    • 2020-02-12
    • 2021-10-10
    • 2017-12-10
    • 2021-11-20
    • 2019-01-29
    相关资源
    最近更新 更多