マシン学期 - ベイズ分類器の戦闘

ベイズ分類戦闘

まず、分類の基本的な考え方

データマイニングで定義された1分類:

  • 分類は、いくつかの新しいデータ項目が特定のカテゴリ内の特定のカテゴリにマッピングされています
  • 分類は、教師あり学習でクラスタリングなど、教師なし学習に対応します
  • 最大の違いは、クラスタリングや分類、分類データ部分のカテゴリは、データのクラスタリングの未知のカテゴリを知られているということです。

2.分類プロセス

ステップサンプル特徴次元データに変換し、等(特徴抽出)。すべてのサンプルは、機能の数が同じでなければなりません。アカウントに包括し、一意の特性を取ります。

動物種 体型 翼の数 足の数 卵です かどうか、毛深いです カテゴリ
0 4 ノー それはあります 哺乳類
すばらしいです 0 4 ノー それはあります 哺乳類
すばらしいです 0 4 ノー それはあります 哺乳類
麻雀 小さな 2 2 それはあります それはあります 鳥類
白鳥 2 2 それはあります それはあります 鳥類
ダヤン 2 2 それはあります それはあります 鳥類

ステップ2の特徴(特徴選択)に関連するカテゴリを選択し、。髪を行うには何もない場合は、上記翼の数、脚の数、卵の生産は非常に関連性がある場合、タイプは、サイズは、関連する部分であります

ステップ3、サブ力モデル又は分類器の確立

分類は、空間フィーチャクラスにマップ一般の関数として見ることができます。
バツ 1 バツ 2 バツ 3 バツ 4 バツ 5 バツ n個 \ INT \左(X_ {I1}、X_ {I2}、X_ {I3}、X_ {I4}、X_ {I5} ... {}内X_ \右)\ RIGHTARROW Y_I

前記分類方法

一般に使用される分類方法は、ファジー論理、遺伝的アルゴリズム、ニューラルネットワークラフ集合アダムス分類アルゴリズムに基づく分類アルゴリズム、決定木分類アルゴリズム、ベイズ分類アルゴリズムに隣接する同様の機能、アソシエーションルール分類アルゴリズム、Kが挙げられます。

多くの分類アルゴリズムは、一例として、ここでベイズ分類アルゴリズム、自分の長所と短所とアプリケーションのスコープを持っている、があります。

第二に、ベイズ分類の概要

1.背景:

ベイズに基づくベイズ分類の定理は、ベイズの定理はそうした名前のベイズの定理にちなんで名づけられた18世紀の確率論と決定論ベイズ発明の研究者トーマス、です。

分類アルゴリズムの比較研究は、ナイーブベイズ分類および決定木が選択ニューラルネットワーク分類器に匹敵することを見出した。大規模なデータベースの場合、ベイズ分類器は、高精度と速度を有しています。

ベイズ分類の2の概要

事前確率と事後確率

  • 事前確率:得られた確率、従来のデータ解析
  • 再の確率は、情報を得た後に修正さ:事後確率

ベイズ理論

  • 簡潔には、異なるデータの観測確率と仮定し仮定Sidinglujiベイズ事前確率は、所与の事後確率を計算するための方法。
  • 人工知能の分野では、ベイズの方法は非常に代表的な不確実な知識表現方法です。

3.ベイズ

  • 彼はどの因子Bの面積を考慮していないので、P(A)は、事前確率またはAの周辺確率は、「アプリオリ」と呼ばれています。
  • P(A | B)はなく、AからBの値が、既知のB Aの発生確率と事後確率と呼ばれます。
  • P(B | A)は試験と呼ばれているAが知られた後、AおよびBの確率値そこから得られたBの発生確率です。
  • P(B)は、正規化定数として、Bの事前確率または周辺確率です。

ベイズの定理式
P A | B = P ( A ) P ( B A ) P ( B ) P(A | B)= P(A)\ FRAC {P(B | A)}、{P(B)}
ベイズ式は、確率P(A)、P(B)Pおよび方法を検証するために設けられている| |検証(B A)の確率P(B A)の後に計算されます。

ナイーブベイズ

分類アルゴリズムは、各属性は、ケースナイーブベイズアルゴリズムとは無関係であるという仮定の下で分類されるように構成される。

基本的な考え方は次のとおりです。X {A1、A2、...}に分類される項目を指定して、この状態で各カテゴリの確率を解決することはYIに発生するP(イー| X)、発生する原因に分類されるこのアイテムを置くために、最大どのカテゴリ。

4.ベイズ分類器4種類

ナイーブベイズ:ナイーブベイズ、各特性変数xが独立していると仮定。

TAN:機能ツリーに対応する変数ノードを構成できるように拡張されるナイーブベイズ、

BAN:TAN最初の膨張、各特性のノード間の対応関係に対して可変ではなく、ツリーを可能に構成

GBN:制約のないベイジアンネットワーククラシファイア

5.プロセスベイズ分類

  • 準備フェーズ:プロパティの主な特徴は、特定の状況や数学の適切な分割の特性に基づいて決定されます。次いで、分類されるべきアイテムの人工的な部門の一部であること、訓練サンプルを決定しました。あなたが入力した場合は、すべての項目が分類されると、出力は学習サンプルの特徴的な性質です。
  • 分類器のトレーニングフェーズ:各カテゴリの各カテゴリの条件付き確率の評価機能ごとに計算速度と財産が分割見積もりトレーニングサンプルに表示されます。特徴的な属性と入力トレーニングサンプル、分類器が出力されます。
  • アプリケーションフェーズ:出力する入力を分類する分類する項目、および分類項目を分類する分類器を使用して、分類のアイテムとカテゴリとの間のマッピングです。

第三に、戦闘スパムの分類

データをトレーニング:スパム(150.txtに0.txt)、スパム、128から150通常のメール、151-156ビットテストメッセージの1-127ビットを。

分析

  1. こうした[] *として全体のトレーニングセット、干渉削除文字を読みます。,,など、その後、単語、テキスト分類のための単一の単語が有効とみなさ語彙の残りの部分には寄与しないように、単一の単語の長さ1を削除します。
  2. 各アクティブ語彙の出現のトレーニングセット番号の前にすべての統計の最大数は、Nの傍受が表示されます
  3. 特徴ベクトルを生成するメッセージに表示されるスパムスパムと廃棄物含有量、得られたNワードの第二の部分の統計的頻度を前処理の最初のステップです。
  4. ナイーブベイズ分類モデルが作成され、訓練特徴ベクトルと3段階に応じて公知の電子メールを取得します
  5. 最初のステップを参照して、テストメッセージを読み取り、特徴ベクトルを抽出し、メッセージのテキストを事前
  6. 学習モデルのステップフォー良い使用、第5の特徴ベクトル抽出ステップに応じてメッセージを分類します。

コード

from re import sub # 用来删除邮件的标点符号等其他无关的字符
from collections import Counter # 计算邮件中出现最多的词
from itertools import chain # 可以一次返回迭代对象
from numpy import array
from jieba import cut
from sklearn.naive_bayes import MultinomialNB

def getWoedsFromFile(txtFile):
    words = []
    with open(txtFile,encoding='utf8') as fp:
        for line in fp:
            line = line.strip()
            line = sub(r'[.【】 0-9\—。、!~\*]','',line)
            line = cut(line)
            line = filter(lambda word:len(word)>1,line)
            words.extend(line)
    return words

# 获取全部训练集中出现次数最多的词
allWoeds = []
def getTopNWords(topN):
    txtFiles = [str(i)+'.txt' for i in range(151)]
    for txtFile in txtFiles:
        allWords.append(getWoedsFromFile(txtFile))
    freq = Counter(chain(*allWords))
    return [w[0] for w in freq.most_common(topN)]

topWords = getTopWoeds(600)


# 获取特征向量,创建模型训练
vectors = []
for word in allWords:
    temp = list(map(lambda x:words.count(x),topWords))
vectors = array(vectors)
labels = array([1]*127 + [0]*24)

model = MultinomialNB()
model.fit(vectors,labels)

def predict(txtFile):
    words = getWoedsFromFile(txtFile)
    currentVector = array(tuple(map(lambda x: words.count(x),topWords)))
    result = model.predict(currentVector.reshape(1,-1))[0]
    return '垃圾邮件' if result == 1 else '正常邮件'

for mail in ('%d.txt'%i for i in range(151,156)):
    print(mail,predict(mail),sep=':')
公開された64元の記事 ウォン称賛14 ビュー9178

おすすめ

転載: blog.csdn.net/jiangSummer/article/details/104138029