def GenerateTrainData(stat, trainresult): X = [] y = [] for index, rows in trainresult.iterrows(): winteam = rows['WTeam'] loseteam = rows['LTeam'] winelo = GetElo(winteam) loseelo = GetElo(loseteam) # 主场加100 if rows['WLoc'] == 'H': winelo = winelo+100 else: loseelo = loseelo+100 # 把elo当为评价每个队伍的第一个特征值 fea_win = [winelo] fea_lose = [loseelo] for key, value in stat.loc[winteam].iteritems(): fea_win.append(value) for key, value in stat.loc[loseteam].iteritems(): fea_lose.append(value) if np.random.random() > 0.5: X.append(fea_win+fea_lose) y.append(0) else: X.append(fea_lose+fea_win) y.append(1) # 更新team elo分数 win_new_score, lose_new_score = CalcElo(winteam, loseteam) team_elos[winteam] = win_new_score team_elos[loseteam] = lose_new_score return np.nan_to_num(X),y
时间: 2024-01-10 18:03:16 浏览: 205
这段代码是用于生成机器学习所需的训练数据。其中,stat 指代每个队伍的统计数据,trainresult 指代比赛结果数据。对于每一场比赛,先获取胜利队伍和失败队伍的 Elo 等级分,并在主场胜者 Elo 等级分加 100。然后,将胜利队伍和失败队伍的 Elo 等级分以及统计数据作为特征值,组合成特征向量。接着,根据 0.5 的概率将特征向量和胜负标签(0 表示胜利队伍,1 表示失败队伍)加入到训练数据集中。最后,根据比赛结果更新每个队伍的 Elo 等级分,并返回训练数据集 X 和对应的标签 y。值得注意的是,这里使用了 np.nan_to_num 函数将特征向量中的 NaN 值替换为 0。
相关问题
def GeneratePredictData(stat,info): X=[] for index, rows in stat.iterrows(): #elo作为第一特征 team1 = rows['Vteam'] team2 = rows['Hteam'] elo_team1 = GetElo(team1) elo_team2 = GetElo(team2) fea1 = [elo_team1] fea2 = [elo_team2+100] #球队统计信息作为剩余特征 for key, value in info.loc[team1].iteritems(): fea1.append(value) for key, value in info.loc[team2].iteritems(): fea2.append(value) #两队特征拼接 X.append(fea1 + fea2) return np.nan_to_num(X)
这段代码是用于生成机器学习预测所需的数据。其中,stat 指代每个球队的统计数据,info 指代每个球队的基本信息数据。对于每一支球队,先获取其当前的 Elo 等级分,然后将其作为特征向量的第一个特征。接着,将球队的统计数据以及基本信息数据作为剩余的特征。最后,将两支球队的特征向量拼接起来,作为预测数据的特征向量。值得注意的是,这里也使用了 np.nan_to_num 函数将特征向量中的 NaN 值替换为 0。
阅读全文