My pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ball私のビリヤード台はナインボール用にセットされていますで以前の投稿、機械学習の定義と、 JMPここでは、私が収集したいくつかの実際のデータに機械学習を適用します。
理解しやすいため、私のお気に入りの 2 つの機械学習アルゴリズムは、K 最近傍アルゴリズムとナイーブ ベイズです。 良好な結果を得るためにアルゴリズムが複雑である必要はなく、一部の問題については、これら 2 つのアルゴリズムが迅速かつ正確に実行されます。
K Nearest Neighbors は、まさにその名の通りです。 このアルゴリズムは、データセット内のどの観測値が予測したい点に最も近い「K」であるかを計算します。 次に、予測は、これらの最も近い点の応答の平均 (応答変数が連続型の場合)、または最も頻度の高いカテゴリ (応答変数がカテゴリ型の場合) のいずれかになります。 通常、K の範囲を当てはめ、相互検証を使用して、どの K が最良の予測パフォーマンスを提供するかを選択します。
Naïve Bayes がなぜ「Naïve」と呼ばれているのかとよく質問されます。この名前は、このアルゴリズムを使用するときに行われる重要な前提が、すべての予測子変数が互いに独立しているという事実に由来しています。 多くの場合、それは単純な想定です。 したがって、この方法は、相互に相関性の高い予測子変数がある場合よりも、その仮定が真実に近い場合にパフォーマンスが向上する傾向があります。 予測を行うには、観察された予測子変数が与えられた場合の応答のカテゴリー (勝ちまたは負けなど) の確率が、そのカテゴリーが応答であるトレーニング データ内の値を観察する確率に基づいて計算されます。 計算された確率がより高いカテゴリが予測カテゴリとなります。
これら 2 つのメソッドの実際の動作を見てみましょう。
誰がより優れていますか?
夫と私はビリヤードが大好きで、仕事から帰宅するとほぼ毎日ビリヤードをしています。 1 年ほどプレーした後、私たちはほぼ互角で、おそらく私の方がわずかに優れていると考えていました。 私は「この質問には答えられます!」と言いました。
そこで、2018 年 1 月 1 日から結果の追跡を開始しました。 私は、月、曜日、日付、勝ったゲームの数、プレイしたゲームの数、私はそのゲーム セッションと、ビリヤードのどのゲーム (8 ボールまたは 9 ボール) に勝ちました。 これは最初にスプレッドシートに作成されていたため、ゲーム全体の勝率とセッションの勝率を計算する列もあります。
ありがたいことに、Excel ファイルを JMP ホーム ウィンドウにドラッグするだけで、Excel インポート ウィザードが魔法のように働いて JMP データ テーブルを作成します。 セッションを成功させるためにいくつかの調整を加えますか?名目上の変数と、勝ったゲーム数とプレイされたゲーム数を順序変数に指標化すれば、次の夜のプール制覇を予測する準備ができました。
Imported dataImported dataImported dataImported dataインポートされたデータ準備が整っていないことを除けば。 K 最近傍法で、最適な K を決定するために相互検証が使用されると述べたことを覚えていますか? 現在、トレーニングと検証のための列がありません。 K Nearest Neighbors と Naïve Bayes にはどちらも、プラットフォームの立ち上げ時にデータの一部を検証として使用するオプションがありますが、2 つの方法を比較したい場合は、両方に同じトレーニング セットを使用する必要があります。 幸いなことに、JMP では Make Validation Column ユーティリティを使用してここでも対応できます。
ユーティリティには、検証列を作成する方法に関するいくつかのオプションがあります。 応答変数が非常に不均衡である場合、これは失敗がまれである場合や不正なトランザクションを探している場合に起こりますが、階層化ランダム オプションを使用して、トレーニング セットと検証セットに両方の応答を含むデータがあることを確認したいと思います。 この場合、すべての列のバランスがかなり良くなっていることがわかっているため、トレーニング セットまたは検証セットからカテゴリが完全に欠落する可能性は低いです。 したがって、「固定ランダム」オプションを使用して検証列を作成することにします。 将来的にこの特定の列を再度再現できるように、ランダム生成のシードを設定することもできますが、この場合は必要ないと思います。
分析タイム!
検証列を手に入れたので、[分析] > [予測モデリング] メニューで K 最近傍プラットフォームを起動できます。 セッション勝利?は私の応答変数であり、私が予測したいもの、つまり私の誕生日である 10 月 13 日土曜日についてです。 [注: この記事は誕生日前に書き始めました。ここで行われた予測が正しかったかどうかを確認するには、最後まで読んでください!] 月、日、ゲーム、プレイド (プレイされたゲーム数) が私の要素です。 日付は役に立たないと思います。主に、各月と日付の組み合わせは 1 回ずつ発生するためです (複数のセッションをプレイした週末の数日を除く)。 また、プラットフォームにデフォルトの 10 ではなく最大 25 の最近傍を計算させるつもりです。
KNN Launch DialogKNN Launch DialogKNN Launch DialogKNN Launch DialogKNN 起動ダイアログ
レポートのモデル選択部分では、1 ~ 25 の近傍を持つモデルのトレーニング セットと検証セットのそれぞれで計算された誤分類率を追跡します。 選択ラインは K = 20 に設定されます。これは、検証セット上で誤分類率が最小になります。 以下の表は、検証セット内の観測値の 44% 強が誤って分類されたことを示しています。 混同マトリックスは、実際に勝ちまたは負けとほぼ同数の観測値が誤って分類されたことを示しています。 モザイク プロットは、混同行列を視覚的に表現します。
KNN ReportKNN ReportKNN ReportKNN ReportKNNレポート誤分類率はそれほど大きくありませんが、私の予測変数が本当にそれほど予測できるかどうかはわかりません。 この記事を 1 月 1 日に書こうと思っていたら、その日がどれだけストレスフルだったか、ゲームを飲みながら大人の飲み物を楽しんでいたかどうか、そしておそらく睡眠時間などを記録していたかもしれません。前の晩にあった! したがって、最適なモデルを提供しなかったアルゴリズムを責めるつもりはありません。
予測式をデータ テーブルに保存するので、ナイーブ ベイズを使用して同じデータを当てはめた後、自分の誕生日について予測できるようになります。
NB Launch DialogNB Launch DialogNB Launch DialogNB Launch DialogNB起動ダイアログ
最初に気づくのは、検証セットの誤分類率が 40% 強と少し小さいことです。 混同行列は、K 最近傍モデルよりもナイーブ ベイズ モデルを使用した検証セットで 7 つ多くの観測値を正しく分類したことを示しています。 最後に、各セットの ROC 曲線が得られます。 検証セットでは、曲線下面積 (モデルの適合の品質を示すもう 1 つの尺度) は 0.5676 です。 これは素晴らしいことではありませんが、AUC ≈ 0.5 が得られるランダムな推測よりはまだ優れています。
NB ReportNB ReportNB ReportNB ReportNBレポート
誕生日プールのパフォーマンスを予測するために、予測式をデータ テーブルに再度保存します。
ナインボールでは「ベスト オブ 9」シリーズをプレイするため、何試合プレイするかは事前にわかりません。 5対0の敗走でもすぐに勝てるのでしょうか? それとも勝者を決めるには9試合すべてが必要になるのでしょうか? プレイされる可能性のあるゲーム数 (5 ~ 9) ごとに行を追加し、モデルが何を予測するかを確認します。
Added rows for predictionAdded rows for predictionAdded rows for predictionAdded rows for prediction予測用の行を追加しました
この日に関しては、シリーズが9試合まで行かない限り、私が勝者になるべきだということで両モデルが同意しました。 その場合、K 最近隣者は私が負けると予測します。 幸せな誕生日になりそうです!
数日後、私の誕生日が到来し、私は勝つという知識を身につけてゲームルームに入りました。 1時間ほど後、私は3勝5敗で意気消沈して退場した。 少なくともケーキはもらったよ!
どうしたの?
モデルによれば、物事は私にとってとても良いものに見えました! どうして負けてしまったのでしょうか? ナイーブ ベイズ モデルを使用すると、最終的な予測に加えて推定勝利確率を確認する機会が得られます。 あまり期待を持たずに、そちらも見ておいたほうが良さそうです。 確率の式をデータ テーブルに保存したところ、勝つと予測されていたものの、最高確率が 75% 弱、最低確率が 60% 強であることが明らかになりました。 つまり、夫が勝つ可能性はかなり高かったということです。 そして、最終的な予想だけを見て、誕生日が当たる実際の可能性を誤って判断してしまいました。 次回賭けをする前に、入手可能なすべての情報を確認するよう警告として受け取ります。
Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]勝つ確率。 [注: 一部のデータ テーブル列はスペースを確保するために非表示になっています。]
別れのショット
これらのモデルについて最後に一言: モデル内の変数が応答の予測性をあまり高くしていない場合、最も高度なアルゴリズムであっても適切なパフォーマンスを発揮することはできません。 これらのデータとその高い誤分類率でそれが実際に起こっていることがわかります。 前に述べたように、これはアルゴリズムの欠陥ではなく、私が収集したデータの欠陥です。 合理的な予測子を備えたほとんどのモデルは、ここで説明したモデルよりもはるかに成功しています。 おそらく 2019 年には、データ収集にさらに情報を追加して、これらのモデルを再検討することになるでしょう。
さらに、ビリヤードは、多くの (おそらくほとんどの) 通常の機械学習のアプリケーションよりも、人間の要素が結果に大きな役割を果たすスポーツ イベントです。 大学やプロのフットボールの試合では、秋のほぼ毎週末、弱者が番狂わせを起こすこの展開を見ることができます。 これは「任意の日曜日」と呼ばれることもあります。 しかし、これらの確率を考慮すると、多くの試行を経て長期的には、私は賭けに勝つでしょう。ほとんどの場合、贔屓のフットボールチームが勝ち、スポーツベッターが儲けるのと同じです。 そして実際、誕生日以降の数日間を見ると、約 60% の確率で勝ちました。