ナイーブベイズは、いくつかの実際の生活を解決する
問題は、最初のテキスト文字列のリストを取得し、その後用語ベクトルを生成する必要がある場合。
データの準備:テキストセグメンテーション
テストアルゴリズム:ナイーブベイズクロスチェック
ファイルの構文解析と完全なスパムテスト機能
デフcreateVocabList(のdataSet): vocabSet =セット([]) #は空のセットを作成 のための文書でのDataSetを: vocabSet = vocabSet | セット(文書)#の二組の組合は 返すリスト(vocabSet) デフsetOfWords2Vec(vocabList、のInputSetを): returnVec = [0] * (vocabList)lenの ための単語でのInputSet: もし言葉でvocabList: returnVec [vocabList.index(単語)] = 1 さもなければ: プリント(" 言葉は:%sが私の語彙ではありません!"%の単語)が 返さreturnVec デフbagOfWords2VecMN(vocabList、のInputSet): returnVec = [0] * lenは(vocabList)の ための単語でのInputSet: もし言葉をにvocabList: returnVec [vocabList。インデックス(ワード)] + = 1 リターンreturnVec デフ textParse(bigString): #入力は大きな文字列で、#outputは、単語リストである 輸入再 listOfTokens = re.split(R ' \ W * '、bigString) リターン [tok.lower()のために TOK で listOfTokens 場合でlen(TOK)> 2 ] DEF trainNB0(trainMatrix、trainCategory): numTrainDocs = LEN(trainMatrix) numWords = LEN(trainMatrix [0]) pAbusive = SUM(trainCategory )/ フロート(numTrainDocs) p0Num = もの(numWords) p1Num =もの(numWords) #のものに変更() p0Denom = 2.0 p1Denom = 2.0 #2.0に変更 するための I中範囲(numTrainDocs): もし trainCategory [I] == 1 : p1Num + = trainMatrix [I] p1Denom + = 和(trainMatrix [I]) 他: p0Num + = trainMatrix [I] p0Denom + = 和(trainMatrix [I] ) p1Vect =(p1Num / p1Denom)ログ #1 ()ログの変更を p0Vect = LOG(p0Num / p0Denom) #1 )(ログの変更を 復帰p0Vect、p1Vect、pAbusive DEF aloneIndex(datasetLen): A = [] しばらく(真): randIndex = INT(LEN random.uniform(0、(トレーニングセット))) a.append(randIndex) の場合(LEN(セット())== 10 ): ブレークは 返すDEF :はspamtest() ドキュメントリストを = [] CLASSLIST = [] 全文 = [] のための I における範囲(1,26 ): wordListに = textParse(オープン(' F:\\ machinelearninginaction \\ CH04 \\メールスパム\\ \\%d.txt '%ⅰ).read()) fullText.extend(wordListに) docList.append(wordListに) classList.append( 1 ) wordListに = textParse(オープン(' F:\\ machinelearninginaction \\ CH04 \\メール\\ハム\\%d.txt '%I).read()) ドキュメントリスト。追記(wordListに) fullText.extend(wordListに) classList.append(0) vocabList = createVocabList(ドキュメントリスト)#が作成語彙 トレーニングセット=範囲(50 ) TESTSET = aloneIndex(トレーニングセット)#テストを作成し trainingSetTを= [] のために私に範囲(LEN(トレーニングセット)): のため Jにある範囲(LEN(TESTSET)を): もし(TESTSET [J] =!トレーニングセット[I]): trainingSetT.append(トレーニングセット[i])と トレーニングセット = trainingSetT trainMat = [] trainClasses = [] のため docIndex におけるトレーニングセット:#1 分類器(GETちゃったごめんなさい)trainNB0列車 trainMat.append(bagOfWords2VecMN(vocabList、ドキュメントリスト[docIndex])) trainClasses.append(CLASSLIST [docIndex]) p0V、P1V、pSpam = trainNB0(配列(trainMat )、アレイ(trainClasses)) ERRORCOUNT = 0 のため docIndex で TESTSET: #は、残りの項目を分類 wordVector = bagOfWords2VecMN(vocabList、ドキュメントリスト[docIndex]) であれば(!classifyNB(配列(wordVector)、p0V、P1V、pSpam)= CLASSLIST [docIndex]): ERRORCOUNT + = 1 プリント(" 分類エラー" 、ドキュメントリスト[docIndex]) プリント(' エラーレートがある:'、フロート(ERRORCOUNT)/ (TESTSET)LEN) はspamtest()