数据挖掘-什么机器学习算法适合这种情况



我有一个PHP/MySQL应用程序,用于存储症状和适当的药物。我应该使用什么机器学习算法来预测药物的任何症状。此外,培训集的形式是什么?

在ML中,对于这种情况没有"最佳解决方案",几乎总是有这种方法/数据满足我的需求吗?因此,尝试使用简单的ML技术(例如决策树),如果不起作用,请尝试更复杂的技术。如果不起作用,请尝试更改数据,。。。

好吧,你的数据最终会是这样的:

row_id  symptom_x symptom_y degree_of_symptom_z ... best_drug
1       false     true      0.8                     drug_x
2       true      null      0.0                     drug_q

你将使用统计分类器根据症状来学习最佳药物。然后你会给它喂食新的症状,它会指示最好的药物。

可能会有很多可用的症状,所以算法需要能够处理许多列。

我会从支持向量机开始,也会尝试逻辑回归。

查看RapidMiner。

我认为您最好的选择是确定一个在您的环境中集成良好的实体库。

一般情况下:

  • 好的数据几乎总是有帮助的:即预处理数据以提取你认为对人类也有用的特征("摘要")
  • 避免无用的功能:喜欢少数好的功能,而不是那些可能会有所帮助的棘手功能
  • 请注意,不太可能出现神奇的黑盒:你需要调整你的算法。大多数ML算法都有几个所谓的"超参数",这些参数会影响算法的工作方式;例如学习率;平滑;窗口大小等
  • 既然这不是一个黑匣子,那就找一些机器学习的介绍,至少对这些技术的工作方式和原因有一个基本的了解。从ML算法中很容易得到完全的废话,所以至少对这些东西的工作原理有一些了解是很重要的,这样你就可以适当地设置你的问题
  • 先尝试一些真正简单的东西,比如最近的邻居(你需要一个距离度量)。这可能已经足够了

虽然我最近没有使用过SVM,但我相信如果NN不够好的话,SVM仍然可能是你的最佳选择。这不是时髦的新东西,但它们通常都很好,没有太多的调整。但是,使用一个调整良好的弱算法(即一个有你理解的文档的算法,以及一个可以尝试大量超参数变化的实现)几乎总是比使用调整不佳的强算法更好。当然,如果你真的不知道自己在做什么。

换句话说:保持简单,并确保在特征选择阶段使用大量常识。

看到这个问题可能有很多未知变量,我建议使用贝叶斯网络来处理它。

这只是基于简短描述和之前使用医学诊断软件(如WebMD和其他软件)的经验的猜测。

与大多数其他ML算法相比,贝叶斯网络在处理大量未知变量时往往具有更高的"精度"(例如,神经网络往往需要更准确的数据才能进行准确的回归,从而提出准确的建议)。

你需要对过度拟合的预防、平滑和其他可能遇到的问题进行一些研究。

同样,这不是一个明确的答案。除了假设之外,你没有提供任何详细的数据让我进行猜测。我强烈建议在做出决定之前进行更深入的研究。

您需要自己尝试数百种算法、预处理等

对于任何,都没有通用的"最佳算法"。

尤其是当其他人没有你的数据时,不要使用数据驱动的东西。

因此,尝试许多东西,看看对您有效。因为对别人有效的东西不一定对你有效,反之亦然。

此外,要想取得好成绩,必须有经验和专业知识。

这是一个分类问题:您已经标记了要用于训练模型的数据。

由于你会有一些错误,你应该决定是尽量减少你的假阳性还是假阴性结果,并平衡你的算法来实现这一点。

你可以使用一个简单的决策三,看看表现如何,使用一个测试集,就像医生开出的一些真正的处方一样。

请注意,您的处方可能需要不止一种药物,或者根本不需要。

你应该考虑的一个问题是,如果你服用了一些药物,你就不能服用其他药物,而且患者可能会有一些过敏。出于这个原因,我建议你看看http://en.wikipedia.org/wiki/Association_rule_learning和Prolog。

尝试K个最近的邻居,我认为这是一个分类问题。你的处方可能需要不止一种或多种药物,另一个问题是,机器可能并不总是准确的,因为它将有机会决定那些没有经过训练的药物。你需要一个非常详细的数据集。

下面的例子是基于ml理念(机器学习理念)Github-ml理念

尽管没有完美的算法,但只要正确地准备好数据就可以了。

`

 //symptoms
  //1 = 'Symptom 1';
  //2 = 'Symptom 2';
  //3 = 'Symptom 3';
  //4 = 'Symptom 4';
$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]];
$labels = ['drug a', 'drug A', 'drug x', 'drug x', 'drug a', 'drug x'];
$classifier = new KNearestNeighbors(6, true);
$classifier->train($samples, $labels);
$data = $classifier->predict([2, 1]);
echo "<pre>";
print_r($data);
echo "</pre>";

`

最新更新