代码之家  ›  专栏  ›  技术社区  ›  akaphenom

新手:从哪里开始,给定一个问题来预测未来的成功与否

  •  1
  • akaphenom  · 技术社区  · 15 年前

    我们有一个基于Web的产品,允许用户预测商品的未来价值(或需求),历史数据包含大约10万个例子,每个例子有大约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标志,说明这是否有趣)。

    我对机器学习不太了解,我正努力通过材料来学习。但如果我能有一些指导,这样我就可以研究和实践我需要解决的问题。

    谢谢你

    1 回复  |  直到 15 年前
        1
  •  8
  •   dmcer    15 年前

    特征

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

    培训、开发和测试数据

    您将希望将您的100K历史示例分为三部分:培训、开发和测试。你应该把大部分数据,比如80%放在 训练 集合。这将是用来训练预测准确度分类器的数据集。一般来说,用来训练分类器的数据越多,得到的模型就越精确。

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

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

    分类器/ml包装

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

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

    例如,如果您只是要对用户的预测是否准确进行二进制分类,那么您可能需要尝试 support-vector-machines (SVMs) . 他们的基本公式仅限于做二元预测。但是,如果这就是您所需要的,那么它们通常是一个很好的选择,因为它们可以产生非常精确的模型。

    然而,训练支持向量机所需的时间与训练数据的大小关系不大。为了训练大量的数据,您可能决定使用 random forests . 当随机林和SVM在相同大小的数据集上进行训练时,随机林通常会生成与SVM模型一样精确或几乎一样精确的模型。但是,随机林允许您使用更多的培训数据,并且使用更多的培训数据将 typically increase the accuracy of your model .

    深入调查

    以下是一些关于机器学习其他好地方的建议

    推荐文章