我们有一个基于生产网络的产品,允许用户对商品的未来价值(或需求)做出预测,历史数据包含大约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)
在用户提交表单的那一刻,预测类中的所有内容都是已知的,并且之后才知道predictionResult中的信息.理想情况下,模型或算法可以从我们的三年历史中得出,algorythm应用于一个新的预测,我们可以得到一个关于它是否会成功的概率(我会对布尔Y/N标志感到满意)这有趣还是没有).
我对机器学习知之甚少,我正试图通过材料.但如果我能得到一些指导,那将是很好的,所以我可以研究和实践我需要解决这样的问题.
谢谢
特征
您需要做的第一件事是确定将用作证据的信息将用户的预测分类为准确与否.例如,您可以从简单的事情开始,例如进行预测的用户的身份,以及在对相同或类似商品进行预测时的历史准确性.此信息将作为将用于对用户预测进行分类的功能提供给下游机器学习工具.
培训,开发和测试数据
您需要将您的100k历史示例分为三个部分:培训,开发和测试.您应该将大部分数据(例如80%)放在训练集中.这将是您用于训练预测精度分类器的数据集.一般而言,用于训练分类器的数据越多,得到的模型就越准确.
另外两个数据集,即开发和测试,将用于评估分类器的性能.您将使用开发集来评估分类器的不同配置或特征表示中的变体的准确性.它被称为开发集,因为您在开发模型或系统时使用它来持续评估分类性能.
之后,在您构建了一个在开发数据上获得良好性能的模型之后,您可能希望无偏估计分类器对新数据的执行情况.为此,您将使用测试集来评估分类器对数据的处理程度,而不是您用于开发数据的数据.
分类器/ ML包
在获得初步功能集并将数据拆分为培训,开发和测试之后,您就可以选择机器学习包和分类器了.一些支持多种类型分类器的好包包括:
Weka(Java)
快速采矿者(Java)
橙色(Python)
您应该使用哪种分类器取决于许多因素,包括您想要进行哪种预测(例如,二进制,多类),您想要使用哪种类型的功能,以及您想要使用的训练数据量.
例如,如果您要对用户的预测是否准确进行二进制分类,您可能需要尝试支持向量机(SVM).他们的基本表述仅限于做二元预测.但是,如果这就是你所需要的,那么它们通常是一个很好的选择,因为它们可以产生非常精确的模型.
但是,训练SVM所需的时间与训练数据的大小相差很大.要训练大量数据,您可能决定使用随机森林之类的东西.当随机森林和SVM在相同大小的数据集上进行训练时,随机森林通常会生成一个与SVM模型一样准确或几乎准确的模型.但是,随机森林可以让您使用更多的训练数据,使用更多的训练数据通常会提高模型的准确性.
深层发掘
以下是一些指向其他开始使用机器学习的好地方的建议
Andrew Ng在斯坦福大学的机器学习课程的视频讲座
Andrew Moore的机器学习教程
哈斯蒂的统计学习要素 - 哈斯蒂在这里发布了这本书的PDF .