9

我在这里需要一些专家指导,了解什么是我解决问题的最佳方法。我研究了一些机器学习、神经网络和类似的东西。我已经调查了 weka,某种贝斯解决方案.. R.. 几种不同的东西。不过,我不确定如何真正进行。这是我的问题。

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

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

一旦我知道了编程方向,我就可以进行研究并弄清楚如何将我的想法转化为代码。但我的背景是并行编程,而不是这样的东西,所以我很想对此有一些建议和指导。

谢谢!

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

4

9 回答 9

8

听起来你是支持向量机的候选人。

去获取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 的模式识别和机器学习可能是第一本详细了解 libsvm 和 SVMlight 对您的数据所做的事情的教科书。

于 2009-02-07T01:31:17.270 回答
1

SVM 通常是最好的分类器。这完全取决于您的问题和您的数据。对于某些问题,其他机器学习算法可能会更好。我已经看到神经网络(特别是循环神经网络)更擅长解决的问题。这个问题没有正确答案,因为它高度依赖情境,但我同意 dsimcha 和 Jay 的观点,即 SVM 是正确的起点。

于 2009-02-08T02:05:09.137 回答
1

The book Programming Collective Intelligence has a worked example with source code of a price predictor for laptops which would probably be a good starting point for you.

于 2009-02-07T21:59:19.443 回答
1

如果你有一些分类数据——一堆样本问题及其正确答案——从训练一些简单的算法开始,比如 K-Nearest-Neighbor 和 Perceptron,看看是否有任何有意义的结果。在您知道是否可以简单或完全解决之前,不要费心尝试以最佳方式解决它。

如果您没有任何分类数据,或者没有太多分类数据,请开始研究无监督学习算法。

于 2009-02-07T01:30:59.830 回答
1

听起来任何类型的分类器都应该适用于这个问题:为一个实例(你的事件)找到最好的类(你的因变量)。一个简单的起点可能是朴素贝叶斯分类。

于 2009-02-07T01:32:59.763 回答
1

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

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

于 2009-02-07T01:35:12.647 回答
1

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

您还提到最近发生的事件应该更重要。如果是这种情况,您可以将最近事件的权重较高,将较旧的事件权重较低。请注意,事件的重要性不必随着时间线性增长。如果它以指数方式增长可能更有意义,所以你可以在这里玩这些数字。或者,如果您不缺少训练数据,也许您可​​以考虑丢弃太旧的数据。

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

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

  1. 尝试如何缩放自变量的值范围。比如说,通常是 [-1...1] 或 [0...1]。但是您可以尝试其他范围,看看它们是否有帮助。有时他们会这样做。大多数时候他们没有。
  2. 如果您怀疑存在具有较低维度的“隐藏”特征向量,例如 N << 30 并且它本质上是非线性的,那么您将需要非线性降维。您可以阅读内核 PCA 或最近的流形雕刻。
于 2009-05-20T08:35:53.537 回答
1

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

-Neural Nets
-SVMs
-Decision Trees(当我在做类似的问题时,这个对我来说非常有效)
-使用决策树/树桩
进行提升 -其他任何东西!

Weka 让事情变得如此简单,您确实可以获得一些有用的信息。我刚上了一门机器学习课,我用上面的算法做了你想要做的事情,所以我知道你在哪里。对我来说,决策树桩的提升效果非常好。(顺便说一句,boosting 实际上是一种元算法,可以应用于大多数监督学习算法,通常可以增强它们的结果。)

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

编辑:我认为 Yuval 是对的,我没有注意将您的分类价格值离散化的问题。但是,我不知道 Weka 中是否提供回归,您仍然可以很容易地将分类技术应用到这个问题上。您需要对价格值进行分类,例如漫画的多个价格范围,这样您就可以有一个离散的数字(如 1 到 10)来表示漫画的价格。然后你可以很容易地运行分类它。

于 2009-06-18T15:50:14.937 回答
1

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

于 2009-05-20T08:07:01.257 回答