2

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

4

7 回答 7

2

好吧,您的数据最终将如下所示:

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。

于 2013-02-21T20:28:40.490 回答
2

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

于 2013-02-21T14:11:36.307 回答
1

我认为您最好的选择是确定一个可以很好地集成到您的环境中的可靠库。

一般来说:

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

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

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

于 2013-02-21T14:21:33.750 回答
0

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

由于您将遇到一些错误,您应该决定是否最小化您的误报或误报结果并平衡您的算法以实现这一目标。

您可以使用简单的决策 3 并使用测试集(例如医生开出的一些真实处方)来查看性能如何。

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

您应该考虑的一个问题是,如果您服用某些药物,您就不能服用其他药物,并且患者可能会出现一些过敏。因此,我建议您查看http://en.wikipedia.org/wiki/Association_rule_learning和 Prolog。

于 2013-03-05T22:12:40.710 回答
0

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

这只是基于简要描述和以前使用医疗诊断软件(如 WebMD 等)的经验的猜测。

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

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

同样,这不是一个确定的答案。您没有提供任何详细数据供我根据假设以外的任何内容进行猜测。我强烈建议在决定之前进行更深入的研究。

于 2013-02-21T14:23:47.947 回答
0

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

没有任何通用的“最佳算法” 。

当其他人没有您的数据时,特别是不适用于数据驱动的事物。

所以,尝试一些事情,看看什么对你有用。因为对他人有用的不一定对你有用,反之亦然。

此外,为了获得良好的结果,经验和专业知识是必不可少的。

于 2013-02-21T14:33:33.137 回答
0

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

下面的例子是基于 ml-idea(机器学习思想)Github-ML-Idea

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

`

 //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>";

`

于 2018-10-03T15:44:47.390 回答