序文 前回の記事「機械学習アルゴリズムの実践: 決定木」では、決定木の実装についてまとめました。この記事では、単純ベイズ分類器を段階的に実装し、SMS スパム コーパスのデータを使用してモデルをトレーニングし、スパム メッセージをフィルタリングし、最後に分類エラー率を計算します。 文章 決定木分類や k 最近傍分類アルゴリズムとは異なり、ベイズ分類は主に確率論の知識に依存して、各タイプに属する提供されたデータの条件付き確率を比較し、それらを個別に計算し、条件付き確率が最も高いカテゴリが最適なカテゴリであると予測します。もちろん、サンプルの数が増えれば増えるほど、カウントできるさまざまな種類の特徴値の分布がより正確になり、この分布を使用して行われる予測もより正確になります。 ベイズ基準 単純ベイズ分類器の中核となるのはベイズ基準であり、次の式で表されます。 この式は、結合確率によってリンクされた 2 つの交換可能な条件付き確率の関係を表しており、p(B|A) がわかっている場合に p(A|B) を計算できます。ベイジアン モデルは、ベイジアン基準を使用して、さまざまなカテゴリ条件下でのサンプルの条件付き確率を計算し、最も高い条件付き確率を持つタイプを分類予測結果として取得します。 分類に条件付き確率を使用する ここで、条件付き確率による分類方法を簡単に紹介します。ある人物の背中を見て、その特徴(データ)に基づいて性別(カテゴリ)を判断したいとします。その特徴とは、髪が長いかどうか、身長が170cm以上かどうか、足が細いかどうか、スカートを履いているかどうかなどです。後ろの図を見ると、上記の特徴を記述する特徴ベクトルが得られます(1ははい、0はいいえを意味します):ω=[0,1,1,0] ベイズ分類は、次の 2 つの条件付き確率を比較します。
p(boy|ω)>p(girl|ω)の場合、その人は男の子とみなされ、そうでない場合は女の子とみなされます。 では、p(男|ω)をどのように見つけるのでしょうか? これにはベイズ基準が必要です。 ベイズの基準によれば、 もっと分かりやすく言うと、 特徴が互いに独立している場合(条件付き独立仮定)、上記の条件付き確率は次のように書き直すことができます。 このようにして、現在の後ろ姿が男の子か女の子かの条件付き確率を計算できます。 独自のベイズ分類器を実装する ベイズ分類器の実装は非常に簡単です。以下では、テキスト分類を目的とした単純ベイズテキスト分類器を Python を使用して実装します。 条件付き確率を計算するには、異なるカテゴリにおける各特徴の条件付き確率と、そのタイプの周辺確率を計算する必要があります。そのためには、大量のトレーニング データの統計を通じて近似値を取得する必要があります。これは、ナイーブ ベイズ モデルをトレーニングするプロセスです。 さまざまなテキストについて、データ特徴ベクトルとして表示されるすべての単語を取得し、各テキストに表示される用語の数(または特定の用語が表示されるかどうか)をデータベクトルとしてカウントできます。このようなテキストは整数のリストに処理することができ、その長さはすべてのエントリの数になります。このベクトルは非常に長くなる可能性があります。この記事で使用されているデータ セット内のテキスト メッセージ エントリの合計は 3,000 語を超えます。
統計トレーニング プロセスのコード実装は次のとおりです。
ここでは、条件付き確率の基本的な直接乗算に 2 つの改善が加えられていることに注意してください。
統計的確率情報を取得したら、ベイズ基準を使用してデータのタイプを予測できます。ここでは、各状況の確率を直接計算するのではなく、統計ベクトルとデータベクトルの内積を実行して条件付き確率の相対値を取得し、相対比較を行って決定を下しました。
SMSメッセージを分類する Naive Bayes モデルを構築したので、これを使用して統計を収集し、予測を行うことができます。ここでは、SMS スパム コーパスからスパム データを使用し、データの 90% をトレーニング データとしてランダムに抽出し、残りの 10% のデータをテスト データとして抽出して、ベイジアン モデル予測の精度をテストしました。 もちろん、モデルを構築する前に、モデルが処理できる形式にデータを処理する必要があります。
上記の 3 つの関数を使用すると、テキストをモデルに必要なデータ ベクトルに直接変換できます。その後、データ セットを分割し、統計用のベイジアン モデルにトレーニング データ セットを渡すことができます。
モデルをトレーニングします。
次に、テスト データを使用して、ベイズ モデルの予測精度をテストします。
4つのグループをランダムにテストしたところ、エラー率は0、0.037、0.015、0でした。平均エラー率は1.3%でした。 テストの後、さまざまな種類のテキスト メッセージにおける各用語の確率分布がどのようになっているかを確認してみましょう。
決定木を試す 前回の記事では、ID3アルゴリズムに基づいて決定木を実装しました。これも分類問題です。テキストデータを使用して、テキストメッセージを分類するための決定木を構築することもできます。もちろん、唯一の厄介なことは、ベイズと同じベクトルをデータとして使用すると、属性が多くなる可能性があることです。決定木を構築すると、ツリー構造の各レイヤーが属性を再帰的にトラバースし、情報ゲインに応じてツリー分割に最適な属性を選択します。このように、多くの属性は決定木を構築するプロセスに時間がかかる可能性があります。それでは試してみましょう...
ランダムに2回テストしたところ、エラー率は0.09、0.0でした。 効果はかなり良いです Graphviz を使って、決定木によって判断基準としてどのような用語が選択されているかを可視化してみましょう(このとき決定木のメリットが反映されます)。 決定木の深さがあまり深くないことがわかります。分類の種類が多い場合、深さが増すと決定木が面倒になる可能性があると推測されます。 要約する この記事では、Python を使用して Naive Bayes 分類器を段階的に実装し、スパム テキスト メッセージをフィルタリングします。また、同じデータに対する決定木の分類効果との簡単な比較も行います。この記事に関連するコード実装: https://github.com/PytLab/MLBox/tree/master/naive_bayes 。スパムメッセージをフィルタリングする決定木スクリプトは https://github.com/PytLab/MLBox/tree/master/decision_tree にあります。 参照する
関連資料
|
<<: 人工知能やビッグデータ製品の開発において、特に注意すべき点は何でしょうか?
>>: Yunqi CapitalのChen Yu氏:AI投資家を惹きつけてターゲットにする方法
デジタル労働力をサポートし維持するために職場で AI が普及することは、2020 年の明確なトレンド...
しばらく時間が空いたので、Java でよく使われる 7 つのソート アルゴリズムをまとめてみました。...
Mixtral 8x7B の発売は、オープン AI の分野、特に Mixture-of-Expert...
通常、ロボットやその他のデバイスは GPS を使用して屋外で自律的に移動を行います。しかし、フランス...
パルクールはエクストリームスポーツであり、複雑な環境におけるさまざまな障害物を素早く克服する必要があ...
オートエンコーダ(AE)は、半教師あり学習や教師なし学習で使用される人工ニューラルネットワーク(AN...
「子供時代に戻りたい。子供の頃はよく食べて、よく寝て、あまり考えないことが好きだった」。山西省大同市...
人工知能(AI)は、人間の知能をシミュレート、拡張、拡大するための理論、方法、技術、アプリケーション...
前回の記事では、2025年以降の人工知能の未来についてお話ししました(パート1)。今日は、5G、6G...
[[313570]] 1. ブロックチェーンブロックチェーンは、間違いなく IT 業界で最も議論さ...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...