序文 前回の記事「機械学習アルゴリズムの実践: 決定木」では、決定木の実装についてまとめました。この記事では、単純ベイズ分類器を段階的に実装し、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投資家を惹きつけてターゲットにする方法
[[334740]] 01 完全に接続されたネットワーク完全に接続された高密度の線形ネットワークは、...
AIがサイバー攻撃から重要なインフラを守るためにどう役立つか 電力網、水道システム、交通網などの重要...
近年、自然言語処理における事前トレーニングは研究分野でホットな話題となっており、有名なGPT-3も新...
概要: AI医用画像診断市場は急速な成長期を迎えつつあり、医師の負担を軽減しながら医療の質の向上も期...
[[429122]]最近、GitHub 上のプロジェクト ICLR2022-OpenReviewDa...
人間のロールプレイングへの熱意は決して衰えることがなく、だからこそ AI による顔の変形が人気を博し...
人工知能(AI)の分野といえば、「人間対機械」ゲームにおける「AlphaGo」という名の名を挙げざる...
これは厳しい試練となるだろう年初に突然発生した疫病は、世界に「一時停止ボタン」を押し、伝統的な運営モ...
AI導入の最大の推進要因はインフラのアップグレードです。近年、ビッグデータ分析やAIなどの分野が注目...
[[348121]]私の印象では、ロボットは火や剣を恐れていないようです。彼らには痛覚はなく、単な...
2019年WeChatオープンクラスPROで、WeChat AIチームが開発したインテリジェント対話...
[[355496]]多くのレコーディング仲間が、昨日のトピック「貪欲アルゴリズム:ジャンピングゲーム...