情報工学実験 3 : データマイニング班
- データマイニング班学生公開用Wiki(調整中)
- Slack: ie-univ-ryukyu.slack.com (#info4dm)
- 授業内容と方法
- 達成目標
- スケジュール案&目安
- 前半はほぼ毎週事例紹介付き。
- ステージ1(1-3週目): 事前課題報告、Unix思想、環境構築、Python演習、テスト、機械学習体験。
- ステージ2(3-5週目): データマイニング・機械学習外観。
- ステージ3(6-8週目): テーマ設計(アプリケーション検討)。
- ステージ4(9-15週目): グループ開発。オマケ: 自然言語処理入門、Pythonデバッグ。
- ステージ5(16週目〜): 最終発表、公開。
- 参考文献・サイト
- 授業内容と方法
-
データの山を採掘することで「データの中に埋め込まれている(有用な)知識を発掘」することをデータマイニング(data mining)と呼ぶ。別の言い方では、データマイニングは、より良い意思決定をするために履歴データをうまく使って一般的な規則性を発見しようとする研究分野である。
データマイニングの手続きとしては、(1)対象領域の理解、(2)データの準備、(3)パターン(知識)の発見、(4)パターンの事後処理(可視化、解釈など)、(5)結果の活用、といった一連のステップを繰り返すことが多い。
今回の実験においては、(a)機械学習の基本的な考え方を実装&体験を通して学び、(b)scikit-learnによる機械学習を用いたチュートリアルを通してデータ・マイニングを概観する。また、(c)自然言語処理を導入した文書分類や類似文書検索といった例を基に、構造化されていないテキストデータから有用な情報を得るテキスト・マイニングにも踏み込む。最終的には、(d)機械学習をツールとして用いたシミュレーションを通し、プログラミング技術・問題設定・評価・考察といった一連の計算機実験のために必要なプロセスを体験してもらうことを目的とする。
- 達成目標
-
- バージョン管理(Mercurial or Git)、ユニットテスト(pytest or doctest)を用いて開発することができる。
- データ・マイニングのプロセスを踏まえ、各手続きを自動化することで実験を効率良く進めることができる。
- データセットがどのような背景・状況でどのように構築されたのかを解釈し、目的とするマイニングに必要なデータ(特徴/説明変数/素性)の取捨選択を検討/実施することができる。
- 非(半)構造化データに対し、マイニングに適したデータセットを検討/構築することができる。
- 属性選択&構造化されたデータセットに対し、データマイニングを適用することで得られた知識を可視化・解釈する手段について検討/実施することができる。
- (可視化・解釈した結果から有用な知識にについて説明することができる)
- 開発したプログラムを再利用可能な形で公開できる。
- 実験再現に必要なプログラムやデータを整理して用意できる。
- 実験を再現する手順をドキュメントとして用意できる。
- 進め方
-
- ステージ1〜2はガイダンス・解説および演習がメインですが、その後は進捗状況を報告してもらい、それに対して指導するという形式になる予定です。
- グループで取り組み、最終アウトプットとしては「ドキュメント付きのオープンソース」として公開することを目標とします。
- どのようなタスクに取り組むかはグループ単位で決めてもらって構いませんが、必ず機械学習の適用を含むこと。
- 先行事例の参照について。
データマイニング班の過去の事例を含め、論文・書籍・解説・webページ等の先行事例を参照することはカンニングではありません。むしろ推奨されます。例えば追実験(先行事例通りに実装し、結果の妥当性を検証する等)をするというスタンスも良いでしょう。ただし、参考にする際には経緯を払って文献情報を示すことを忘れないように。
- 既存プログラムの利用について。
開発することそのものを含めての実験なので、丸々利用して終わり、という形になるのはNGです。が、利用した上で+αの追加実装(インタフェース改善等でも)やれるのであれば、利用してもらって構いません。なお、最終的にはオープンソースとして公開しますので、ライセンスには十分に気をつけてください。
ステージ1: 事例紹介, 環境構築, Pythonチュートリアル, ユニットテスト
2週目
- プレ・ガイダンス
- (Webサーバ、Wikiのアカウント等について。)
- (事前課題) Level 0: オープンソース概観
- [事例紹介] 電子マネー顧客分類のための手法検討と解析結果に関する報告 : 自己組織化マップと協調フィルタリングを用いたクラスタリング (電子情報通信学会技術研究報告. KBSE, 知能ソフトウェア工学, 2006)
Google drive:tnal/doc/kbse-tnal.ppt.pdf
キーワード: 前処理, 分類, 自己組織化マップ, 決定木, 協調フィルタリング- Tポイントの会員データ分析から企業は何を知るのか
*このぐらいの目的・用途なら機械学習不要で、分析ツールを使えば良い。10 Minutes to pandas。データサイエンスという呼称と、使いやすさから広まってきたのが pandas x jupyter の組み合わせ。
- Tポイントは本当は何をやっているのか(2012/9/3)
- IkaLogの裏側~「スプラトゥーン」のリアルタイム画像解析はどのように行われているのか
その他 - Tポイントの会員データ分析から企業は何を知るのか
- [実験テキスト1] 開発スタイルと実験で使う環境: 2019info3dm-w1.pdf (UNIX哲学、実験で使う環境、アジャイル)
- 参考: 研究者流コーディングの極意 (PDF) by 東北大学・岡崎先生
- [実験テキスト2] 機械学習概観
- 環境構築
- Python / Numpy / Pandas 演習 *来週?
- [説明] 演習課題は下記から自由に選択するか、自主設定した課題に取り組む等自由に取り組んでもらっても構いません。目標は「言語処理100本ノック 2015の第1章〜第3章程度を記述できるレベル」です。
- [アウトプット] 個人リポジトリを GitHub に用意し、作業後にpushすること。リポジトリ名は自由です。
- 以下、言語処理100本ノック以外の課題例。
- Python演習の補足、演習課題
- 言語処理100本ノック 2015 *(課題としての)Python勉強や統計・機械学習関連のベースにも。
- Python Tutorial *コード例見ながら学びたいならこっち。
- [ paiza | progate ]: 初めてプログラミングする人向け。自動採点機能付きオンライン解説。
- Python公式ドキュメント: [ 英語版 | 日本語版 ]
- Numpy: [ Numpy Quickstart tutorial | Python Numpy チュートリアル ]
- Pandas: [ Tutorials (cookbook, cheatsheet) | 10 Minutes to pandas ]
- 次週予定
- 予定: Python演習続き(関数, doctest, 機械学習概観, scikit-learn入門)、*参考: 2015年度2週目
- 余裕あれば独習オススメ
- 以下は機械学習・データマイニング関連のイントロダクションや事例。
- 第1回 機械学習 ことはじめ (gihyo.jp, 中谷秀洋, 2010)
- 写真共有SNSのユーザーの性別を機械学習で推定するWebアプリケーションをPythonで作ってみよう (CodeZine, yiori, 2015)
- データマイニング概要 by 神嶌敏弘先生の講義資料
- 集合知プログラミング (book, 実装寄り/Python)
- 集合知イン・アクション (book, 実装寄り/Java)
- データマイニング+WEB@東京 (TokyoWebmining) (各種企業さんの事例紹介も豊富)
3週目
- 事例紹介
- Twitter上で行われる議論構造可視化のためのツイート種別推定・話題クラスタリング手法の検討 (2011年度修士論文):
Google drive:tnal/doc/master2011-suzu.key.pdf
キーワード: 分類, 距離補正, クラスタリング, bag-of-words, TF, TF-IDF, Ward法, 決定木, ナイーブベイズ, k近傍法, SVM - 情報工学科総会: [ 情報工学科総会(初イベント)アナウンス2回目 | 情報工学科総会4月21日(水)の要約 ]
- 関連記事: 空気を読んで論文を紹介するtwitter-bot 「論文ったー」つくってみた。 - YamadaToshiyukiの日記
- Twitter上で行われる議論構造可視化のためのツイート種別推定・話題クラスタリング手法の検討 (2011年度修士論文):
- [実験テキスト]: 線形回帰モデルと最急降下法
- Github:jupyter + sklearn 入門 *演習課題: example_plot.ipynb
- おすすめ本: Pythonで動かして学ぶ! あたらしい機械学習の教科書
- Python / Numpy / (Pandas) 演習(1週目参照)
- 次週予定: 線形回帰モデルの実装?
4週目
- 事例紹介
- 学習指導要領に基づいた設問自動分類タスクにおける分類精度向上に関する研究 (2012年度修士論文):
Google drive:tnal/doc/master2012-nakashin.pdf
キーワード: 可視化, 形態素解析, 正規化, 集約 - Word2Vec:発明した本人も驚く単語ベクトルの驚異的な力
- 異空間への埋め込み!Poincare Embeddingsが拓く表現学習の新展開
- 学習指導要領に基づいた設問自動分類タスクにおける分類精度向上に関する研究 (2012年度修士論文):
- [実験テキスト]線形回帰モデル(OLS, GD)の実装演習: PDF(最小二乗法、解法例、クラスデザイン、Numpy+Pythonチュートリアル、グラフ描画)
- 例題検討: クラスタリング => Google drive: stage1-ML-basics / week4-exercises-clustering
- 補足資料1: Github: regression-test
- 補足資料2: Gitによるバージョン管理入門
- 補足資料3: GitHub解説記事の例: [ 今さら聞けない!GitHubの使い方【超初心者向け】 | 「すごいGit楽しく学ぼう」を公開しました ]
- 補足資料4: Progate (Git編)
- 次週予定: 機械学習振り返り、問題検討?
5週目
- 事例紹介
- 怪奇!! 次元の呪い - 識別問題、パターン認識、データマイニングの初心者のために (解説記事): 前編, 後編 (情報処理, Vol.34, No.5, No.6) *時間があれば。
- UCI Machine Learning Repository をマイニングする(Machine Learning Advent Calendar 12日目)
- Machine Learning Advent Calendar: [ 2013 | 2014 | 2015 ]
- データマイニング概要 by 神嶌敏弘先生の講義資料
- データ・セット例
- データマイニング班: 過去の成果物例
- [実験テキスト] 線形回帰モデルの多項式拡張、過学習とその回避: PDF
- 補足資料: Github: regression-test
- 演習: 上記資料29ページ目。regression.RidgeRegression() にて、alpha={0, 0.1, 0.5, 1.0, 10.0} とした際の回帰曲線をプロットせよ。(モデルはsklearn.linear_model.Ridge()を使ってもOKだが、入力を多項式にすることを忘れずに。)
- 次回予定: 振り返り、テーマ検討
以下は2018年度のまま未編集。
X週目
- 事例紹介
- [実験テキスト]
- 先週の振り返り: 線形回帰モデル(最小二乗法)の実装演習: PDF(最小二乗法、解法例、クラスデザイン、Numpy+Pythonチュートリアル、グラフ描画)
- 線形回帰モデルの多項式拡張、過学習とその回避: PDF (入出力における線形と非線形、モデルの線形性、多項式モデルによる拡張、過学習と代表的な回避手段)
- 補足資料1: Github:jupyter + sklearn 入門
- 補足資料2: Github: regression-test
- 課題: 上記資料31ページ目。regression.RidgeRegression() にて、alpha={0, 0.1, 0.5, 1.0, 10.0} とした際の回帰曲線をプロットせよ。(モデルはsklearn.linear_model.Ridge()を使ってもOKだが、入力を多項式にすることを忘れずに。)
- 次回予定: 復習、テーマ検討
ステージ3: テーマ設計(アプリケーション検討)、自然言語処理入門
6週目
- [実験テキスト]機械学習概観の振り返り: 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の出力を比較した結果はどう解釈できる?
- 分類問題
- グループワーク
- グループ作成。
- 実装したい(して欲しい)テーマ検討。
- テーマ検討に関する補足
テーマ設計例やMindmapを参考に、目的/目標/アプローチ/特徴ベクトルの作り方/データセット準備/学習の進め方/実験計画等について検討&取り組んでください。(可能な範囲でok)
注意: テキスト処理を組み込む必要はありません。下記はあくまでも例です。
- テーマ設計例: Twitter上のテキスト文を対象とした2値分類学習に基づく未知語自動収集 (Google drive: tnal/design_examples/*)
- グループワーク報告1: テーマ検討
=> google drive / stage3-groupX / 議事録
- 来週以降の予定
- 7〜15週目: 互いに開発委託(データセット準備2~3週間、実験用コード2~3週間、実験&考察2~3週間)。
ステージ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」の裏側