情報工学実験 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)
- 関連事例: Tポイントの会員データ分析から企業は何を知るのか
- 関連事例: Tポイントは本当は何をやっているのか(2012/9/3)
- Level 0: オープンソース概観の確認
- Web&Mercurialサーバ、Wikiのアカウント等について。
- 開発スタイルと実験で使う環境: 2014info4dm-w1.pdf (UNIX哲学、実験で使う環境、アジャイル)
- 環境構築
2週目
- 参考文献に追加
- (残): Level 0: オープンソース概観の確認
- Python演習
- 公式チュートリアル
- Python演習の補足、演習課題
- docstring + doctest + pydoc
- 他にもPython-izm (2系列ベースだが3系との比較ページあり)など自由に参照OK。まずは基本を身につけよう。
- 機械学習概観: PDF (定義、専門用語、問題設定例、分類、回帰、クラスタリング)
- scikit-learn入門: An introduction to machine learning with scikit-learn
- Mercurial演習課題: (後で掲載)
- hg init/status/add/commit/push/log/pull/merge/resolve
- 参考: MMercurial の利用 > ローカルリポジトリ
- 次週予定: 事例紹介+Python続き?ユニットテスト?scikit-learn入門?
3週目
- 事例紹介
- 日本語オントロジー辞書Ontolopediaの構築と興味抽出手法への応用検討 (2008年度修士論文, 宮城良征): "presen:HG/tnal/doc/master2008-yosshi.key.pdf"
- 共起情報を用いた Web ページを特徴付けるメタデータ生成方式の提案と情報検索への応用 (2009年度修士論文, 小野裕作): "presen:HG/tnal/doc/master2009-yono.pdf"
- 参考文献: ツイートプロファイリング
- Python演習2週目
- 個人リポジトリをサーバ(~/HG/2014/e125700/exam)に用意し、ローカルで作業後にpushすること。
- 公式チュートリアル
- Python演習の補足、演習課題
- 先週の振り返り: 分類、回帰、クラスタリング
- 例題検討: 回帰問題
- 線形回帰モデルと最急降下法: PDF(モデル、線形回帰モデル、仮説、損失関数、目的関数、最小二乗法、最急降下法)
- 次週予定: 事例紹介+Python続き?scikit-learn入門?
4週目
- 事例紹介
- SIFT特徴量から構築した共起情報に基づく一般物体認識手法の提案 (2011年度修士論文, 下地竜雄馬): "presen:HG/tnal/doc/master2011-ryouma.key.pdf"
- Twitter上で行われる議論構造可視化のためのツイート種別推定・話題クラスタリング手法の検討 (2011年度修士論文, 与儀涼子): "presen:HG/tnal/doc/master2011-suzu.key.pdf"
- 関連記事: 空気を読んで論文を紹介するtwitter-bot 「論文ったー」つくってみた。 - YamadaToshiyukiの日記
- 先週の振り返り: 線形回帰モデルと最急降下法: PDF(モデル、線形回帰モデル、仮説、損失関数、目的関数、最小二乗法、最急降下法)
- 線形回帰モデル(最小二乗法)の実装演習: PDF(最小二乗法、解法例、クラスデザイン、Numpy+Pythonチュートリアル、グラフ描画)
コード例: hg clone ssh://info3dm@shark//home/info3dm/HG/2014/tnal/regression
- 例題検討: クラスタリング
- 課題: 「機械学習 はじめよう」の第8回(線形回帰[前編])、第9回(線形回帰[後編])、第11回 線形回帰を実装してみようを読んでくること。
- 次回予定: 過学習(over-fitting)と正則化(regularization)
5週目
- 事例紹介
- 学習指導要領に基づいた設問自動分類タスクにおける分類精度向上に関する研究 (2012年度修士論文, 名嘉真之介): "presen:HG/tnal/doc/master2012-nakashin.pdf"
- Googleが「CAPTCHA」を改良、リスク分析により人間と機械を区別 (web記事)
- 先週の振り返り: 線形回帰モデル(最小二乗法)の実装演習: PDF(最小二乗法、解法例、クラスデザイン、Numpy+Pythonチュートリアル、グラフ描画)
- 線形回帰モデルの多項式拡張、過学習とその回避: PDF (入出力における線形と非線形、モデルの線形性、多項式モデルによる拡張、過学習と代表的な回避手段)
# コード例 hg clone ssh://info3dm@shark//home/info3dm/HG/2014/tnal/regression # 先週終了(LinearRegression()まで終了)した状態。 hg update 5 # 多項式拡張+描画例スクリプト。 hg update 8
- 課題: 上記資料26ページ目。regression.RidgeRegression() にて、alpha={0, 0.1, 0.5, 1.0, 10.0} とした際の回帰曲線をプロットせよ。(モデルはsklearn.linear_model.Ridge()を使ってもOKだが、入力を多項式にすることを忘れずに。)
6週目
- 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の出力を比較した結果はどう解釈できる?
- 分類問題
- 記事紹介
- 怪奇!! 次元の呪い - 識別問題、パターン認識、データマイニングの初心者のために (解説記事): 前編, 後編 (情報処理, Vol.34, No.5, No.6)
- UCI Machine Learning Repository をマイニングする(Machine Learning Advent Calendar 12日目)
- Machine Learning Advent Calendar 2013
- データマイニング概要 by 神嶌敏弘先生の講義資料
- グループ作成?
ステージ3: テーマ設計(アプリケーション検討)、自然言語処理入門
7週目
- 自然言語処理入門(日本語編)
- N-gramモデル + 出現回数による文書ベクトル生成
- 形態素を素性とする特徴ベクトル生成の例: 文分割 + トークン化 + ステミング + ストップワード除去
- 参考: Python による日本語自然言語処理
- code: hg clone ssh://info3dm@shark//home/info3dm/HG/2014/tnal/nlp
- テーマ検討に関する補足
- テーマ設計例: Twitter上のテキスト文を対象とした2値分類学習に基づく未知語自動収集 (presen:HG/tnal/stage4-examples-unknown-words.pptx.pdf)
- その他の例: HG/tnal/problem-design-examples.mm
テーマ設計例やMindmapを参考に、目的/目標/アプローチ/特徴ベクトルの作り方/データセット準備/学習の進め方/実験計画等について検討&取り組んでください。(可能な範囲でok)
- 注意: テキスト処理を組み込む必要はありません。あくまでも例です。
- グループワーク報告1: テーマ検討
- 来週以降の予定
- 〜9週目?: テーマ検討
- 10〜15週目: 互いに開発委託(データセット準備2,3週間、実験用コード1,2週間、実験&考察1,2週間)。
8週目
- 記事紹介
- 自然言語処理入門(英語編)
- 英語編: 文分割 + トークン化 + ステミング + ストップワード除去
- code: hg clone ssh://info3dm@shark//home/info3dm/HG/2014/tnal/nlp
- グループワーク報告2: テーマ検討
- テーマ確定、委託/受託調整
- 来週以降の予定: ToDo / Doing / Done / TaskLists
9週目
- 記事紹介
- 自然言語処理入門(英語編): タギング
- グループ報告: ToDo / Doing / Done / TaskLists
- グループ用リポジトリ
11週目
- クラスタリング補足: PDF
- その他機械学習に限らない工学的/科学的アプローチTips
- 要素還元的手法 vs. 構成論的手法
- KISSの原則(小さく作り、組み合わせる)
参考文献・サイト
- オススメ/ピックアップ
- データマイニング概要 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」を改良、リスク分析により人間と機械を区別