け日記

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

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…

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は、顧客の未来のトランザクションを計算するためためのパッ…

PythonでXGBoostを使う

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

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

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

spaCyで英文の固有表現認識

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

小ネタ: 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は、施策の真の効果を…

Python: LexRankで日本語の記事を要約する

仕事で行っているPoCの中で、文章の要約が使えるのではと思い、調査をし始めています。 今回はsumyのLexRankの実装を使い、過去の投稿を要約してみます。 LexRank LexRankは、抽出型に分類される要約アルゴリズムで、文書からグラフ構造を作り出して重要な文…

SQL ServerのテーブルをPandas DataFrameで読み書きする

SQL ServerのテーブルをPandasのDataFrameに読み込んだり、逆に書き出したりする方法の備忘録です。 ドライバにpymssqlを使います。また書き出しには $ pip install pymssql SQLAlchemy DataFrameへの読み込み まずはSQL ServerのテーブルからDataFrameへ読…

GloVeで単語ベクトルを得る

単語ベクトル化モデルの一つであるGloVeを試してみます。 GloVe GloVeは単語のベクトル表現を得る手法の一つで、Word2Vecの後発となります。論文はこちらです。 nlp.stanford.edu Word2Vec (skip-gram with negative sampling: SGNS) では各単語から周辺単語…

PythonからGoogle Cloud Natural Language APIを使って感情分析

Google Cloud Natural Language APIを使って、Pythonで日本語文章の感情分析 (ポジティブ/ネガティブの判定) を行います。 このAPIは自然言語処理のためのGCPサービスで、感情分析以外にも、構文解析やエンティティ解析が提供されています。 cloud.google.co…

scipy.statsでカーネル密度推定 (KDE)

scipy.statsでカーネル密度推定 (KDE) を行う方法のメモです。 カーネル密度推定は、標本データから確率密度を推定するものです。 要するにヒストグラムをなめらかにすることで、データの傾向を捉えやすくします。 2017/1/1〜2017/12/31 (365日) の東京の日…

小ネタ: PandasでCSV文字列を分割して列にする

PandasでCSV形式の文字列のカラムを、それをカンマ区切りで分割して、別々の列にする方法のメモです。 例えば、1行目なら"123"と"456"と"789"を3つの列に分割します。 import pandas as pd df = pd.DataFrame({'name': ['A', 'B'], 'csv': ['123,456,789', '…

Flask-CachingでRedisにキャッシュする

Flaskアプリケーションでビューを楽にキャッシュする方法はないかと探していた時、同僚にFlask-Cachingを紹介されました。 Flask-Cachingを使ってRedisにキャッシュする方法について整理します。 Flask-Caching Flask-Cachingは以下の特徴があり、Flaskアプ…

PySparkでMLを使って機械学習する

引き続きPySparkについてです。今回はMLパッケージを使ってスパムメッセージを分類します。 PySpark + Jupyter Notebookの環境をDockerで構築する - け日記 PySpark (+Jupyter Notebook) でDataFrameを扱う - け日記 PySparkのMLパッケージを使ってMovieLens…