我认为是机器学习问题的最佳方法

时间:2009-02-07 00:45:17

标签: machine-learning modeling neural-network classification regression

我想在这里找到一些专家指导,了解解决问题的最佳方法。我研究过一些机器学习,神经网络等等。我调查了weka,某种贝叶斯解决方案...... R ..几个不同的东西。不过,我不知道该怎么做。这是我的问题。

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

我希望能够为某种学习引擎提供一个事件,并让它预测因变量。然后,知道这个事件的因变量的真实答案(以及之前出现的所有事件),我希望能够训练后续的猜测。

一旦我知道要编程的方向,我就可以进行研究并弄清楚如何将我的想法变成代码。但我的背景是并行编程而不是这样的东西,所以我很乐意就此提出一些建议和指导。

谢谢!

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

9 个答案:

答案 0 :(得分: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-scale实用程序运行它,然后使用他们的grid.py脚本来搜索适当的内核参数。学习算法应该能够找出变量的不同重要性,尽管你也可以加权。如果您认为时间有用,只需将时间添加为另一个独立变量(功能)供训练算法使用。

如果libsvm无法提供您想要的准确度,请考虑加紧SVMlight。只有这么难以处理,还有更多的选择。

Bishop's Pattern Recognition and Machine Learning可能是第一本关于libsvm和SVMlight实际上对您的数据做什么的详细信息的教科书。

答案 1 :(得分:1)

如果您有一些分类数据 - 一堆样本问题与正确的答案配对 - 首先要训练一些简单的算法,如K-Nearest-Neighbor和Perceptron,看看是否有任何有意义的问题。在你知道你是否可以简单地解决它之前,不要试图以最佳方式解决它。

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

答案 2 :(得分:1)

听起来任何类型的分类器都应该适用于此问题:为实例(您的事件)找到最佳类(您的因变量)。一个简单的起点可能是Naive Bayes分类。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

本书Programming Collective Intelligence有一个工作示例,其中包含笔记本电脑价格预测器的源代码,这可能是您的良好起点。

答案 5 :(得分:1)

SVM通常是最好的分类器。这一切都取决于您的问题和您的数据。对于某些问题,其他机器学习算法可能会更好。我已经看到了神经网络(特别是递归神经网络)更好地解决的问题。这个问题没有正确的答案,因为它在很大程度上依赖于情境,但我同意dsimcha和Jay的观点,即SVM是正确的起点。

答案 6 :(得分:1)

我认为您的问题是regression问题,而不是分类问题。主要区别:在分类中,我们试图学习离散变量的值,而在回归中,我们试图学习连续变量的值。涉及的技术可能类似,但细节不同。 Linear Regression是大多数人首先尝试的。如果线性回归不起作用,还有很多其他的回归技术。

答案 7 :(得分:1)

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

您还提到最近发生的事件应该更重要。如果是这种情况,您可以将最近的事件加权,将较旧的事件加权。请注意,事件的重要性不必按时间线性增长。如果它呈指数级增长可能更有意义,所以你可以在这里玩数字。或者,如果您不缺乏培训数据,也许您可​​以考虑删除太旧的数据。

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

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

  1. 了解如何缩放自变量的值范围。比方说,通常是[-1 ... 1]或[0 ... 1]。但你可以尝试其他范围,看看它们是否有帮助。有时它们会这样做大多数时候他们没有。
  2. 如果您怀疑存在具有较低维度的“隐藏”特征向量,则说N <&lt; 30,它本质上是非线性的,你需要减少非线性维数。你可以阅读内核PCA或最近的多种雕刻。

答案 8 :(得分:1)

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

- 神经网络 -SVMs
-Decision Trees(当我做类似的问题时,这个对我来说非常好) - 使用决策树/树桩进行扫描 - 别的什么!

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

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

编辑:我认为Yuval是对的,我没有注意为您的分类价值离散化的问题。但是,我不知道Weka中是否有回归,您仍然可以很容易地将分类技术应用于此问题。你需要制作价格类的类别,例如,漫画的一些价格范围,这样你就可以得到代表漫画价格的离散数字(如1到10)。然后你可以轻松地对其进行分类。