NaiveBayesでTF-IDFで作成したデータベースを学習

f:id:hanamichi_sukusuku:20210217164325p:plain

実行結果

f:id:hanamichi_sukusuku:20210217164354p:plain

このプログラムではNaiveBayes(ナイーブベイズ)を利用してTF-IDFのデータベースを学習している。

 

TF-IDFのデータベースを読み込む

data = pickle.load(open("text/genre.pickle", "rb"))
y = data[0] # ラベル
x = data[1] # TF-IDF

 

 

hanamichi-sukusuku.hatenablog.com

genre.pickleに関しては上記でlivedoorニュースコーパスのデータを利用してTF-IDFベクトルに変換したデータを作成している。

 

学習用とテスト用に分ける

x_train, x_test, y_train, y_test = train_test_split(
   x, y, test_size=0.2)

 

 

ナイーブベイズで学習

model = GaussianNB()
model.fit(x_train, y_train)

 

評価して結果を出力

y_pred = model.predict(x_test)
acc = metrics.accuracy_score(y_test, y_pred)
rep = metrics.classification_report(y_test, y_pred)
 
print("正解率=", acc)
print(rep)

metrics.classification_report()では正解データと予測データを渡すことでprecision(適合率)やrecall(再現率)などのそれぞれのデータを比較したときの詳細をみることができる。

metrics.classification_report()見方

y_test = [0,0,0,1](正解)

y_pred = [0,0,1,1](予測)

例えばmetrics.classification_report(y_test, y_pred)このような場合

f:id:hanamichi_sukusuku:20210217171023p:plain

precision

 

・precision(適合率)は0と予測した2つはどちらも正解なので適合率1.00。

・1と予測した2つはそのうちの1つが正解なので適合率0.50。

recall

・recall(再現率)は正解が0だった3つのうち、正しく0だと予測されたものは2つなので再現率0.67。

・正解が1だった1つを予測結果で予測できているので再現率1.00。

f1-score

fi-scoreは調和平均。

 

support

正解の要素数