RのFactoRizationMachinesパッケージを用いたFMのページビューデータへの適用

Googleタグマネージャーで集めたアクセスログデータを用いて、前回と同様に記事のレコメンドにチャレンジしてみようと思います。FactoRizationMachinesパッケージという便利そうなパッケージの存在も知れたことから、今回は以前から気になっていたFactorization Machineを扱います。

【目次】
・Factorization Machine(FM)の概要
・パッケージ紹介とインストール
・サンプルデータの構造把握と前処理
・FMの実行
・結果
・参考文献

Factorization Machine(FM)の概要

  • 組み合わせ特徴量を扱う教師あり学習モデル。行列分解とSVMを合体させた手法。
  • スパースになりやすいデータの予測問題で扱う。
  • 1ユーザーのある商品に対しての評価を、1評価1行として表して、ユーザーとアイテムの交互作用の特徴ベクトルを扱う。
  • 相互作用項に関して、時間や文脈などを自由に入れられる。
  • 相互作用項を次元圧縮する際の要素数を事前に決める必要がある。
  • Matrix Factorizationよりも精度が良いとされている。特徴量エンジニアリングなどで使われているようです。(Click-Through Rate Prediction

パッケージ紹介とインストール

FactoRizationMachinesパッケージは線形SVMと2次のFMと高次のFMを実行することができ、引数で正則化項も加えることができます。現段階においては回帰のみで分類問題への適用は今後の開発となるようです。CRANから普通に
install.packages(‘FactoRizationMachines’)
でインストールします。libFMexeパッケージの場合は、libFMをインストールしてパスを指定しておく必要がありますが、このパッケージに関しては不要となります。

サンプルデータの構造把握と前処理

FactoRizationMachinesパッケージのサンプルコードにおいては、MovieLensのデータがサンプルデータとして載せられていました。ユーザーのID(整数)、映画のID(整数)、評価(整数、5段階)、日時(整数)からなるデータに対して、sparseMatrixに変換していました。

今回は、前回の投稿非負値行列因子分解(NMF)でブログ記事のレコメンドをしてみると同じデータを使って、アクセスログデータに適用しようと思います。FactoRizationMachinesの形式に合わせるために、このブログのアクセスログも、クッキーのIDを整数に、記事のIDを整数に、閲覧回数を5段階(5以上を5に変換)に、日時を整数に変更しています。

FMの実行

デフォルトの設定c(1, 10)では線形のウェイトが有効で、2次の項の要素数が10で正則化項なしのFMを実行することになります。引数に関する詳しい情報はPackage ‘FactoRizationMachines’に書かれています。今回はサンプルを参考に正則化項ありでモデルを実行します。まず、アクセスログデータに対して、ユーザーのIDからなる整数ベクトル、記事のIDからなる整数ベクトル、セッションのあった日時のデータからなる整数ベクトルを作成し、sparseMatrix関数を用いて元データを変形し、80%のデータをトレーニングに、20%のデータをテストに割り当てます。さらに、テストデータに関して、予測値との平均二乗誤差を計算します。

結果

各モデルについての平均二乗誤差を計算しています。
線形モデルや高次元モデルよりも、2次の項を持つFMが精度が高いようです。

こちらは、この中で性能の良かった2次の項を持つFMの予測結果とテストデータの結果をプロットしたものです。4点を超える値をあまり予測できていないようです。今回はサンプルを回しただけなので、本来であれば次元の数kや正則化のセッティングをいろいろいじったり、相互作用項を新しく追加するなどして精度を高めることが必要です。

結果の比較だけでは仕事で使えないので、実際に予測した結果を取り出したいと思います。
実際に運用するとなると、ページIDを所与として、ページビュー数を0とおいて(型をそろえるため。NULLだとエラーになった)、任意のタイミング(date)を想定して、モデルにデータを適用し、評価の高いものをサジェストするスタイルになるのではないでしょうか。

この結果だと、ユーザー98に記事1を見せることに対して4.02点が与えられています。

参考文献

Factorization Machinesを今更読みました
Factorization Machines
High-order factorization machines with R #tokyor 61
Factorization Machinesのおはなし。
libFMexeを動かすまで (R Wrapper for the libFM Executable参照記事)
一歩Matrix Factorization、二歩Factorization Machines、三歩Field-aware Factorization Machines…『分解、三段突き!!』
[論文] Factorization Machines (ICDM 2010) 読んだ 22:41
Factorization machines with r
Factorization Machinesについて調べてみた

人工知能学会全国大会2017のWebマーケティングで参考になりそうな研究9選

はじめに

今更ではありますが、2017年5月に開かれた人工知能学会全国大会2017の公開資料の中から、私の本業であるWebマーケティングで役に立ちそうな研究を独断と偏見で9本ほど集めてみました。思っていたよりもWebマーケティングぽい領域が多かったので、社内での分析業務におけるアイデアに直結しそうな気がしています。

ちなみに、全ての資料はこちらにあります。

基本的に各研究ごとに
・目的と結果
・対象となるデータ
・手法の概要
・PDFのリンク
について記していきます。

紹介する研究

今回は以下の研究を紹介したいと思います。
「オンライン広告におけるスパース性と遅れコンバージョンを考慮した予測モデル」
「テキストマイニングを用いた転職サイトの会員離脱予測」
「インターネット広告におけるスパースなユーザー行動ベクトルからのユーザー特徴抽出モデル」
「ユーザーのページビュー系列からのコンバージョン予測」
「SNSにおけるユーザの行動のモチベーション要因の分析」
「状況に応じた楽曲推薦に向けたソーシャルデータ分析」
「テキストマイニングを用いた口コミ分析による点数評価の信頼性確認手法」
「不動産仲介マーケティングのためのユーザ行動予測」
「SUUMOでの不動産データ活用の取り組みと未来」

オンライン広告におけるスパース性と遅れコンバージョンを考慮した予測モデル

目的と結果

オンライン広告のCVR予測の精度向上を目的としている。
これまでの課題としては、
「質的変数による特徴量のスパース性」
「広告クリックからのCVまでの期間の長さ(期間が空いてからCVしたりするケースがあるので正例だったはずが負例と扱われる可能性がある)」
などがあった。提案手法により従来手法に比べ高い精度でCVR予測が可能であることが示された。

対象となるデータ

過去3週間分の広告配信データでテスト期間は7日間

手法の概要

  • 次元圧縮
    • Factorization Machine(FM)を用いて、従来のロジスティック回帰では考慮できていなかった交互作用をモデリングし、低次元のベクトル内積に分解して表現している。
  • 遅れCV問題の対応
    • 遅れてCVが発生する事象に関しては、指数分布を用いて遅れてCVする事象をモデリングするDelayed Feedback Modelを構築することで、本当は事後的にCVしそうなユーザーの推定を行っている。
  • 予測
    • これらの手法を合わせた、Delayed Feedback Factorization Machineを構築し、SGD(確率的勾配降下法)やAdaGradを用いてパラメータを推定している。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/110.pdf

テキストマイニングを用いた転職サイトの会員離脱予測

目的と結果

登録情報や履歴書のテキスト情報を用いて特徴量とし、転職サイトの登録会員の離脱予測を行っている。ブラックボックスでは無い形での結果の解釈ができ、予測精度も高いことが示された。

対象となるデータ

  • 2009年10月1日〜2016年9月28日までの履歴書、職務経歴書、自己PR書、希望条件
  • 離脱会員の定義は「登録して1ヶ月以内に一度も応募しない会員」としている。

手法の概要

  • STEP1:Pythonのmojimojiというライブラリを利用してカナを全角に、数字とアルファベットは半角に変換。
  • STEP2:MeCabを用いて名詞のみ抽出
  • STEP3:「職務」「経歴」「業務」「内容」などを不用語(stop word)とした。
  • STEP4:Grid Searchでパラメータチューニングしたランダムフォレストを用いて変数重要度(Feature Importance)を出し、重要度の上位90%を占める単語以外を削除
  • STEP5:登録情報のデータ(年齢、転職回数、住所)を数値データに変換
  • STEP6:選定した特徴量を用いて決定木アルゴリズムを適用

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/949.pdf

インターネット広告におけるスパースなユーザー行動ベクトルからのユーザー特徴抽出モデル

目的と結果

広告のCTR予測を行う際の特徴量が非常にスパースであることから、ユーザーをクラスタリングして広告配信に効果的なユーザーを抽出することを目的としている。研究ではCVRの高いユーザー群の抽出を可能にしている。

対象となるデータ

  • 2016年6月1日〜2016年6月21日の間のクリックやコンバージョンのデータ(株式会社アイモバイルが提供)
  • クリック実績のある広告数、コンバージョン実績のある広告数、クリックされた広告番号、コンバージョンが発生した広告番号、ユーザー番号など

手法の概要

  • 高次元スパースデータを低次元に落とし込むために、オートエンコーダを用いている。
  • オートエンコーダにより得られた特徴量をもとにユーザーのクラスタリングを行っている。(オートエンコーダは入力された情報をなるべく欠損しないように、効率的に圧縮する構造を持たせたニューラルネットワークのこと。)
  • データにおけるゼロの成分を確率的に欠損とみなして計算処理を早めている。
  • 学習モデルはAdaGrad(学習率を学習に合わせて最適化する手法)
  • 訓練データ(特徴量の数がクリックで23339個、コンバージョンで5619個)にスパースデータ許容型オートエンコーダで500次元まで圧縮し、さらに通常のオートエンコーダで146次元まで圧縮している。
  • 次元圧縮して獲得したデータに対してk-means法でクラスタリングを行い、CVRなどを比較している。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/12.pdf

ユーザーのページビュー系列からのコンバージョン予測

目的と結果

Web広告において、ユーザーの閲覧履歴からコンバージョンを予測することを目的に、Recurrent Neural Network(RNN)を用いた結果、非時系列のSVMよりもわずかばかりかの精度向上が観察された。データ数が少ない場合はSVMに軍配があがる結果となっている。

対象となるデータ

2016年7月1日〜2016年10月31日の広告の接触履歴データなど(広告の業種別データやユーザーのページビュー数)を特徴量に用いて、2016年11月1日〜11月30日までの期間を予測対象とした。データは株式会社マイクロアドが提供している模様。

手法の概要

  • Long Short-Term Memory RNN(LSTM)
    • ソフトアテンションモデル
      • 可変長の系列に対して内積で重みを算出し、足し合わせることで一部から情報を取り出すモデル。途中の層まで複数業種のデータを用いることで、複数の業種などの情報を共有することができる。(最後の隠れ層には業種別の特徴量を用いている。)
      • 勾配の計算に関してはAdamを用いて、実装はKerasを用いている。活性化関数はTanh、ドロップアウトはGaussianDropout
        としている。
    • RNNで用いる特徴量としては、特定のWebページを640種類に分類して、1日のうちに各トピックにページビューがあったかなかったかを1-0の変数にするなどの前処理を行っている。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/765.pdf

SNSにおけるユーザの行動のモチベーション要因の分析

目的と結果

SNSユーザーのモチベーションの要因(一ヶ月先に投稿するかどうか)をユーザー同士の関係性(staticな関係)と、そのユーザーの周りのインタラクション(dynamicな関係)という観点から分析し、ユーザー同士の関係性とユーザー周りのインタラクションを同時に用いたモデルにおいて、それらがモチベーションの要因につながりうる傾向が観察された。

対象となるデータ

  • RoomClipという部屋の家具やインテリアの様子の写真を投稿するSNSのデータ
    • 気に入った写真に「いいね」を付けたり、コメントを送れる。
  • 2015年3月の一ヶ月間を学習期間とし、2015年4月の投稿の有無を予測対象とする。

手法の概要

  • ネットワーク特徴量
    • 各ユーザーに対して、
      • 中心性(次数中心性、媒介中心性、近接中心性)
      • クラスタ係数、PageRank、フォロー数とフォロワー数の比率、フォローしているユーザのアクティブ度
  • フィードバック特徴量
    • 特定期間中にユーザが周りのユーザから自身の投稿に対してもらった「いいね」「コメント」に対して
      • 反応の数
      • 反応を行ったユーザの数
      • 反応を行ったユーザのうち、相互フォロー関係にあるユーザからのものの割合
  • 予測器としてSVMを利用

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/534.pdf

状況に応じた楽曲推薦に向けたソーシャルデータ分析

目的と結果

ユーザへの楽曲推薦システムの構築を目的に、楽曲とその再生時の状況の関係を収集したソーシャルデータより分析している。取得したデータのうちの7%ほどではあるが、ツィート情報から楽曲と再生時の状況との関係を抽出可能であるということが示された。

対象となるデータ

2016年8月10日〜2016年9月3日の間に投稿されたツィート(66879件)

手法の概要

  • ハッシュタグ#nowplaying付きのツィートを収集して、アーティスト名や楽曲名や楽曲再生時の状況(同一ユーザの5分前後の投稿内容)を収集
  • 取得したツィートからアーティスト名、楽曲名を除去して再生時の状況を取得
  • 取得したデータからデータベースを作成

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/102.pdf

テキストマイニングを用いた口コミ分析による点数評価の信頼性確認手法

目的と結果

製品などの口コミの評価レビューに関する信頼性を確かめることを目的としている。レビューデータに対して感性評価を行い、さらにその結果に対して総合評価点数別に感性表現(Goodなど)の伴った表現の頻出ランキングを作成することで、点数が高い理由を把握しやすくなった。

対象となるデータ

ソニーの製品サイトにおける、ユーザの製品に対する評価とコメントのデータ(1406件)

手法の概要

  • テキストマイニングスタジオによる感性評価(ポジティブ、中立、ネガティブ)
  • 総合評価点数別(5段階)の「ポジティブ、中立、ネガティブ」の割合の調査
  • 総合評価4の口コミかつ中立な表現にフィルターをかけて、感性情報を有する単語と係り受け関係となった単語の頻度ランキングのTOP10を抽出

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/1115.pdf

不動産仲介マーケティングのためのユーザ行動予測 Prediction of user behaviors for real estate brokerage marketing

目的と結果

不動産紹介業において、顧客の属性情報と来店初期の行動から、来店者が最終的に商品を購買するかどうかの予測モデル(不均衡データにおける予測タスク)を構築することでマーケティングの広告効果測定に適用することを目的としている。結果として、顧客の来店後30分間という短い時間における行動だけでも識別力のある予測が可能であることが示されている。

対象となるデータ

  • オンライン不動産賃貸仲介店舗iettyの顧客データベース
    • 希望物件の情報
      • 引っ越し希望日
      • 住みたいエリアの駅
      • 間取り
      • 広さ
      • 家賃
    • 顧客属性
      • 在住の地域
      • 性別
      • 年齢
    • 行動データ
      • 登録時
        • フォームの記入にかかった時間
        • フリーコメントの長さ
        • 利用デバイス
      • 登録後
        • 初回チャット発言までの経過時間
        • 初回物件評価までの経過時間

手法の概要

  • STEP1:顧客の属性および登録初期(30分以内)の行動から特徴量を作成し、2ヶ月以内に契約すれば正例、それ以外を負例とする。(正例は619件、負例は33212件)
  • STEP2:検証用データを無作為に20%取り置く
  • STEP3:残り80%のデータに対して負例に対する、ランダムアンダーサンプリングと、正例に対するSMOTE(Synthetic Minority Over-sampling Technique)を用いたオーバーサンプリングによりサンプル数を調整する。
  • STEP4:ランダムフォレストを用いて、無効な特徴量の取捨選択や離散化のレンジ調整する。
  • STEP5:全特徴量(83次元)を二値化して、RBFカーネル(Gaussian カーネル)のSVMを適用し、様々なCやγの組み合わせを試行して、二値分類を行う。
  • STEP6:評価を予測確率の平均とAUCの2種類で行う。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/466.pdf

SUUMOでの不動産データ活用の取り組みと未来

目的と結果

物件検索ユーザーが比較検討を行いやすくすることを目的に様々な取り組みをしている。

対象となるデータ

  • 不動産ポータルサイトSUUMOのデータ
    • 行動履歴(Webサイト、アプリ)
    • 物件情報(不動産情報)
    • 街情報(独自で収集)
    • アンケート

手法の概要

  • 実活用
    • 相場推定
    • 単純な加算平均ではなく、外れ値や時系列変動、データ量などを考慮して推定している。
    • リアルタイム物件レコメンド
    • ランキング学習により推定したモデルを利用し、リアルタイムに計算を行っている。個人ごとにパーソナライズしたランキングも用いている。
    • バンディットアルゴリズムによる配信施策の最適化
    • メールやプッシュ通知などで件名やデザイン、配信時間など様々な選択肢があり、その最適なパターンを見つけるために、バンディットアルゴリズムを適用している。
  • 実験段階
    • 間取り画像の分析
    • ユーザーの求めている間取りが何なのかを画像から抽出しようとしている。
    • ユーザーの検索行動、嗜好の推定
    • ユーザーの検索行動から、嗜好性を掴み取り、レコメンドする際の理由付けができるようにモデルを作ろうとしている。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/743.pdf

感想

  • 特徴量の削減のためにランダムフォレストを適用する流れ
  • 高次元スパースデータに対するニューラルネットワークの適用
  • CVの時系列予測のためにRNNの適用
  • SNS分析におけるネットワーク特徴量とフィードバック特徴量という概念
  • 口コミデータ分析の作法(点数別に感性表現の係り受けを見る)
    など勉強になりました。Kaggleと違って日本語なのが読みやすかったですね。

参考文献

初めてのディープラーニング –オープンソース”Caffe”による演習付き
SMOTE で不均衡データの分類

Kaggleで使われた特徴量エンジニアリングとアルゴリズムまとめ

Kaggleにおいて、人によってはソリューションを書いてくれているものがあります。特徴量エンジニアリングやアルゴリズムなど業務での参考になるだろうと思われるので、仕事で関わりそうなデータという観点から4つほどですが事例を集めてみました。このような事例のまとまった本とかあったらいいのですが。

基本的に各事例ごとに
・目的
・どんなデータセット
・どんな特徴量エンジニアリング
・どんなアルゴリズム
・リンク
を記していきます。

Walmart Recruiting – Store Sales Forecasting

  • 目的
    • ウォルマートの部門ごとの売上予測
  • どんなデータセット
    • ウォルマートの売上データ
      ・店舗番号
      ・部門番号
      ・週
      ・週次の売上
      ・祝日の有無

      外部のデータ
      ・気温
      ・物価指数
      ・スーパーボウルの時期
      など

  • どんな特徴量エンジニアリング
    • 予測する売上の過去データを用いたので、特徴量は用いていません。

        ・年間における週の番号
        ・高い成長率の店舗や昨年から大きく成長している店舗に関して祝日効果の重み付け 

      を行った程度のようです。

    • どんなアルゴリズム
      • 統計学と機械学習のハイブリッドな手法のようです。SASとRを使用しているとのことです。

          統計学の手法
          1. Auto-regressive Integrated Moving Average (ARIMA)
          2. Unobserved Components Model (UCM)

          機械学習の手法
          3. Random Forest
          4. Linear Regression
          5. K nearest regression
          6. Principle Component Regression

        以上の6つのモデルから平均値をとって予測し、部門ごとにモデルを作ったようです。

    • リンク
    • Algorithmic Trading Challenge

    • 目的
      • 大規模なトレーディングにおけるマーケットの反応を予測
    • どんなデータセット
        • 株式市場の出来高に関するデータ
           ・ask(買い)の価格データ
           ・bid(売り)の価格データ
           ・建値かどうか
           ・買い手か売り手のどちらが主導したか
           ・取引高
           ・時刻
          など
    • どんな特徴量エンジニアリング
      • ・価格
         ・トレンドを除外した価格の振幅
         ・流動性ショック発生前の最後のn回の価格指数の移動平均
         ・流動性ショック発生前の最後のn回の間の価格増加
        ・流動性
        ・スプレッド
         ・bidとaskの広がり
        ・レート
         ・最後のn回のイベントにしめる注文などの数
    • どんなアルゴリズム
      • ・ランダムフォレストを用いた変数選択
         【工程1】
         ・全ての特徴量を利用して訓練する
         ・テスト集合に対するモデルのパフォーマンスを計算する
         ・特徴量の重要度をランク付けする
         ・複数のサブセットから最も変数重要度の高い特徴量セットを作る
         ・最も平均二乗誤差(RMSE)が低いサブセットに決める
         【工程2】
         ・工程1で決めた特徴量から意味的に似ている特徴量を選ぶ
         ・工程1で選ばれていない特徴量を選択する
         ・RMSEが低くなるなら、意味的に似ている特徴量を除外する
         ・改善しなくなるまで続ける
         【工程3】 
         ・工程1〜2で選ばれて意味的に直交(独立)しているかどうか考慮して、工程1で除外されたものの中から特徴量を選ぶ
         ・RMSEが低くなるなら、工程1の特徴量にその変数を加える
    • リンク
    • Predict Closed Questions on Stack Overflow

    • 目的
      • 質問が閉じられるかどうかを予測
    • どんなデータセット
      • ・質問者の質問のその当時の回答数
        ・タイトル
        ・bodyテキスト
        ・タグ
        ・閉じられたかどうか
    • どんな特徴量エンジニアリング
      • ・タイトル、bodyテキスト、タグをVowpal Wabbit formatに変換
        ・ユーザーの評価や投稿数なども利用
    • どんなアルゴリズム
      • Vowpal WabbitというMicrosoftやYahoo!が出資している機械学習ツールを使い、多クラス分類を行ったようです。カテゴリカルな変数をone-hotに変換する必要がなく、楽に分析できるようです。
    • リンク
    • Outbrain Click Prediction

    • 目的
      • ユーザーにレコメンドするコンテンツのクリック予測
    • どんなデータセット
      • ・ユニークユーザーID
        ・ドキュメントID
        ・デバイス
        ・流入経路
        ・クリック
        ・プロモーションしたコンテンツID
        ・ドキュメントの詳細情報
        ・ドキュメントのトピック情報
    • どんな特徴量エンジニアリング
      • 重要な特徴量
        ・表示されてからの1時間後、1日後、1日以降のコンテンツのページビュー
        ・FFM(Field-aware Factorization Machines)を用いて、おのおの競合している広告のデータを作成
        ・ユーザーごとのクリックした際の流入経路やドキュメントの組み合わせ
         80回よりも少ないイベントのデータは切り捨てている
        ・ユーザーごとのページビューしたドキュメント
        ・広告クリックの1時間以内にクリックしたドキュメント
        ・広告のカテゴリーとドキュメントのカテゴリーの相互作用項
        ・現在時刻とドキュメントが表示された時刻との差分の対数
        ・ユーザーが同じカテゴリーや同じトピックの広告ドキュメントを見たかどうか
        ・過去にその広告を見たかどうか、それをクリックしたかどうか(広告主、流入経路、カテゴリー、トピックも同様に)
        ・将来的にその広告や広告ドキュメントを見たかどうか、将来的に見てなくても同じキャンペーンの広告を見ているかどうか
    • どんなアルゴリズム
      • 用いたモデル
        ・LibFFM
        ・Vowpal Wabbit FTRL(ロジスティック回帰でのL1・L2正則化)
        ・Liblinear
        ・XGBoost
        ・Keras
        ・Logistic regression
        ・SVC
    • リンク
    • 感想

      調べてみて、複数の時系列モデルの予測結果の平均値で予測する手法、特徴量の選択をstepAICのようにランダムフォレストで行う手法、Vowpal Wabbit(今回の2つのソリューションで扱われていた)などを新たに知れました。Kaggleには他にもKernelという手法をシェアする場があるので、その情報も今後キャッチアップしていきたいと思います。

      参考情報

      機械学習コンペティションの進展と今後の展開

    SlideShareの機械学習に関するスライドを大量に集めてみた

    SlideShareの検索機能に満足できなかったので、Googleのsiteコマンド検索( 「機械学習 site:slideshare.net 」)で集めてき
    た、機械学習に関するスライド520件のURLに対して、タイトル・ビュー数・公開日をWebスクレイピングにより取得してみました。

    以下の表はビュー数の順番で並んでいます。WordPressのTablepressというプラグインを使っているので、簡単に検索ないし100件表示なども行えます。数の多いものから見ていこうと思います。

    (取得用の稚拙なPythonコードは最下部に載っています。)
    (URLがリンクになるように改良しました。)

    [table id=3 /]

    一応、SlideShareのURLのCSVファイル(N行1列のデータ)があれば取得できるPythonコード(2系)を載せておきます。

    Japan.R 2016のスライドまとめ

    まだ手に入れていないスライドもあるので随時更新しますが、Japan.R 2016(connpass)のスライドをまとめています。後日、登場したパッケージなどのサンプルコードも載せていく予定です。

    目次

    ・石田基広さんのキーノート
    ・ホクソエムとは何だったのか(ホクソエムさん)
    ・Rと探索的データ分析で、国連での日本の立ち位置を可視化する(安田洋介さん)
    ・マウス操作でかんたん予測分析(鈴木了太さん)
    ・高速・省メモリにlibsvm形式でダンプする方法を研究してみた(@hskksk)
    ・Rでてんしょくかつどう(@Med_KU)
    ・RStudio vs Emacs(@y__mattu)
    ・randomforestで高次元の変数重要度見る(@siero5335)
    ・Rで本を作りたい(前田和寛さん)
    ・28歳でプログラミングを始めた話(市川太祐さん)
    ・LDA-Visパッケージのご紹介(@doradora09)
    ・【e2d3R】E2D3からDot-Bar-Chartのご紹介(楠本一哲さん)
    ・このIRのグラフがすごい!上場企業2016(@ito_yan)
    ・Rでカルマンフィルタをしたい(@tetsuroito)
    ・PPAP(仮)(@yutannihilation)
    ・スライド未公開、ユーザーの状態遷移に関する分析のお話(@sanoche16)
    ・私とR(高栁慎一さん)
    ・めくってもめくってもサンプル画像(服部恵美さん)
    ・木と電話と選挙(causalTree)(安井翔太さん)
    ・スライド未公開、dplyrの話(@tomomoto)
    ・てかLINEやってる?(仮)(@wonder_zone)
    ・心理学における「再現性」の問題とBayes Factor(@NSushi)

    ・石田基広さんのキーノート

    スライド未公開です。

    ・Linux使い
    ・ヘブライ語の意味構造を代数学でやっていた
    ・S/R言語の生みの親はJohn Chambers
     以下の二つは最近書かれた本だそうです。
     Software for Data Analysis: Programming with R (Statistics and Computing)
     Extending R (Chapman & Hall/CRC The R Series)
    ・S→S-plus→Rの順番で発展
    ・purrrを最近使い始めたそうです。
    ・XLConnectパッケージを使って、大学教員の採点活動を効率化しているそうです。

    ・ホクソエムとは何だったのか(ホクソエムさん)

    匿名技術者集団ホクソエムの2016年の成果
    ・densratio( densratio: Density Ratio Estimation
    ・githubinstall
    githubinstall: A Helpful Way to Install R Packages Hosted on GitHub
    ・healthplanet( Wrapper package for healthplanet api
    ・RODBCDBI
    RODBCDBI: Provides Access to Databases Through the ODBC Interface
    ・jpmesh( jpmesh: Utilities for Japanese Mesh Code

    起業されたとのことです。懸命に頑張って下さい!
    株式会社ホクソエム

    awesomeな人材が必要とのことで、awesomeな方はアプライしてみてはいかがでしょうか。

    ・Rと探索的データ分析で、国連での日本の立ち位置を可視化する(安田洋介さん)

    スライド未公開です。
    国連のデータを使って、Exploratoryを用いた探索的データ分析の実演をされていました。

    ・マウス操作でかんたん予測分析(鈴木了太さん)

    R AnalyticFlow
    Rで実践!データサイエンス~初めの一歩から高度な応用まで~

    ・高速・省メモリにlibsvm形式でダンプする方法を研究してみた(@hskksk)

    ・Rでてんしょくかつどう(@Med_KU)

    Rmd でreveal.js のhtml スライドプレゼンテーション

    ・RStudio vs Emacs(@y__mattu)

    RStudio vs Emacs Japan.R 2016

    ・randomforestで高次元の変数重要度見る(@siero5335)

    ・Rで本を作りたい(前田和寛さん)

    Rで本を作りたい

    ・28歳でプログラミングを始めた話(市川太祐さん)

    ・医療関連のアプリ開発でデータサイエンスを駆使しようとしているそうです。

    スライド未公開です。
    スライドがシェアされ次第載せます。

    ・LDA-Visパッケージのご紹介(@doradora09)

    ・【e2d3R】E2D3からDot-Bar-Chartのご紹介(楠本一哲さん)

    スライドは未公開です。
    E2D3をRで表示する試みのようです。
    Experiments with e2d3 in R

    ・このIRのグラフがすごい!上場企業2016(@ito_yan)

    スライド未公開です。後日シェアしていただけるようです。

    ・Rでカルマンフィルタをしたい(@tetsuroito)

    ・PPAP(仮)(@yutannihilation)

    ・スライド未公開、ユーザーの状態遷移に関する分析のお話(@sanoche16)

    スライドがシェアされ次第載せます。

    ・私とR(高栁慎一さん)

    RjpWiki
    統計・データ解析
    統計解析フリーソフト R の備忘録頁 ver.3.1
    seekR(R限定の検索エンジン)
    からだにいいもの
    アブラタニブログってなんでしょう。油谷さんのブログ?

    ・めくってもめくってもサンプル画像(服部恵美さん)

    Rのサンプルコードはあるけれども、どんな図ができるのかはわからない。そこで、サンプルコードとグラフを大量にまとめているサイトを作ったそうです。検索性は未知数ですが、暇なときに眺めておきたいですね。
    R Graphical Manual

    ・木と電話と選挙(causalTree)(安井翔太さん)

    ・スライド未公開、dplyrの話(@tomomoto)

    スライドがシェアされ次第載せます。

    ・てかLINEやってる?(仮)(@wonder_zone)

    ・心理学における「再現性」の問題とBayes Factor(@NSushi)

    スライドは後日公開とのことです。

    scikit-learnのモジュールのGitHubでの利用頻度を調べてみた

    『Python機械学習プログラミング』を読んで、scikit-learnのモジュールは充実しているなぁと感じたんですが、実際にWebサイトでUser Guide( http://scikit-learn.org/stable/user_guide.html )を見た所、この本に載り切らないような数多くの機械学習手法に応じたモジュールが用意されていました。そこで、世のデータサイエンティストはどのモジュールを良く使っているのだろうと気になったので、GitHubのSearchでヒットしたCodeの数を各モジュール単位で集計してみました。検索クエリは「scikit-learn + モジュール名」なので、正確なものではないのですが、相対的な利用頻度を見るぶんには使えるのではないかと思われます。

    データ集計方法

    ・User Guideに登場するscikit-learnのモジュール名を集めています。
    ・教師付き学習か教師無し学習かどうかの判断は、User Guideで紹介されているモジュールかどうかで判断しています。
    ・GitHubのSearchで「scikit-learn + モジュール名」でヒットした件数をそのまま使っています。(2016年9月22日時点)

    可視化コード

    Jupyterで実行しています。

    教師付き学習編

    圧倒的に多いのがSVM(Support Vector Machine)を扱っているSVCモジュールで、続いて定番のロジスティック回帰やRandom Forestが使われているようです。統計解析ではメジャーなはずの線形回帰が5位なのは、初歩的なのであまりコードがアップされていないのかもしれません。GBDTのモジュールももう少し上位にくるかと思ったんですが15位でした。DMLCのXGBoostモジュールを使っているのかもしれませんね。私も実際のところXGBoostを使ってますし。

    supervised_module_barplot

    教師無し学習編

    主成分分析やK-mean法など因子分解などのモジュールが上位を占めています。LDA(Latent Dirichlet Allocation)がもっと上位に来ると思ったんですが、思えばGensimの方が充実しているなぁと思うので、このランキングは妥当なのかもしれません。私もLDAなどはGensimを使っていますし。

    unsupervised_module_barplot

    収集を終えて

    ・社内だとデータサイエンティストの方がいないので、scikit-learnのモジュールの利用状況を知れてマニアックな共感をすることができた。
    ・SVMは実践例が豊富そうなので分析事例を探せば良い発見があるかもしれない。
    ・scikit-learnのUser Guideは充実していたので、時間を作って向き合ってみたいと思った。

    XGBoostのパラメータチューニング実践 with Python

    以前の投稿で紹介したXGBoostのパラメータチューニング方法ですが、実際のデータセットに対して実行するためのプログラムを実践してみようと思います。プログラム自体はAnalytics_Vidhya/Articles/Parameter_Tuning_XGBoost_with_Example/XGBoost models.ipynbに載っているのですが、データセットがついていません。そこで、前回の投稿(不均衡なデータの分類問題について with Python)で赤ワインのデータセットを手に入れているので、こちらのデータセットを用います。誤植なのかところどころ、うまく回らなかったところがあったので、手直しをしています。

    以下の工程に従って進みます。結構長いですが、辛抱強く実践してみて下さい。
    ・ライブラリの読み込み
    ・データの読み込み
    ・前処理
    ・学習用データとテスト用データの作成
    ・XGBoostの予測結果をもとに、AUCの数値を返すための関数の定義
    ・モデルの実行
    ・チューニング

    ライブラリの読み込み

    データの読み込み

    前処理

    スクリーンショット 2016-05-15 16.54.58

    学習用データとテスト用データの作成

    XGBoostの予測結果をもとに、AUCの数値を返すための関数の定義

    XGBoostの予測結果から、AUCの数値を返し、特徴量に応じた重要度を出力するためのプログラムです。

    モデルの実行

    feature_importance1

    チューニング

    max_depthとmin_child_weightの数値をチューニングするためのプログラムです。

    より細かい数値で再度最適なパラメータを探します。

    max_depthを8、min_child_weightを1として、他のパラメータチューニングに移ります。
    続いて、gammaのチューニングを行います。

    gammaを0.4と置きます。
    ここで、いままでにチューニングしたパラメータを用いて再度推定を行います。先ほどの0.875よりも高くなっています。

    feature_importance2

    続いて、subsampleとcolsample_bytreeのチューニングを行います。

    より細かい範囲で再度パラメータをチューニングします。

    続いて、reg_alphaをチューニングします。

    範囲が粗かったので、より細かくパラメータをチューニングします。

    これまでにチューニングしてきたパラメータを用いて再度推定を行います。

    feature_importance3

    ブログであるように試行回数を1,000回から5,000回まで増やしてみます。

    88.8%まで向上しました。色々と数値いじっても、1%高めるだけにとどまってしまうのですね。

    feature_importance4

    とにかく、XGBoostをPythonで実行してパラメータチューニングするという一連の試行がこのコードでできそうなので、今後も使いまわしてみようと思います。

    Tokyo.R#53で得たパッケージ情報とその実践

    第53回のTokyo.Rで気になったパッケージの情報と実行例をいくつかあげました。スライドなどもろもろの発表はこちらの方のブログ「第53回R勉強会@東京で発表してきた」が非常に詳しく書かれています。

    【目次】
    ・ggradarパッケージ
    ・proxyパッケージ
    ・因果推論(CBPSパッケージ)
    ・MXNetパッケージ
    ・missForestパッケージ
    ・RFinanceパッケージ

    ggradarパッケージ

    簡単にレーダーチャートを作れるパッケージです。こちらのブログを参考にしています。

    企業の職場環境に関してまとめられた某口コミサイトから4個ほどデータを拝借してきました。

    ggradarをそのまま使おうとすると、Circular Air Lightというフォントが必要だと怒られるので、参考のブログにある通り、OSXの場合はこちらをダブルクリックでインストールして再起動します。

    先ほどのデータに対して、以下のコードを実行すれば非常に簡単にレーダーチャートが作れました。

    company_voice_radar

    proxyパッケージ

    距離や類似度を計算するパッケージです。
    先ほどのデータに対して類似度と距離を計算してみます。

    こんな感じで、類似度や距離の計算ができます。

    因果推論

    こちらはパッケージとかそういうものではなく、既存の関数などで計算できるようです。
    こちらのブログ、「調査観察データにおける因果推論(3) – Rによる傾向スコア,IPW推定量,二重にロバストな推定量の算出」に詳しく書かれています。
    ・glm関数での傾向スコアの算出
    ・傾向スコアを共変量としてlm関数で回帰分析
    ・コードを愚直に書いてIPW推定量の算出
    ・期待値の標準誤差を出すための関数を作成
    ・DR推定量の算出をするための関数を作成
    などで、推定自体は実現できるようです。

    ただし、CBPS(Covariate Balancing Propensity Score)というパッケージがあるらしく、このパッケージを用いれば因果推論の計算を行えるようです。

    Package ‘CBPS’
    以下のようなExampleコードが載っていたので、実行してみましたが、なかなか結果が返ってこなかったので不安になりました。計算が終わるまで10分以上はかかったと思います。

    MXNet

    XGBoostのパッケージを作ったチームが手がけているパッケージで、深層学習を実行できます。

    インストール方法はここに書かれています。
    Deep Learning for R

    あれ、OSXではエラーが返ってきてライブラリが読み込めないですね。どうやら私のためにあるようなブログ「Installing mxnet for R on Yosemite」があったので、時間を見つけてチャレンジしてみようと思います。

    ディープラーニングを用いた回帰分析については、Neural Network with MXNet in Five Minutesにコードがもろもろ載っていますので、チャレンジしてみると良いと思います。

    リンク先に載っているのですが、一応コードを以下に記しておきます。

    missForest

    ランダムフォレストを用いて、欠損値補完を行うためのパッケージです。目的変数が欠損していても適用できるようです。
    詳しくは、スライドを見ていただいた方がいいですが、以下のプログラムで実行できました。ちなみにスライドはこちら、「Imputation of Missing Values using Random Forest

    RFinanceYJ

    Yohei Sato, Nobuaki Oshiro, Shinichi Takayanagiさんたちが作った、Yahoo!ファイナンスの株価データを取得できるパッケージです。だいぶ前からあったようですが、使って分析している人は初めて見ました。どうやらYahoo!ファイナンスの仕様によって書き換えていかないといけないようです。「2015-01-20 Rでチャートを書いてみる(9)」のブログに実行可能なプログラムがあります。以下、実行可能なコードを転載いたします。

    このコードでYahoo!ジャパンの株価を見てみましょう。ちなみに番号は4689です。どうやら上手く取れているようです。

    XGBoostやパラメータチューニングの仕方に関する調査

    【目次】
    ・XGBoostとは
    ・XGBoostで用いるパラメータ一覧
    ・XGBoostのパラメータチューニング
    ・参考文献

    XGBoostとは

    XGBoost (eXtreme Gradient Boosting) は勾配ブースティングアルゴリズムの先進的な実装例で、データサイエンスのコンペであるKaggleで話題となっていた手法です。

    ブースティングアルゴリズムとは、弱識別器(weak learners)の集団を直列的に結合することで、予測における正確性を高めようとするアルゴリズムです。任意のt時点において、モデルの予測は以前のt-1時点での結果に基づき重み付けがなされます。正しく予測されたデータに対しては、重みを小さくし、誤って予測されたデータに対しては重みを大きくします。後で学習する識別器ほど、誤ったデータに集中して学習を進めることになります。

    以下はブースティングのイメージ図です。
    スクリーンショット 2016-04-24 18.40.38

    STEP1では全ての学習データに対して、等しい重み付けで学習を行い、決定境界を引きます。これを弱学習器による学習と言います。このケースでは毒キノコを2つ当てており、キノコを5つ当てています。
    STEP2ではSTEP1で正しく識別されたデータの重みが下げられ、誤って識別されたデータの重みが上げられています。高く重み付けがなされたデータは決定境界で正しく識別されていますが、他のデータは誤って分類されています。
    STEP3においてもSTEP2と同様の傾向があります。このような弱学習器による処理を繰り返すことで識別性能を高めていきます。

    最終的にはこのような決定境界を引くことができるような識別器を求めていきます。
    スクリーンショット 2016-04-24 18.55.53

    勾配ブースティングの勾配とは、ブースティングアルゴリズムにおけるパラメータ推定での最適化手法が勾配降下法に従っているという意味での勾配です。以上が勾配ブースティングモデルの簡素な説明です。

    XGBoostで用いるパラメータ一覧

    XGBoostで用いるパラメータに関して、大きく分けて3つあります。

      1.全体パラメータ・・・XGBoost全体を司る。
      2.ブースターパラメータ・・・各ステップでツリーなどのブースティングを司る。
      3.学習タスクパラメータ・・・最適化タスクを司る。

    以下、3つのパラメータについて、「パラメータ名」・「デフォルトの値」・「役割」・「引数」を表にしています。

    1.全体パラメータ

    パラメータ名 デフォルトの値 役割 引数
    booster gbtree 実行するモデルのタイプをツリーモデルか線形モデルのどちらかを指定できる。 gbtree: ツリーモデル
    gblinear: 線形モデル
    silent 0 モデルの実行結果を出力するかどうかを決めることができる。モデルを理解する上で、0のままにしておく方が良いとされている。 0:出力結果を表示する。
    1:出力結果を表示しない。
    nthread not set 並列処理のためのコア数などを指定できる。フルコアで実行したい場合は何も指定しなければ自動的にフルコアになる。

    2.ブースターパラメータ

    パラメータ名 デフォルトの値 役割 引数
    eta 0.3 学習率を調整できる。
    小さくすることで、モデルの頑健性を高めることができる。
    0.01〜0.2の値になることが多いらしい。
    min_child_weigh 1 子ノードにおいて観察されるデータの重み付けの合計値の最小の値で、過学習を避けるために用いられる。
    高い値にすることで特定のサンプルに観察されるような傾向を学習することを避けられる。ただし、高くし過ぎるとフィッティングが悪くなる。
    max_depth 6 木の深さの最大値
    過学習を制御するために用いられる。
    高いと過学習しやすくなる。
    3〜10の値になることが多いらしい。
    max_leaf_nodes 木の終端ノードの最大値
    max_depthの代わりに用いる
    n本を指定したら、n^2個の枝を生み出す。これが指定された場合は、max_depthは無効化される。
    gamma 0 分割が、損失関数の減少に繋がる場合にのみノードの分割を行う。
    モデルをより保守的にする。
    値は損失関数に応じて大きく変わり、チューニングが必要である。
    max_delta_step 0 各木のウェイトの推定に制約をかけることができる。
    0の場合は制約なしで、正数値を取るとモデルがより保守的になる。
    通常は必要とされないが、不均衡データの分類の際に用いる。
    subsample 1 各木においてランダムに抽出される標本の割合
    小さくすることで、過学習を避けることができるが保守的なモデルとなる。
    0.5〜1の値になることが多いらしい。
    colsample_bytree 1 各木においてランダムに抽出される列の割合 0.5〜1の値になることが多いらしい。
    colsample_bylevel 1 各レベル単位での、分割における列のsubsample比率
    subsampleとcolsample_bytreeで十分なので、あまり使わないが、探索してみるのも良いかもしれない。
    lambda 1 重みに関するL2正則化項
    多くのデータサイエンティストは使わないが、過学習を避けるためには用いられるべき。
    alpha 0 重みに関するL1正則化項
    高次元の場合に用いるらしい。
    scale_pos_weight 1 不均衡データの際に、0以上の値を取ることで、収束を早めることができる。

    3.学習タスクパラメータ

    パラメータ名 デフォルトの値 役割 引数
    objective reg:linear 最小化させるべき損失関数を指定する。 binary:logistic→2項分類で確率を返す。
    multi:softmax→多項分類でクラスの値を返す。
    (num_classでクラス数の指定が必要)
    multi:softprob→softmaxと同じだが、確率を返す。
    eval_metric according to objective 検証を行うためのデータの評価指標 rmse – root mean square error
    mae – mean absolute error
    logloss – negative log-likelihood
    error – Binary classification error rate (0.5 threshold)
    merror – Multiclass classification error rate
    mlogloss – Multiclass logloss
    auc: Area under the curve
    seed 0 ランダムなシード番号。
    再現可能なデータを生み出すために、あるいはパラメータチューニングの際に用いる。

     

     

    XGBoostのパラメータチューニング

    複数のパラメータからなるXGBoostのチューニングは非常に複雑で、理想的なパラメータについてはケースバイケースで何とも言えないそうです。

    参考文献のブログにパラメータチューニングの一般的アプローチについて触れられていたので、紹介します。

      1.相対的に高い学習率を選択する。
      一般的な学習率0.1はうまくいくが、ケースによっては0.05から0.3の間でもうまくいく。学習率を求めるために、クロスバリデーションによって最適な木の数を決定する。
      2.木に関するパラメータをチューニングする。
      固定された学習率や木の数のもとで、max_depth, min_child_weight, gamma, subsample, colsample_bytreeをチューニングする。
      3.正則化パラメータをチューニングする。
      lambda, alphaなどのパラメータをチューニングすることで、モデルの複雑さを減らし、パフォーマンスを高める。
      4.学習率を下げ、最適なパラメータを決定する。

    具体的な実行に関するPythonスクリプトはこちらのGithubで紹介されています。(iPython)
    Analytics_Vidhya/Articles/Parameter_Tuning_XGBoost_with_Example/XGBoost models.ipynb
    この方法に従って、自社で抱えているモデルのチューニングにチャレンジしてみようと思います。

    参考文献

    Quick Introduction to Boosting Algorithms in Machine Learning
    Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python
    Complete Guide to Parameter Tuning in XGBoost (with codes in Python)
    勾配ブースティングについてざっくりと説明する
    xgboost のパラメータ
    OS X で XGBoost & xgboost4j をビルドする手順 2016-03-07 版

    GensimのHDP(Hierarchical Dirichlet Process)をクラシック音楽情報に対して試してみる

    HDP(Hierarchical Dirichlet Process)いわゆる階層ディリクレ過程を実行できるモデルがPythonのGensimライブラリにあるという情報から、あまり実行例も見当たらないので、チャレンジしてみました。

    HDP(Hierarchical Dirichlet Process)

    HDP(Hierarchical Dirichlet Process)は文書集合全体のトピック数と文書ごとのトピック数の推定を行うことができる手法で、中華料理店フランチャイズという仕組みを用いています。通常のLDAなどでは、分析者が任意のトピック数を決める必要がありましたが、与えられたデータからその数を推定するため、その必要がないというのがHDPを使うことの利点であると思われます。

    実行までの流れ

    ざっくりですが、
    ・コーパスの準備・文書の分かち書き(名詞のみ)
    ・HDPの実行
    という流れです。

    ちなみに実行環境は
    MacBook Pro
    OS X Yosemite 10.10.5
    2.6 GHz Intel Core i5
    メモリ8GBです。

    コーパスの準備

    今回は、以前手に入れた某辞典サイトのクラシック音楽情報1800件のテキストデータ(1行に1件分の文字列が入っているデータで16MBくらい)があるので、それをコーパスとして使います。参考情報として挙げているブログの助けを借りて、文書単位でMeCabにより形態素解析で分かち書きした結果から、意味を持ちやすい品詞として、「名詞」に該当するもののみを結果として返す以下のPythonスクリプトを用いました。結果はtmep.txtとして出力されます。もっと良いやり方があると思いますが、目的は達成できると思います。ちなみに、MeCab Neologd(ネオログディー)という、固有名詞などに強いシステム辞書を活用してみたかったので、その利用を前提として書いています。MeCab Neologd(ネオログディー)のインストール関連の情報は参考情報にありますので、チャレンジしてみてください。(OSXかUbuntuの方が進めやすいと思います。)

    こちらのスクリプトをターミナルで実行します。(解析するディレクトリ下で実施しています。)

    HDPの実行

    以下のPythonスクリプトで実行しています。

    HDPの結果について

    topic_detail.csvの結果を見たところ、トピックの数が150個もあって、「本当にトピックの数を自動で決めれているのかなぁ」と不安に思ったのですが、実際に各文書に割り当てられているトピックの数は、先ほど出力したtopic_for_corpus.csvで見ると60個でした。そのため、今回、HDPに従って決まったトピック数は60ということになります。さらに不安に思ったので、Stack Over Flowで調べていたんですが、トピックは150個出るけど確率が割り振られていないはずと回答されていました。( Hierarchical Dirichlet Process Gensim topic number independent of corpus size

    出現頻度の高い上位10のトピックは以下の通りです。

    加えて、トピックごとに文書に割り当てられた数を集計してみましたが、topic0が圧倒的に多く、コーパスの特性上、含まれやすい情報がここに集まっているのではないかと思います。幅広いテーマを抽出できるかと期待していたのですが、やたらと個別具体的な「トゥーランドット」や「ワーグナー」や「カルメン」などがトピックの上位単語に上がってきています。実行方法を間違えているかもしれないし、パラメータチューニングなどをもっと頑張れば、幅広いトピックを得ることができるかもしれないので、今後の課題としたいです。

    スクリーンショット 2016-04-10 18.23.37

    参考情報

    ・トピックモデルについて
    machine_learning_python/topic.md at master · poiuiop/machine_learning_python · GitHub

    ・HDP関連
     models.hdpmodel – Hierarchical Dirichlet Process
    Online Variational Inference for the Hierarchical Dirichlet Process

    ・MeCab関連
    mecab-ipadic-NEologd : Neologism dictionary for MeCab
    形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介
    テキストマイニングの前処理。名詞抽出、ストップワード除去、珍しい単語の除去

    ・Python関連
    データ分析をやりたいエンジニアにおすすめ!Pythonの入門スライド13選