情報工学実験 4 : データマイニング班
- データマイニング班学生公開用Wiki
- 授業内容と方法
- 達成目標
- スケジュール案&目安
- 前半はほぼ毎週事例紹介付き。
- ステージ1(1-3週目): 事前課題報告、Unix思想、環境構築、Python演習、テスト、機械学習体験。
- ステージ2(4-6週目): データマイニング・機械学習外観。
- ステージ3(7-8週目): テーマ設計(アプリケーション検討)。
- ステージ4(9-15週目): グループ開発。オマケ: 自然言語処理入門、Pythonデバッグ。
- ステージ5(16週目〜): 最終発表、公開。
- 参考文献・サイト
- 授業内容と方法
-
データの山を採掘することで「データの中に埋め込まれている(有用な)知識を発掘」することをデータマイニング(data mining)と呼ぶ。別の言い方では、データマイニングは、より良い意思決定をするために履歴データをうまく使って一般的な規則性を発見しようとする研究分野である。
データマイニングの手続きとしては、(1)対象領域の理解、(2)データの準備、(3)パターン(知識)の発見、(4)パターンの事後処理(可視化、解釈など)、(5)結果の活用、といった一連のステップを繰り返すことが多い。
今回の実験においては、(a)機械学習の基本的な考え方を実装&体験を通して学び、(b)scikit-learnによる機械学習を用いたチュートリアルを通してデータ・マイニングを概観する。また、(c)自然言語処理を導入した文書分類や類似文書検索といった例を基に、構造化されていないテキストデータから有用な情報を得るテキスト・マイニングにも踏み込む。最終的には、(d)機械学習をツールとして用いたシミュレーションを通し、プログラミング技術・問題設定・評価・考察といった一連の計算機実験のために必要なプロセスを体験してもらうことを目的とする。
- 達成目標
-
- バージョン管理(Mercurial)、ユニットテスト(tox+pytest, doctestを予定)を用いて開発することができる。
- データ・マイニングのプロセスを踏まえ、各手続きを自動化することで実験を効率良く進めることができる。
- データセットがどのような背景・状況でどのように構築されたのかを解釈し、目的とするマイニングに必要なデータ(特徴/説明変数/素性)の取捨選択を検討/実施することができる。
- 非(半)構造化データに対し、マイニングに適したデータセットを検討/構築することができる。
- 属性選択&構造化されたデータセットに対し、データマイニングを適用することで得られた知識を可視化・解釈する手段について検討/実施することができる。
- (可視化・解釈した結果から有用な知識にについて説明することができる)
- 開発したプログラムを再利用可能な形で公開できる。
- 実験再現に必要なプログラムやデータを整理して用意できる。
- 実験を再現する手順をドキュメントとして用意できる。
- 進め方
-
- ステージ1〜2はガイダンスおよび演習がメインですが、その後は進捗状況を報告してもらい、それに対して指導するという形式になる予定です。
- 2〜4名程度のグループで取り組み、最終アウトプットとしては「ドキュメント付きのオープンソース」として公開することを目標とします。
- 最終課題についての開発は、その全てを他チームに依頼した上でそのチーム感でのやり取りを含めた共同開発を行います。言い換えると、各チームは「(a)自チームの欲しいシステムを他チームに開発依頼しつつ、(b)他チームからの依頼に基づき開発をする」の両方をやることになります。
- 先行事例の参照について。
データマイニング班の過去の事例を含め、論文・書籍・解説・webページ等の先行事例を参照することはカンニングではありません。むしろ推奨されます。例えば追実験(先行事例通りに実装し、結果の妥当性を検証する等)をするというスタンスも良いでしょう。ただし、参考にする際には経緯を払って文献情報を示すことを忘れないように。
- 既存プログラムの利用について。
開発することそのものを含めての実験なので、丸々利用して終わり、という形になるのはNGです。が、利用した上で+αの追加実装(インタフェース改善等でも)やれるのであれば、利用してもらって構いません。なお、最終的にはオープンソースとして公開しますので、ライセンスには十分に気をつけてください。
ステージ1: 事例紹介, 環境構築, Pythonチュートリアル, ユニットテスト
1週目
- 事例紹介: 電子マネー顧客分類のための手法検討と解析結果に関する報告 : 自己組織化マップと協調フィルタリングを用いたクラスタリング (電子情報通信学会技術研究報告. KBSE, 知能ソフトウェア工学, 2006)
- Web&Mercurialサーバ、Wikiのアカウント等について。
- [実験テキスト] 開発スタイルと実験で使う環境: 2016info4dm-w1.pdf (UNIX哲学、実験で使う環境、アジャイル)
- 参考: 研究者流コーディングの極意 (PDF) by 東北大学・岡崎先生
- Level 0 or Level 1: オープンソース概観?
- 環境構築
- 次週予定
- 10/13(火)は月曜日振替えのため、実験は無し。
- 次回: 10/20(火)
- 予定: Python演習(関数, doctest, 機械学習概観, scikit-learn入門)、*参考: 2015年度2週目
- 余裕あれば独習オススメ
- 言語処理100本ノック 2015 *(課題としての)Python勉強や統計・機械学習関連のベースにも。
- Python Tutorial *コード例見ながら学びたいならこっち。
- Python公式ドキュメント: [ 英語版 | 日本語版 ]
- paiza: 初めてプログラミングする人向けの動画講義。課題は自動採点付き。
- 以下は機械学習・データマイニング関連のイントロダクションや事例。
- 第1回 機械学習 ことはじめ (gihyo.jp, 中谷秀洋, 2010)
- 写真共有SNSのユーザーの性別を機械学習で推定するWebアプリケーションをPythonで作ってみよう (CodeZine, yiori, 2015)
- データマイニング概要 by 神嶌敏弘先生の講義資料
- 集合知プログラミング (book, 実装寄り/Python)
- 集合知イン・アクション (book, 実装寄り/Java)
- データマイニング+WEB@東京 (TokyoWebmining) (各種企業さんの事例紹介も豊富)
2週目
- Python演習
- [説明] 演習課題は下記から自由に選択するか、自主設定した課題に取り組む等自由に取り組んでもらっても構いません。目標は「言語処理100本ノック 2015の第1章〜第3章程度を記述できるレベル」です。
- [アウトプット] 個人リポジトリをサーバ(~/HG/2016/e1457xx/exam)に用意し、ローカルで作業後にpushすること。
- 以下、課題例。
- Python演習の補足、演習課題
- docstring + doctest + pydoc
- 言語処理100本ノック 2015 *(課題としての)Python勉強や統計・機械学習関連のベースにも。
- Python Tutorial *コード例見ながら学びたいならこっち。
- 他にもPython-izm (2系列ベースだが3系との比較ページあり)など自由に参照OK。まずは基本を身につけよう。
- Mercurial演習課題: (後で掲載)
- hg init/status/add/commit/push/log/pull/merge/resolve
- 参考: MMercurial の利用 > ローカルリポジトリ
- 次週予定: 機械学習概観、事例紹介+Python続き?ユニットテスト?scikit-learn入門?
3週目
- 事例紹介
- scikit-learn入門: An introduction to machine learning with scikit-learn
- 先週の振り返り: 分類、回帰、クラスタリング、各種用語
- 例題検討: 回帰問題
- [実験テキスト]線形回帰モデルと最急降下法: PDF(復習、scikit-learn入門、モデル、線形回帰モデル、仮説、損失関数、目的関数、最小二乗法、最急降下法)
- 次週予定: 事例紹介、線形回帰モデルの実装演習、Python続き?
4週目
- 事例紹介
- Twitter上で行われる議論構造可視化のためのツイート種別推定・話題クラスタリング手法の検討 (2011年度修士論文, 与儀涼子): "presen:HG/tnal/doc/master2011-suzu.key.pdf"
- 関連記事: 空気を読んで論文を紹介するtwitter-bot 「論文ったー」つくってみた。 - YamadaToshiyukiの日記
- 例題検討: 回帰問題、(クラスタリング)
- [実験テキスト]線形回帰モデル(最小二乗法)の実装演習: PDF(最小二乗法、解法例、クラスデザイン、Numpy+Pythonチュートリアル、グラフ描画)
- コード例: hg clone ssh://info3dm@shark//home/info3dm/HG/2014/tnal/regression
- 関連リンク
- Quickstart tutorial (Numpyのチュートリアル)
- Pyplot tutorial (Matlotlibのチュートリアル)
- Jupyter事始め
- 課題: 「機械学習 はじめよう」の第8回(線形回帰[前編])、第9回(線形回帰[後編])、第11回 線形回帰を実装してみようを読んでくること。
- 次回予定: 過学習(over-fitting)と正則化(regularization)
5週目
- 事例紹介
- 学習指導要領に基づいた設問自動分類タスクにおける分類精度向上に関する研究 (2012年度修士論文, 名嘉真之介): "presen:HG/tnal/doc/master2012-nakashin.pdf"
- Word2Vec:発明した本人も驚く単語ベクトルの驚異的な力
- Googleが「CAPTCHA」を改良、リスク分析により人間と機械を区別 (web記事)
- 先週の振り返り: 線形回帰モデル(最小二乗法)の実装演習: PDF(最小二乗法、解法例、クラスデザイン、Numpy+Pythonチュートリアル、グラフ描画)
- [実験テキスト]線形回帰モデルの多項式拡張、過学習とその回避: PDF (入出力における線形と非線形、モデルの線形性、多項式モデルによる拡張、過学習と代表的な回避手段)
# コード例 hg clone ssh://info3dm@shark.nal.ie.u-ryukyu.ac.jp//home/info3dm/HG/2014/tnal/regression # 先週終了(LinearRegression()まで終了)した状態。 hg update 5 # リビジョン5と6の差分確認 hg diff -r 5 -r 6 # 多項式拡張+描画例スクリプト。 hg update 8 # 演習課題: RidgeRegressionでalphaを変更した際の効果確認。 hg update 16 emacs exercise.py
- 課題: 上記資料31ページ目。regression.RidgeRegression() にて、alpha={0, 0.1, 0.5, 1.0, 10.0} とした際の回帰曲線をプロットせよ。(モデルはsklearn.linear_model.Ridge()を使ってもOKだが、入力を多項式にすることを忘れずに。)
- 次回予定: 機械学習全体の振り返り、グループ作成?
6週目
- 記事紹介
- 怪奇!! 次元の呪い - 識別問題、パターン認識、データマイニングの初心者のために (解説記事): 前編, 後編 (情報処理, Vol.34, No.5, No.6)
- UCI Machine Learning Repository をマイニングする(Machine Learning Advent Calendar 12日目)
- Machine Learning Advent Calendar: [ 2013 | 2014 | 2015 ]
- データマイニング概要 by 神嶌敏弘先生の講義資料
- [実験テキスト]機械学習概観の振り返り: PDF(振り返りのみ)
- scikit-learn演習
- 分類問題
- データセット: digits
- モデル: SVM
- パラメータ調整の例(grid search)
- 回帰問題例1
- データセット1: diabetes
- モデル1: LinearRegression
- 回帰問題例2(オマケ)
- クラスタリング
- 例題としては、分類問題データセットを教師なしデータセットとして扱うか、サンプルデータ生成する。
- 教師あり学習では model.fit(x,y)でパラメータを学習し、推定したパラメータに基づいて model.predict(x) で予測、もしくは model.score(x',y') でモデルの質を評価した。一方、クラスタリングではグルーピング結果が model.labels_ に保存されるため、それを「眺めて解釈することで」評価する。
- クラスタリング問題例
- データセット: iris
- モデル: k-means
from sklearn import datasets iris = datasets.load_iris() data = iris.data target = iris.target # K-means(k=3)でクラスタリングしてみる。 # クラスタリング結果(ラベル付与結果)は estimator.labels_ に保存される。 # 簡易評価として target との違いを目視チェック。 # list[start:end:step] from sklearn import cluster k_means = cluster.KMeans(n_clusters=3) k_means.fit(data) print(k_means.labels_) print(target) # fit する度に labels_ の結果は変わりうる。 # labels_とtargetの出力を比較した結果はどう解釈できる?
- 分類問題
- グループ作成?
ステージ3: テーマ設計(アプリケーション検討)、自然言語処理入門
7週目
- テーマ検討に関する補足
テーマ設計例やMindmapを参考に、目的/目標/アプローチ/特徴ベクトルの作り方/データセット準備/学習の進め方/実験計画等について検討&取り組んでください。(可能な範囲でok)
注意: テキスト処理を組み込む必要はありません。下記はあくまでも例です。
- テーマ設計例: Twitter上のテキスト文を対象とした2値分類学習に基づく未知語自動収集 (PDF:HG/tnal/stage4-examples-unknown-words.pptx.pdf)
hg clone ssh://info3dm@shark.nal.ie.u-ryukyu.ac.jp//home/info3dm/HG/tnal cd tnal open stage4-examples-unknown-words.pptx.pdf
- その他の例: HG/tnal/problem-design-examples.mm
open -a freemind problem-design-examples.mm
- テーマ設計例: Twitter上のテキスト文を対象とした2値分類学習に基づく未知語自動収集 (PDF:HG/tnal/stage4-examples-unknown-words.pptx.pdf)
- (グループワーク報告1: テーマ検討)
- 来週以降の予定
- 8〜15週目: 互いに開発委託(データセット準備2~3週間、実験用コード2~3週間、実験&考察2~3週間)。
参考文献・サイト
- オススメ/ピックアップ
- データマイニング概要 by 神嶌敏弘先生の講義資料
- 集合知プログラミング (book, 実装寄り/Python)
- 集合知イン・アクション (book, 実装寄り/Java)
- データマイニング+WEB@東京 (TokyoWebmining) (各種企業さんの事例紹介も豊富)
- 機械学習 はじめよう
- 開発関係
- データマイニング関係
- データマイニングの簡単な解説
- データマイニングの宝箱
- サーチアーキテクチャ「さがす」の情報科学 (book, 一般寄り)
- 集合知プログラミング (book, 実装寄り/Python)
- 集合知イン・アクション (book, 実装寄り/Java)
- データマイニングによる異常検出 (book, 研究寄り)
- テキストマイニングハンドブック (book, 概観+網羅)
- 第26回 データマイニング+WEB@東京( #TokyoWebmining 26th) -オープンデータ活用・ソーシャ ル・アドテクノロジー 祭り- を開催しました
- Twitterでの番組の評判を番組作りに活かすNHKのつぶやき解析技術 - GIGAZINE
- Webデータ分析&データサイエンスで役立つ統計学・機械学習系の分析手法10選
- リンクするデータ(Linked Data)-広がり始めたデータのクラウド, 情報処理学会誌, 2011: [ 目次一覧 ]
- 「アクセス解析」における5つの真実
- データマイニング概要 by 神嶌敏弘先生の講義資料
- ツイートプロファイリング
- 自然言語処理関係
- Python による日本語自然言語処理
- 入門 自然言語処理 (book)
- 言語処理100本ノック - 東北大学 乾・岡崎研究室
- NLPプログラミングチュートリアル - Graham Neubig - チュートリアル資料
- (有料) 不自然言語処理 -枠に収まらない「リアルな」言語処理, 情報処理学会誌, 2012: [ 目次一覧 ]
- Wikipediaマイニング:Wikipedia研究のサーベイ, 情報処理学会論文誌データベース, 2009
- 利用者の好みをとらえ活かす-嗜好抽出技術の最前線, 情報処理学会誌, 2007: [ 目次一覧 ]
- 機械学習関連
- Jubatus : オンライン機械学習向け分散処理フレームワーク (C++, Python, Ruby, Java)
- 機械学習チュートリアル@Jubatus Casual Talks
- 機械学習の Python との出会い
- scikit-learn: machine learning in Python
- Pythonのscikit-learnでRandomForest vs SVMを比較してみた
- 機械学習 はじめよう : 連載 | gihyo.jp
- 怪奇!! 次元の呪い - 識別問題、パターン認識、データマイニングの初心者のために (解説記事): 前編, 後編 (情報処理, Vol.34, No.5, No.6)
- SVM実践ガイド (A Practical Guide to Support Vector Classification)
- 統計的にインデントするやつ
- 関連学会など
- データセット
- 関連記事
- 空気を読んで論文を紹介するtwitter-bot 「論文ったー」つくってみた。 - YamadaToshiyukiの日記
- Facebookが考えるデータサイエンティストの要件 - 道玄坂で働くデータサイエンティストのブログ
- Hiveで生テーブルを取ってくる→素性ベクトル+分類ラベルのテーブルに直す - 道玄坂で働くデータサイエンティストのブログ
- 「ゲームとTwitterとFacebookしかしないなんてもったいない」、Gunosy開発チーム根掘り葉掘りインタビュー - GIGAZINE
- Evernoteがアプリ開発コンテスト開催へ - 「Evernote Devcup 2013」で求められるエッセンスとは?
- ビッグデータに必須!"数学脳"の鍛え方 (Monthly Interview : 国立情報学研究所 新井紀子教授)
- 靴屋とデータマイニングと季節外れの冬物衣料 - あんちべ!
- データマイニングコンペティションサイト Kaggle にも Deep Learning ブームがきてるかと思ったのでまとめる - 糞ネット弁慶
- Googleが「CAPTCHA」を改良、リスク分析により人間と機械を区別
- 「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側