概要
Python機械学習プログラミングの学習メモです。 勉強会用の資料があるのでこちらでは資料に載らなかったメモ等を。
今回は、第8章 機械学習の適用1 - 感情分析
前回: nownab.log | Python機械学習プログラミング 第5章
資料
環境
本書の各バージョンは結構古いので、できるだけ新しいバージョンを使うようにしている。
- Python 3.6.4
- scikit-learn 0.19.1
- matplotlib 2.1.1
メモ
8.1 IMDbの映画レビューデータセットの取得
8.2 BoWモデルの紹介
8.2.1 単語を特徴ベクトルに変換する
8.2.2 TF-IDF を使って単語の関連性を評価する
idfの引数に文書があるのはなぜ?
計算結果もなんか変だなーと思ってみてたら正規化の影響だったっぽい。TfidfTransformer
の正規化を無効化してsklearn.preprocessing.Normalizer
を使うと同じ結果が得られる。Normalizer
は単純に個々のベクトルを正規化する(L2ノルムを1にする)。
# TfidfTransformer(use_idf=True, norm="l2", smooth_idf=True)
[[0. 0.43 0. 0.56 0.56 0. 0.43 0. 0. ]
[0. 0.43 0. 0. 0. 0.56 0.43 0. 0.56]
[0.5 0.45 0.5 0.19 0.19 0.19 0.3 0.25 0.19]]
# TfidfTransformer(use_idf=True, norm=None, smooth_idf=True)
[[0. 1. 0. 1.29 1.29 0. 1. 0. 0. ]
[0. 1. 0. 0. 0. 1.29 1. 0. 1.29]
[3.39 3. 3.39 1.29 1.29 1.29 2. 1.69 1.29]]
# Normalizer().fit_transform(tfidf_result)
[[0. 0.43 0. 0.56 0.56 0. 0.43 0. 0. ]
[0. 0.43 0. 0. 0. 0.56 0.43 0. 0.56]
[0.5 0.45 0.5 0.19 0.19 0.19 0.3 0.25 0.19]]
っていうのが後ろに書いてあった。説明の順序が悪い。。。
8.2.3 テキストデータのクレンジング
教科書のコードだと顔文字がくっついてしまうので、顔文字のjoin
はwhitespaceを使うようにした。
def preprocessor(text):
text = re.sub("<[^>]*>", "", text)
emoticons = re.findall("(?::|;|=)(?:-)?(?:\)|\(|D|P)", text)
text = re.sub("[\W]+", " ", text.lower()) + " ".join(emoticons).replace("-", "")
return text
8.2.4 ドキュメントをトークン化する
8.2.5 ドキュメントを分類するロジスティック回帰モデルのトレーニング
学習には1時間ぐらいみといた方がいいかも。
8.3 さらに大規模なデータの処理: オンラインアルゴリズムとアウトオブコア学習
次章までセッションを維持しろと言われてもファイルを分けているので、pickleしといた。
import pickle
pickle.dump(stop, open("stopwords.pkl", "wb"), protocol=4)
pickle.dump(clf, open("classifier.pkl", "wb"), protocol=4)
word2vecの提案者による実装らしい。 Google Code Archive - Long-term storage for Google Code Project Hosting.
Python機械学習プログラミング
機械学習勉強会について
社内で毎週開催している。本書は輪読形式でまわしているが、題材によって形式は柔軟に変えている。 毎週読む範囲を決めて資料にまとめて発表するという感じでやっている。
また、勉強会で書いたコードや疑問点などをまとめるためにGitHubのレポジトリを活用している。 Wondershake/machine-learning-study: 機械学習勉強会