我认为是机器学习问题的最佳方法[关闭]

Posted

技术标签:

【中文标题】我认为是机器学习问题的最佳方法[关闭]【英文标题】:Best approach to what I think is a machine learning problem [closed] 【发布时间】:2010-10-06 02:05:59 【问题描述】:

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

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

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

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

谢谢!

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

【问题讨论】:

我认为标签“分类”和“回归”是相互排斥的。要么是“分类”,要么是“回归”。不能两者兼有。 【参考方案1】:

听起来你是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 实际处理数据的详细信息的教科书。

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

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

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

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

    尝试如何缩放自变量的值范围。比如说,通常是 [-1...1] 或 [0...1]。但是您可以尝试其他范围,看看它们是否有帮助。有时他们会这样做。大多数时候他们不会。 如果您怀疑存在具有较低维度的“隐藏”特征向量,例如 N

【讨论】:

【参考方案9】:

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

-神经网络 -SVM -决策树(当我做类似问题时,这对我来说非常有效) - 使用决策树/树桩提升 - 还有什么!

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

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

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

【讨论】:

以上是关于我认为是机器学习问题的最佳方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从语义上学习 HTML 的最佳网站是啥? [关闭]

初学者通过 Python 学习屏幕抓取的最佳方式 [关闭]

为只读结构实现相等的最佳实践是啥? [关闭]

C# 中的机器学习库 [关闭]

为 C# 程序员学习 C++ 的最佳场所 [关闭]

大规模机器学习 [关闭]