簡體   English   中英

哪種機器學習算法適合這種情況

[英]What Machine Learning Algorithm would be appropriate for this scenario

我有一個存儲症狀和適當葯物的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

您將使用統計分類器根據症狀學習最佳葯物。 然后,您將為其提供新的症狀,並且它將指示最好的葯物。

可能會有很多可用的症狀,因此算法需要能夠處理許多列。

我將從支持向量機開始,然后嘗試Logistic回歸。

查看RapidMiner。

我認為您最好的選擇是確定一個可以在您的環境中很好地集成的可靠庫。

一般來說:

  • 好的數據幾乎總是有幫助的:即對數據進行預處理以提取您認為對人類也有用的特征(“摘要”)。
  • 避免使用無用的功能:與許多可能會有所幫助的棘手功能相比,應少用一些好功能。
  • 請注意,不可能有一個神奇的黑匣子:您需要調整算法。 大多數ML算法都有幾個所謂的“超參數”,它們會影響算法的工作方式。 例如學習率; 平滑; 窗口大小等
  • 由於它不是一個黑匣子,因此可以找到一些機器學習入門,並至少對這些技術的工作原理和原理有基本的了解。 從ML算法中獲得完整的廢話很容易,因此,至少要對這些事情的工作原理有所了解,以便您可以適當地設置問題,這一點很重要。
  • 首先嘗試一些非常簡單的操作,例如最近鄰居(您需要一個距離度量)。 可能就足夠了。

盡管我最近沒有使用過,但是我相信如果NN不夠好,SVM仍然是您最好的選擇。 這不是時髦的東西,但它們通常都很好,無需太多調整。 但是,使用一個調優的弱算法(即一種您了解的文檔以及可以嘗試許多超參數變型的實現)幾乎總是比一個調優的強算法更好。 當然,如果您真的不知道自己在做什么。

換句話說:保持簡單,並確保在功能選擇階段使用許多常識。

看到您可能對此問題有很多未知變量,我建議使用貝葉斯網絡進行處理。

只是基於該簡短描述和先前使用醫學診斷軟件(例如WebMD等)的經驗而做出的猜測。

與大多數其他ML算法相比,貝葉斯網絡在處理許多未知變量時往往具有更高的“精度”(例如,神經網絡往往需要更准確的數據才能進行准確的回歸-因此提出了正確的建議)。

您需要對防止過度擬合,平滑和可能遇到的其他問題進行一些研究。

同樣,這不是一個確定的答案。 您沒有提供任何詳細數據供我做出基於假設的猜測。 我強烈建議您在決定之前進行更深入的研究。

您將需要自己嘗試數百種算法,預處理等

對於任何事物,沒有通用的“最佳算法”。

當其他人沒有您的數據時,尤其是不適用於數據驅動的事物。

因此, 嘗試一些方法 ,看看哪些對您有用 因為對他人有用的不一定一定對您有用,反之亦然。

此外,必須有經驗和專業知識才能獲得良好的結果。

這是一個分類問題:您已經標記了要用於訓練模型的數據。

當您將要遇到一些錯誤時,您應該決定是將假陽性結果還是假陰性結果最小化,並平衡算法來實現。

您可以使用一個簡單的決策三,並使用像某些醫生開出的真實處方那樣的測試集,查看性能如何。

請注意,您的處方可能需要一種以上的葯物或根本不需要。

您應該考慮的一個問題是,如果您服用某些葯物,您將無法服用其他葯物,並且患者可能會有一些過敏反應。 因此,建議您訪問http://en.wikipedia.org/wiki/Association_rule_learning和Prolog。

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

`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM