【问题标题】:What Machine Learning Algorithm would be appropriate for this scenario哪种机器学习算法适合这种情况
【发布时间】:2013-02-06 21:27:12
【问题描述】:

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

【问题讨论】:

  • 您可能会在stats.stackexchange.com获得更好的答案
  • 我冒昧删除了 MySQL 标签,因为这与数据库无关。
  • 您是在询问最佳算法或使用哪种软件?
  • 我问“我应该使用什么机器学习算法”。所以,这是我要求的最好的算法,而不是软件!
  • 不过,绝对不要使用 PHP 和 MySQL。两者都不擅长数字运算

标签: machine-learning data-mining expert-system


【解决方案1】:

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

【讨论】:

    【解决方案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。

    【讨论】:

    • 假设没有未知症状的数据可能比假设它们是“错误的”(意味着该人没有表现出症状)更安全。在具有如此数量的未知变量的情况下,回归可能不是这里的最佳选择。
    • 逻辑回归用于分类,而不是回归,尽管名称如此。
    【解决方案3】:

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

    一般:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

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

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

      【讨论】:

      • 您能否为您的贝叶斯网络精度假设提供参考?
      • 我是从个人知识来讲,除了ai-class.org(斯坦福大学关于人工智能的课程。他们在ml-class.org 也有机器学习课程)之外我真的没有参考资料.
      【解决方案5】:

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

      对于任何事物,没有通用的“最佳算法”。

      当其他人没有你的数据时,尤其是数据驱动的事情。

      所以,尝试多种方法,看看哪些适合您。因为对他人有用的不一定对你有用,反之亦然。

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

      【讨论】:

      • 这种情况我们能说“天下没有免费的午餐”吗?
      【解决方案6】:

      这是一个分类问题:您有想要用来训练模型的标记数据。

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

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

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

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

      【讨论】:

        【解决方案7】:

        尝试 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-09-22
          • 2012-06-08
          • 2012-12-06
          • 2016-02-24
          • 1970-01-01
          • 2015-06-29
          • 1970-01-01
          • 1970-01-01
          • 2017-10-29
          相关资源
          最近更新 更多