支持向量机;训练数据不包含目标



我在试着预测一个球迷是否会去看一场体育赛事。我的数据(pandas DataFrame)包括球迷信息(人口统计等),以及他们是否参加了最近10场比赛(g1_attend - g10_attend)。

fan_info age neighborhood g1_attend g2_attend ... g1_neigh_turnout 
2717     22   downtown      0         1               .47
2219     67   east side     1         1               .78

我怎么能预测如果他们要参加g11_attend,当g11_attend不存在于数据框架?

最初,我打算研究在scikit-learn中应用一些基本模型进行分类,可能只是在DataFrame中添加一个g11_attend列。出于某种原因,这一切让我很困惑。我现在想,把它当作一个时间序列会更合适,我正在研究其他模型。

你是对的,你不能只是添加一个新的类别(即输出类)到分类器——这需要一些做时间序列的东西。

但是在时间序列上使用分类器有一种相当标准的技术。断言(条件)时间独立性,并使用窗口。

简而言之,我们将假设某人是否参加游戏仅取决于我们捕获的变量,而不是其他时间因素(或其他一般因素)。例如,我们假设我们可以翻译他们在一年中参加的比赛历史,并且它仍然是相同的概率。这显然是错误的,但我们还是这样做了,因为机器学习技术将处理数据中的一些噪声。这显然是错误的,因为有些人会因为太冷等原因而避免在冬天参加比赛。

现在在分类器上:

我们有输入,我们只想要一个输出。基本的想法是,我们要训练一个模型,如果输入他们是否参加了前9场比赛,则预测他们是否会参加第10场比赛

因此输出输入为1 age, neighbourhood, g1_attend, g2_attend,…g9_attend输出g10_attend——一个二进制值。

这给我们训练数据。

然后,当需要测试它时,我们移动所有东西:将g1_attend切换为g2_attend,将g2_attend切换为g3_attend和…g10_attendg9_attend。然后我们的预测输出将是g11_attend

你也可以用不同的窗口大小训练几个模型。例如,只看最近两场比赛,预测第三场的出勤率。这给了你更多的训练数据,因为你可以。g1,g2 -> g3g2,g3 -> g4等。

你可以训练一组不同大小的窗口,并用一些集成技术合并结果。

特别是训练g1,...,g8 -> g9是一个好主意,然后用它来预测g10(使用g2,...,g9作为输入)检查是否工作

我建议将来您可以在交叉验证中询问这些问题。虽然这可能是关于堆栈溢出的主题,但它在那里更有主题,并且有更多的统计学家和机器学习专家。


1我建议现在放弃fan_id作为输入。我只是不认为这对你有任何帮助,但解释为什么是这个问题超出了范围。

最新更新