学習アルゴリズムの選択方法


21

いくつかのトレーニングデータに基づいてレコードを2つのカテゴリ(true / false)に分類するプログラムを実装する必要があり、どのアルゴリズム/方法論を検討すべきか疑問に思っていました。人工ニューラルネットワーク、遺伝的アルゴリズム、機械学習、ベイジアン最適化など、多くの選択肢があるようで、どこから始めればよいのかわかりませんでした。したがって、私の質問は次のとおり です。問題に使用する学習アルゴリズムをどのように選択すればよいですか。

これが役立つ場合、ここに私が解決する必要がある問題があります。


トレーニングデータ:
トレーニングデータは、次のような多くの行で構成されます。

Precursor1, Precursor2, Boolean (true/false)

実行
には、多くの前駆体が与えられます。
その後、

  1. さまざまなアルゴリズムからアルゴリズムAを選択し(またはアルゴリズムを動的に生成し)、これらの前駆体のあらゆる可能な組み合わせに適用し、放出される「レコード」を収集します。「レコード」は、いくつかのキーと値のペアで構成されています*。
  2. いくつかの素晴らしいアルゴリズムを適用し、これらのレコードを2つのカテゴリ(true / false)に分類します。

  3. 電車のデータと同じ形式のテーブルを生成します。
    Precursor1, Precursor2, Boolean

そして、プログラム全体は、正解/不正解の数に基づいて採点されます。

*:「レコード」は次のようになります(これが理にかなっていることを願っています)

Record         [1...*] Score
-Precursor1             -Key
-Precursor2             -Value

可能なキーの数は限られています。レコードにはこれらのキーの異なるサブセットが含まれます(一部のレコードにはkey1、key2、key3 ...があり、他のレコードにはkey3、key4 ...などがあります)。

実際に2つの学習が必要です。1つはステップ1です。前駆体のペアなどを調べて、比較のためにレコードを発行するために適用するアルゴリズムを決定するモジュールが必要です。もう1つは、ステップ2です。レコードのコレクションを分析し、それらを2つのカテゴリ(true / false)に分類するモジュールが必要です。

前もって感謝します!

回答:


16

キャレット」と呼ばれる「R」のパッケージがあります。これは「分類および回帰テスト」の略です。数十個の異なる学習アルゴリズムをデータに簡単に適用し、それらを相互検証してそれぞれの正確さを推定できるため、開始するのに適した場所だと思います。

以下は、独自のデータ/他のメソッドで変更できる例です。

install.packages('caret',dependencies = c('Depends','Suggests'))
library(caret)

set.seed(999)
Precursor1 <- runif(25)
Precursor2 <- runif(25)
Target <- sample(c('T','F'),25,replace=TRUE)
MyData <- data.frame(Precursor1,Precursor2,Target)
str(MyData)

#Try Logistic regression
model_Logistic <- train(Target~Precursor1+Precursor2,data=MyData,method='glm')

#Try Neural Network
model_NN <- train(Target~Precursor1+Precursor2,data=MyData,method='nnet',trace=FALSE)

#Try Naive Bayes
model_NB <- train(Target~Precursor1+Precursor2,data=MyData,method='nb')

#Try Random Forest
model_RF <- train(Target~Precursor1+Precursor2,data=MyData,method='rf')

#Try Support Vector Machine
model_SVM<- train(Target~Precursor1+Precursor2,data=MyData,method='svmLinear')

#Try Nearest Neighbors
model_KNN<- train(Target~Precursor1+Precursor2,data=MyData,method='knn')

#Compare the accuracy of each model
cat('Logistic:',max(model_Logistic$results$Accuracy))
cat('Neural:',max(model_NN$results$Accuracy))
cat('Bayes:',max(model_NB$results$Accuracy))
cat('Random Forest:',max(model_RF$results$Accuracy))
cat('Support Vector Machine:',max(model_SVM$results$Accuracy))
cat('Nearest Neighbors:',max(model_KNN$results$Accuracy))

#Look at other available methods
?train

別のアイデアは、データをトレーニングセットとテストセットに分割し、各モデルがテストセットで実行する方法を比較することです。必要に応じて、その方法を説明できます。


8

TバツY

Y

PY|Tバツ

これで、確率理論のルールを使用して、これを操作して計算方法を知っているものに変えることができます。したがって、ベイズの定理を使用すると、次のようになります。

PY|Tバツ=PY|TPバツ|YTPバツ|T

PY|TYY

Pバツ|YTPバツ|TYY¯Y

OY|Tバツ=PY|TバツPY¯|Tバツ=PY|TPY¯|TPバツ|YTPバツ|Y¯T

Y

Pバツ|YTθY

Pバツ|YT=PバツθY|YTdθ=Pバツ|θYYTPθY|YTdθY

Pバツ|θYYT=Pバツ|θYYTPθY|YTは、モデル内のパラメーターの事後分布です。これは、トレーニングデータが決定する部分です。そして、これはおそらくほとんどの作業が行われる場所です。

θYMθY

Pバツ|YT=PM|YTPバツ|θYMYTPθY|MYTdθY
PM|YT=PM|YPθY|MYPT|θYMYdθY

M

ここまでは、すべての結果が正確で最適です(これはオプション2です-素晴らしいアルゴリズムをデータに適用します)。しかし、これは困難な仕事です。現実の世界では、必要な数学は実際には実行できない場合があるため、妥協する必要があります。単純化できる数学は、PCでの時間を節約するため、正確な方程式を実行するときは、常に「実行」する必要があります。ただし、この最初のステップは重要です。これは「ターゲット」を設定し、何をすべきかを明確にするためです。そうでなければ、あなたは(あなたがそうであるように)それらの中から選択するものがないすべての潜在的なオプションの全体を残されます。

現在、この段階では、まだ意味をなさない「記号論理」の世界にいます。したがって、これらを特定の問題にリンクする必要があります。

  1. PM|Y
  2. PθY|MY
  3. PT|θYMY
  4. PθY|TMY
  5. PM|YT

Y¯

PMj|YT1

Pバツ|YTPバツ|θYjMjYTθYj=θ^Yj

これは、この種の問題に対する「標準的な」アプローチです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.