13-スパム分類2

5809 ワード

1.読み取り


2.データの前処理


3.データ区分-トレーニングセットとテストセットのデータ区分


from sklearn.model_selection import train_test_split
x_train,x_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=0, stratify=y_train)
emails=pd.read_csv("new_email.csv") # import pandas as pd
data=emails.iloc[:,1] # 
labels=emails.iloc[:,0]  # , 

from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test=train_test_split(data,labels,test_size=0.2,random_state=0,stratify=labels)
print('',len(x_train),'',len(x_test),'',len(y_train),'',len(y_test))

4.テキストフィーチャー抽出


sklearn.feature_extraction.text.CountVectorizer
https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html?highlight=sklearn%20feature_extraction%20text%20tfidfvectorizer
sklearn.feature_extraction.text.TfidfVectorizer
https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html?highlight=sklearn%20feature_extraction%20text%20tfidfvectorizer#sklearn.feature_extraction.text.TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf2 = TfidfVectorizer()
メールとベクトルの関係を観察する
ベクトルをメールに復元
# 4、 --- 
# TfidfVectorizer , 
from sklearn.feature_extraction.text import TfidfVectorizer

tfdvect=TfidfVectorizer()
X_train=tfdvect.fit_transform(x_train) # 
X_test=tfdvect.transform(x_test) # 

X_train.toarray().shape  #(4457, 6719)  6719 
X_test.toarray().shape
tfdvect.vocabulary_ # 

 

4.モデル選択


from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
なぜこのモデルを選んだのか説明します.
from sklearn.naive_bayes import MultinomialNB

mnb=MultinomialNB() # 
mnb.fit(X_train,y_train) # 
y_pre=mnb.predict(X_test) # 
print(' ',y_pre,'
'," ",y_test) print(' :',(y_pre!=y_test).sum()," ",(y_pre==y_test).sum())

5.モデル評価:混同行列、分類報告


from sklearn.metrics import confusion_matrix
confusion_matrix = confusion_matrix(y_test, y_predict)
混同行列の意味を説明する
from sklearn.metrics import classification_report
精度、精度、リコール率、F値がそれぞれ表す意味を説明する
 
# 5from sklearn.metrics import confusion_matrix # 
from sklearn.metrics import classification_report # 
import numpy as np

con_m=confusion_matrix(y_test,y_pre)
print(" ",con_m)
print((con_m[0][0]+con_m[1][1])/np.sum(con_m))
c_r=classification_report(y_test,y_pre)
print(" :
",c_r)

6.比較とまとめ


CountVectorizerでテキストフィーチャーを生成する場合、TfidfVectorizerと比較して効果はどうなりますか?
CountVectorizer:各単語の出現頻度のみを考慮する;次に,各行が訓練テキストの語周波数統計結果を表す特徴行列を構成する.
TfidfVectorizer:ある語彙が本テキストに現れる頻度を考慮するだけでなく、この語彙を含む他のテキストの数にも注目します.