所以我是学习 Python 的超级新手,目前在 Udemy 的繁重课程中已经过了一半多一点,我想给自己一个挑战,在此过程中应用技能。我从我所在的联盟中抓取并连接了一个数据框,其中包含 10 年的梦幻足球选秀,并想看看是否有一种方法可以根据每支球队如何选拔技能位置球员来预测获胜者。我知道整个赛季都会有很多变数(伤病、交易、弃权线拾音器等),但我这样做只是为了好玩,并将我正在学习的技能锤炼回家。
我遇到的问题是数据框是一个多索引(我相信?),首先按年份、球队、选秀编号、选秀选择以及 1 或 0 分组,以表示输赢。它看起来像这样:
这是我用来尝试运行模型的代码。
from sklearn.model_selection import train_test_split
X = stackedDF.drop(['Win','Team'],axis=1)
y = stackedDF['Win']
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3)
from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression()
logmodel.fit(X_train,y_train)
predictions = logmodel.predict(X_test)
我在 Jupyter 中收到以下错误:
ValueError: 无法将字符串转换为浮点数:'QB'
我猜这意味着我需要将每个技能位置转换成一个数字,也许是通过字典?例如 {'QB':'1','RB':'2'} 等...
我离开这里了吗?希望这不是一个蹩脚的问题,我对此仍然非常陌生,并且很高兴学习 Python。谢谢!
答案 0 :(得分:1)
Scikit-learn 与大多数其他机器学习工具一样,都希望将数值作为输入,因为算法应该如何处理字符串非常模糊。因此,为了避免混淆并使您的代码在这种情况下工作,最好的选择是单热编码,更多细节here。一般要点是,您的数据框将为每种职位类型添加额外的列,并且当团队获得职位时,它的值为 1,否则为 0。
在 Pandas 中这样做很简单 - 使用 get_dummies
方法并提供数据帧的名称和需要编码的列:
ff_data = pd.DataFrame()
ff_data = pd.get_dummies(ff_data, columns=['Pick'])
# And then you continue as before\
X = ff_data.drop(['Win'], axis=1)
y = ff_data.Win
# etc