け日記

最近はPythonでいろいろやってます

numpyで無相関化・白色化する

最近通っているディープラーニングの講習会にて、BatchNormalizationの文脈でデータの白色化なるものについて触れましたので、「はじめてのパターン認識」を読みながらnumpyで実装してみます。 はじめてのパターン認識作者: 平井有三出版社/メーカー: 森北出…

学習してないランダムなCNNでも特徴抽出の役に立つ

先月からディープラーニングを教えてくれる講座を受講しています。 今週からCNNに入ったのですが、先生が「CNNは特徴抽出器としてかなり優秀で、学習していないランダムなCNNでも高い精度が出せる」と教えてくれました。 「え、そうなの!?」とびっくりしま…

ガウス混合分布のパラメータをscikit-learnで推定する

scikit-learnでガウス混合分布のパラメータをさくっと推定する方法がありましたので、その備忘録です。 ガウス混合分布 ガウス混合分布は、複数のガウス分布を線形結合した分布で、以下式で表されます。 N: ガウス分布数 (ハイパパラメータ) : ガウス分布の…

Sudachiベースの学習済みWord2Vecモデルを使う

お仕事でSudachiを使って形態素解析を行っているのですが、それと互換した単語埋め込みモデルが必要になりました。 Sudachiの開発元であるワークスアプリケーションズさんから、Sudachiで分かち書き・学習したWord2Vecモデルが提供されています。 コーパスと…

Jupyter NotebookをAPI経由で操作する

Jupyter Notebookのノートブックファイルを外部から実行する要件がありましたので、API経由で操作する方法について整理します。 Jupyter API Jupyter Notebook ServerではJupyterの基本的な操作 (ファイルの閲覧・取得、カーネルの起動や実行など) をREST + …

KerasでDCGANを作ってKMNISTのくずし字を生成する

KMNISTのくずし字をDCGANで生成する、というモデルをKerasで作ります。 DCGAN DCGAN (Deep Convolutional GAN) はGAN (Generative Adversarial Network) の生成モデルの一種で、画像を生成するものです (提案論文) 。 GANは2つのモデルを学習によって獲得し…

小ネタ: PandasでCSVファイルからdatetimeカラムをロードする

今週もPandasの小ネタです。 CSVファイルのカラムをdatetime64としてロードする方法です。 Pandasはdatetime型を食わせるとdatetime64のSeriesになります。.dtプロパティも使えます。ここではカラムcがdatetime64になります。 import pandas as pd import da…

小ネタ: Pandasのapplyで複数の列を返す

Pandasの小ネタです。 Pandasのapplyで1つの列から、複数の列を返したい場合があります。 その場合、1つ1つapplyで取り出しても良いのですが、冗長になりがちです。 import pandas as pd df = pd.DataFrame({ 'number': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,…

Keras: スパムメッセージをLSTMで分類する

KerasでRNN (LSTM) を実装し、スパムメッセージを分類してみます。 以前、同じデータセットに対してscikit-learnを使ってナイーブベイズで分類を行いましたが、いわばそのディープラーニング版となります。 scikit-learnでスパムメッセージを分類する(CountV…

日本語NLPライブラリ GiNZA で遊ぶ

つい最近、リクルートと国立国語研究所の共同研究のアウトプットとしNLPライブラリ GiNZA が公開されました。今回はこのGiNZAをお試ししてみます。 www.recruit.co.jp GiNZA GiNZAは日本語の自然言語処理の統合ライブラリです。 megagonlabs.github.io spaCy…

Python: Redisで複数の値を操作する (mset, mget, scan, delete)

小ネタです。 以前、PythonからRedisを操作するredis-pyについて紹介しましたが、今回はこのredis-pyで複数の値を一括して値を設定・削除する方法についてです。 準備 こちら↓の記事を参考にRedisコンテナの追加・redis-pyのインストールを行ってください。 …

Python: more-itertoolsで複雑なイテレーションを簡単に実装する

開発や分析で「タプルのリストからタプルの1つ目の要素だけを取り出したい」「リストの要素を3つずつ処理したい」といったことがちょくちょく起こります。Pythonでこうしたケースに便利なライブラリ mote_itertools を紹介します。 github.com インストール …

Keras: Fashion-MNISTを使ってCNNを可視化する

Fahion-MNISTのデータを使って学習したニューラルネットワークの畳み込み層を可視化します。 Fashion-MNIST Fashion-MNISTは衣料品の画像を10クラス (Coat, Shirtなど) に分類するデータセットです。MNISTと同じく、学習サンプル数60,000・テストサンプル数1…

Keras: ImageNetで学習済みのVGG16をPlaces365へ転移学習する

Kerasを使って、ImageNetで学習済みモデル (VGG16) をPlaces365の分類タスクへ転移学習する、ということに取り組みます。 今回使用するパッケージたちです。 import numpy as np import pandas as pd import os import shutil from keras.applications.vgg16…

KerasでLeNet-5を実装してKuzushiji-MNISTを分類する

仕事でそろそろコンピュータビジョン系の力が必要になるかも、となってきましたので、チクタク勉強を始めてます。 今回はKerasを使ってKuzushiji-MNISTの文字を分類するネットワークをLeNet-5で実装する、ということに取り組みます。 Kuzushiji-MNIST 日本の…

Pythonで形態素解析器Sudachiを使う (SudachiPy)

仕事でSudachiをお試しする機会がありましたので、基本的な使い方を備忘録として整理しておきます。 Sudachi Sudachiはワークスアプリケーションズさんで開発されたOSSで、日本語に特化した形態素解析器です。分かち書き・品詞付け・正規化を行います。 gith…

Python: lifetimesで顧客のトランザクション数を予測する

前回紹介したBG/NBDなど、顧客の未来のライフタイムバリュー (ここではトランザクション数) を予測するモデルを、簡単に利用できるPythonパッケージ lifetimes を紹介します。 lifetimes lifetimesは、顧客の未来のトランザクションを計算するためためのパッ…

ライフタイムバリューを予測する (BG/NBDモデル)

今回は、顧客のライフタイムバリューを予測する方法の1つとして、BG/NBDモデルを紹介します。 モチベーション 顧客のライフタイムバリューを予測できると、その顧客に対してどれだけ投資して良いかがわかります。ここで言う投資は、クーポンやポイントなどの…

PythonでXGBoostを使う

最近XGBoostに触れる機会がありましたので、使い方を確認します。 (今まで使わなかったことの方がどちらかというと珍しいのかもしれません。) XGBoost XGBoost (eXtreme Gradient Boosting) は、単純な分類器 (ex. 決定木) を組み合わせたアンサンブル学習モ…

形態素解析前の日本語文書の前処理 (Python)

日本語の文書を扱っていますと、モデルやパラメータよりも、前処理を改善する方が精度が改善し、かつ、頑健になることがしばしばあります。 本投稿では形態素解析 (分かち書き) する前、つまり文字レベルでの前処理でよく使っているテクニックを紹介します。…

spaCyで英文の固有表現認識

今回はspaCyを使って英文の固有表現認識を行ってみます。 GiNZAを使った日本語の固有表現認識はこちら↓です。 ohke.hateblo.jp 固有表現抽出 固有表現認識 (named entity recognition: NER) は、文書から固有表現 (named entity) を抽出・分類することです。…

論文メモ: Latent Aspect Rating Analysis on Review Text Data: A Rating Regression Approach

Latent Aspect Rating Analysis on Review Text Data: A Rating Regression Approach (KDD'10) という論文について紹介します。 @inproceedings{Wang:2010:LAR:1835804.1835903, author = {Wang, Hongning and Lu, Yue and Zhai, Chengxiang}, title = {Late…

小ネタ: urllibでURLをパースする・生成する

urllibを使ったURLのパースと生成についてまとめます。よく使うのに、そのたびに調べてしまっているので。 パースする まずはURLをパースする方法ですが、urllib.parse.urlparseにURL文字列を渡すだけです。 あとは、返されたParseResultオブジェクトから必…

小ネタ: Pandasでqueryを使って行を選択する

PandasのDataFrameから行を抽出する簡便な方法として、queryメソッドが提供されています。 SQLで言えば選択 (WHERE句) にあたる処理を、文字列で記述できます。 pandas.pydata.org queryメソッドを使った選択の例 今回の投稿で使うデータを準備します。 impo…

Uplift modelingで施策が効く人を見極める

最近はお仕事でマーケティングに関わることが多いです。そんな中で、施策が効く人はどんな人?ということを特定・予測する方法を調べており、その過程で見つけたUplift modelingについてまとめました。 Uplift modeling Uplift modelingは、施策の真の効果を…

いまさら学ぶPageRankアルゴリズム

IR

情報検索 (IR) のみならず、いろいろな分野で応用されているPageRankアルゴリズムについてまとめます。 PageRank PageRankはリンク分析 (link analysis) に分類されるアルゴリズムで、1998年に提案されました (提案論文PDF) 。以下の特徴を持ってます。 リン…

Rocchioフィードバックアルゴリズム

IR

情報検索 (IR) の分野におけるフィードバックアルゴリズムの1つであるRocchioアルゴリズムについて紹介します。 Rocchioフィードバックアルゴリズムとは IRにおいて、検索クエリをTF*IDF等でベクトル化した後で、過去のラベリング情報 (フィードバック) を使…

Solrの類似度アルゴリズム (TF*IDF, BM25)

引き続きSolrに触れていきます。 今回はSolrの検索で使われる類似度 (similarity) についてです。 前提 Solrのダウンロードとkenikkiコレクションの追加まで完了している状態を前提として進めます。 ohke.hateblo.jp ohke.hateblo.jp 類似度 Solrのコアエン…

Solrで検索 (フィルタ, ソート, ファセット, ハイライト)

前回・前々回に引き続いて、Solrについてです。 今回は検索クエリで頻繁に使われる、フィルタ、ソート、ファセット、ハイライトについてまとめます。引き続き、チュートリアルと↓の本を参考にしています。 なお、前々回のSolrのダウンロード、前回のkenikki…

Solrでスキーマの定義とドキュメントの登録を行う

前回の投稿に引き続き、Solrに慣れ親しんでいきます。 ohke.hateblo.jp 今回の投稿では、スキーマの定義、および、JSONを使ったドキュメント登録を行います。引き続き、チュートリアルと↓の本を参考にしています。 Solrサーバの起動とSolrCoreの作成 話を単…