9

我想在这里有一些专家指导什么是我最好的方法来解决问题。我调查了一些机器学习,神经网络和类似的东西。我已经调查过weka,某种baesian解决方案.. R ..几个不同的东西。不过,我不确定如何真正开始。这是我的问题。最好的方法,我认为是一个机器学习问题

我拥有或将拥有大量活动......最终大约有100,000人左右。每个事件由几个(30-50)独立变量和1个我所关心的因变量组成。在确定因变量的值时,一些自变量比其他自变量更重要。而且,这些事件与时间有关。今天发生的事情比10年前发生的事情更重要。

我希望能够为事件提供某种学习引擎,并让它预测因变量。然后,知道该事件的因变量(以及之前发生的所有事件)的真实答案,我希望能够训练后续的猜测。一旦我了解了编程方向,我可以进行研究并弄清楚如何将我的想法转化为代码。但我的背景是并行编程,而不是这样的东西,所以我很乐意就此提供一些建议和指导。

谢谢!

编辑:这里有一些关于我试图解决的问题的更多细节:这是一个定价问题。假设我想要预测随机漫画书的价格。价格是我唯一关心的事情。但是有很多自变量是可以想到的。它是超人漫画,还是Hello Kitty漫画。多大了?什么情况?等等。经过一段时间的训练后,我希望能够提供关于我可能正在考虑的漫画书的信息,并让它为漫画书提供合理的预期价值。好。所以漫画书可能是一个虚假的例子。但你得到了一般想法。到目前为止,从答案中,我正在对支持向量机和朴素贝叶斯进行一些研究。感谢您的所有帮助。

+1

我认为标签“分类”和“回归”是互斥的。它可以是“分类”,也可以是“回归”。它不能兼而有之。 – 2009-05-20 08:48:26

回答

1

如果你有一些机密数据 - 与他们的正确答案配对一堆样品的问题 - ,通过培训一些简单的算法,如K-近邻和感知,看到开始,如果任何有意义的东西出来吧。不要费心去试图解决它,直到你知道你是否可以简单地或完全解决它。

如果您没有任何机密数据,或不是很多,开始研究无监督学习算法。

8

听起来像你是Support Vector Machines的候选人。

去得到libsvm。阅读它们分发的“SVM分类实用指南”,并且很短。

基本上,你打算把你的事件,像格式化:

dv1 1:iv1_1 2:iv1_2 3:iv1_3 4:iv1_4 ... 
dv2 1:iv2_1 2:iv2_2 3:iv2_3 4:iv2_4 ... 

来看,它通过自己的SVM大规模实用程序,然后使用自己的grid.py脚本来寻找合适的内核参数。学习算法应该能够找出变量的不同重要性,尽管你也可以对事物进行加权。如果您认为时间会很有用,那么只需添加时间作为训练算法使用的另一个自变量(特征)即可。

如果LIBSVM不能完全得到你想要的精确度,考虑加紧SVMlight。只有稍微难以处理,还有更多的选择。

Bishop's Pattern Recognition and Machine Learning可能是看的什么LIBSVM和SVMlight实际上是与您的数据做细节的第一本。

+0

好主意,LIBSVM真棒。 – 2009-02-07 01:32:45

1

这听起来像任何一种分类应该针对此问题的工作:找到一个实例(你的事件)的最佳类(因变量)。一个简单的起点可能是Naive Bayes分类。

1

这绝对是一个机器学习问题。 Weka是一个很好的选择,如果你知道Java并且想要一个很好的GPL库,你需要做的就是选择分类器并写一些胶水。 R可能不会削减它的许多实例(事件,如你所说),因为它很慢。此外,在R中,您仍然需要查找或编写机器学习库,尽管这应该很容易,因为它是一种统计语言。

如果您认为您的特征(独立变量)是条件独立的(意思是独立给定因变量),朴素贝叶斯是一个完美的分类器,因为它是快速,可解释,准确且易于实现的。但是,有了100,000个实例和30-50个特性,您可能会实现一个相当复杂的分类方案,该方案可以捕获数据中的很多依赖性结构。你最好的选择可能是一个支持向量机(Weka中的SMO)或一个随机森林(是的,这是一个愚蠢的名字,但它帮助了随机森林。)如果你想要分类器易于解释的优点,即使在花费一些准确性,也许一个J48决策树可以直线运作。我建议不要使用神经网络,因为它们非常慢,并且在实践中通常不会比SVM和随机森林更好。

1

SVM通常是可用的最佳分类器。这完全取决于你的问题和你的数据。对于某些问题,其他机器学习算法可能会更好。我看到了神经网络(特别是递归神经网络)在解决问题时更好的问题。这个问题没有正确的答案,因为它具有高度的情境依赖性,但我同意dsimcha和Jay的观点,SVM是合适的开始。

1

我相信你的问题是一个regression问题,而不是分级问题。主要区别:在分类中,我们试图学习离散变量的价值,而在回归中,我们试图学习连续变量的价值。涉及的技术可能相似,但细节不同。 Linear Regression是大多数人首先尝试的。还有很多其他的回归技术,如果线性回归没有办法。

1

你提到有30-50独立变量,有些是为休息更重要。因此,假设您有历史数据(或称为训练集),您可以使用PCA(Principal Componenta Analysis)或其他降维方法来减少自变量的数量。这一步当然是可选的。根据情况,通过保存每个变量,您可能会获得更好的结果,但根据相关情况为每个变量添加权重。在这里,PCA可以帮助您计算变量的“相关”程度。

您也提到,在最近发生的事件应该是更重要的。如果是这样的话,你可以将最近的事件加重得更高,将更老的事件降低。请注意,事件的重要性不必随时间线性增长。如果它成指数增长,它可能更有意义,所以你可以在这里玩数字。或者,如果您不缺乏培训数据,也许您可​​以考虑放弃过时的数据。

就像Yuval F所说,这看起来更像回归问题而不是分类问题。因此,您可以尝试SVR(支持向量回归),它是SVM(支持向量机)的回归版本。

一些其他的东西,你可以尝试是:

  1. 你如何扩展您的自变量的取值范围玩耍。说,通常[-1 ... 1]或[0 ... 1]。但你可以尝试其他范围,看看他们是否有帮助。有时他们会。大多数时候他们没有。
  2. 如果您怀疑存在具有较低维度的“隐藏”特征向量,例如N < < 30并且它本质上是非线性的,则需要非线性降维。您可以阅读内核PCA或最近更多的多种雕刻。
1

你所描述的是一个经典的分类问题。在我看来,当你有像Weka这样的工具时,为什么要编写新的算法。如果我是你,我会通过一系列监督学习算法(我不完全了解乳清人使用10倍(或k倍)交叉验证时首先建议无监督学习,因为这很明显是一个分类问题) ,如果我记得,这是Weka中的默认值,并且看看你得到了什么结果!我会尝试:

-Neural篮网
-SVMs
-Decision树(这个工作对我很好,当我在做一个类似的问题)
与决策树-Boosting /树桩
其他-Anything !

Weka让事情变得如此简单,你真的可以得到一些有用的信息。我刚刚参加了一个机器学习课程,我完全按照上面的算法做了你想做的事情,所以我知道你在哪里。对于我来说,决策失败的推动效果非常好。 (顺便说一句,boosting实际上是一种元算法,可以应用于大多数有监督的学习算法以通常提高其结果。)

使用决策树(如果您使用ID3或类似变种)根据他们对数据进行区分的顺序来选择要分割的属性 - 换句话说,哪些属性基本上决定了分类的速度。因此,您可以在运行算法后查看树,并查看漫画书的哪个属性最能确定价格 - 它应该是树的根。

编辑:我认为尤瓦尔是对的,我没有注意到分类的价格价值的离散化问题。但是,我不知道Weka是否有回归,您仍然可以很容易地将分类技术应用于此问题。您需要为漫画的价格范围制定多个价格范围,以便您可以拥有表示漫画价格的离散数字(如1到10)。然后你可以很容易地运行分类它。