1

我们有一个基于网络的生产产品,允许用户对商品的未来价值(或需求)进行预测,历史数据包含大约 100k 个示例,每个示例大约有 5 个参数;

考虑一类称为预测的数据:

prediction {
    id: int
    predictor: int    
    predictionDate: date
    predictedProductId: int
    predictedDirection: byte  (0 for decrease, 1 for increase)
    valueAtPrediciton: float
}

以及衡量预测结果的配对结果类:

predictionResult {
    id: int
    valueTenDaysAfterPrediction: float
    valueTwentyDaysAfterPrediction: float
    valueThirtyDaysAfterPrediction: float
}

我们可以定义一个成功的测试用例,其中在预测时考虑方向和值时,如果任何两个未来值检查点是有利的。

success(p: prediction, r: predictionResult): bool = 
    count: int 
    count = 0

    // value is predicted to fall
    if p.predictedDirection = 0 then
       if p.valueAtPrediciton > r.valueTenDaysAfterPrediction then count = count + 1
       if p.valueAtPrediciton > r.valueTwentyDaysAfterPrediction then count = count + 1
       if p.valueAtPrediciton > r.valueThirtyDaysAfterPrediction then count = count + 1

    // value is predicted to increase
    else
       if p.valueAtPrediciton < r.valueTenDaysAfterPrediction then count = count + 1
       if p.valueAtPrediciton < r.valueTwentyDaysAfterPrediction then count = count + 1
       if p.valueAtPrediciton < r.valueThirtyDaysAfterPrediction then count = count + 1

    // success if count = 2 or count = 3
    return (count > 1)

在用户提交表单的那一刻,预测类中的所有内容都是已知的,而预测结果中的信息直到后来才知道;理想情况下,模型或算法可以从我们将算法应用于新预测的三年历史中推导出来,我们可以获得关于它是否会成功的概率(我会很高兴有一个布尔 Y/N 标志不管这是否有趣)。

我对机器学习知之甚少,我正在尝试通过材料来解决问题。但是,如果我能得到一些指导,那就太好了,这样我就可以研究和实践解决此类问题所需的确切方法。

谢谢

4

1 回答 1

8

特征

您需要做的第一件事是确定您将使用哪些信息作为证据来将用户的预测分类为准确与否。例如,您可以从简单的内容开始,例如做出预测的用户的身份,以及他们在对相同或相似商品进行预测时的历史准确性。这些信息将作为特征提供给下游机器学习工具,用于对用户的预测进行分类。

训练、开发和测试数据

您需要将 10 万个历史示例分成三个部分:训练、开发和测试。您应该将大部分数据(例如 80%)放入您的训练集中。这将是您用来训练预测准确度分类器的数据集。一般来说,用于训练分类器的数据越多,生成的模型就越准确。

另外两个数据集,开发和测试,将用于评估分类器的性能。您将使用开发集来评估分类器的不同配置的准确性或特征表示的变化。它被称为开发集,因为您在开发模型或系统时使用它来不断评估分类性能。

稍后,在您构建了一个在开发数据上实现良好性能的模型之后,您可能希望对您的分类器在新数据上的性能进行无偏估计。为此,您将使用测试集来评估分类器在数据上的表现,而不是您用于开发它的数据。

分类器/ML 包

在您拥有初步特征集并将数据拆分为训练、开发和测试后,您就可以选择机器学习包和分类器了。一些支持多种类型分类器的好包包括:

您应该使用哪种分类器取决于许多因素,包括您想要做出什么样的预测(例如,二元、多类)、您想要使用什么样的特征以及您想要使用的训练数据量。

例如,如果您只是对用户的预测是否可能准确进行二元分类,您可能想尝试支持向量机 (SVM)。他们的基本公式仅限于进行二元预测。但是,如果这就是您所需要的,它们通常是一个不错的选择,因为它们可以生成非常准确的模型。

但是,训练 SVM 所需的时间与训练数据的大小成比例很差。要对大量数据进行训练,您可能会决定使用诸如随机森林之类的东西。当随机森林和 SVM 在相同大小的数据集上进行训练时,随机森林通常会生成一个与 SVM 模型一样准确或几乎一样准确的模型。但是,随机森林可以让您使用更多的训练数据,并且使用更多的训练数据通常会提高模型的准确性

深层发掘

这里有一些关于其他开始机器学习的好地方的建议

于 2010-09-24T23:01:02.913 回答