データ解析入門(北海道情報大学通信教育科目)

内山俊郎 (Toshio Uchiyama)
Last Update: June 25 2019

目次

  1. はじめに
  2. 「わかりやすいデータ解析入門」(内山2016)
  3. 演習の進め方
  4. 演習の進め方(仮想マシンが使えない場合)
  5. VMware Workstation Playerのダウンロードサイト
  6. 仮想マシンのダウンロード
  7. 学習支援ページ1
  8. レポート課題支援ページ
  9. 各章の紹介(+講義)用スライド

はじめに

本ページは,北海道情報大学通信教育科目のデータ解析入門に関する情報, および,教科書の「わかりやすいデータ解析入門」(内山2016)の ソースコードやデータ,正誤表やサポート情報を掲載します.

演習の進め方

本講義では,Linuxマシン上でC++(gnu g++)言語を用いた演習を用意していま す.これを動作させるための環境を仮想マシン(WindowsOS上で動作する)で用 意しました.必要なソフトウェアをインストール後,仮想マシン本体をダウンロー ドして解凍し,しかるべきアイコンをクリックすれば,演習を実施するための Linuxマシンが動きます.必要な情報(アカウントとパスワードなど)は,下記 に示します.実際の演習をする上で必要となるソースコードやデータファイルも ダウンロードできるようにしています.ソースコードについては,エディタを使っ て打ち込む練習をされることをお勧めしますが,プログラムの講義では無いので, 確実に動作させるために,ダウンロードされるのは,問題ないと考えます. 手順は,以下のようになります.
  1. 仮想マシンを動かすためのソフトVMware Workstation Playerのインストール. VMware WorkStation Playerのダウンロードサイトから必要なソフトをダウンロードして (WindowsOSの場合,「VMware Workstation *** Player for Windows 64bit Operating System」と書かれたものをダウンロードしてください.),インストー ルしてください.(動作要件:Windows7以降の64bit WindowsOS)無償版として使う場合,最初の起動時に電子メールアドレスを聞かれます.)
  2. 演習をするための必要なOSとソフトウェアがインストール済みの仮想マシン をダウンロード(2Gバイトあります)し,解凍(LinuxMint182DataAnalysis32bit.exe というファイル内に 圧縮されています)てください.自己解 凍形式になっていますので,ダブルクリックして解凍 してください. 仮想マシンのダウンロード
  3. (上記仮想マシンの動作条件は,メモリが4GB以上搭載されたマシン用です. メモリ2GBでも十分動作するコンパクトな仮想マシンは,こちらです.以下の 説明では,ファイル名などが多少異なります.適宜読み替えてください.)
  4. 仮想マシンの立ち上げは,上記解凍により作成されたフォルダ "LinuxMint182DataAnalysis32bit"内にある,"LinuxMint182DataAnalysis32bit.vmx"をダブ ルクリックしてください(拡張子を表示するようにフォルダのプロパティ を変更してください).立ち上げ中に,「移動しましたか?コピーしま したか?」と質問されますので,「コピーしました」を選択してください.
  5. 仮想マシンにログインします.「ユーザ名」は"user01"ですので,画面上 の"user01"をクリックします.その時パスワードを求められるので,"hiu1989"と入 力し,「ログイン」をクリックしてください.
  6. 仮想マシンの利用を中断したい場合は,VMwareWorkstationPlayerのWindowの上 部にある"‖"ボタンを押してください.VMwareのホーム画面に戻るので, ウィンドウを閉じてください(右上の×をクリックする).初回以降で仮 想マシンを利用する場合は,VMware Workstation Playerアイコンをダブルクリックして, ホーム画面を立ち上げ,左側にある「ホーム」の下にある 「LinuxMint182DataAnalysis32bit」をダブルクリックする方法が便利です.(初回 立ち上げ時と同じ方法でも構いません.)中断した場合は,中断直前の状態から 再開できます.シャットダウンしたい場合は,"sudo shutdown -h now"と 入力し,パスワードを聞かれるので,"hiu1989"を入れてください. (なお再起動する場合は,"sudo reboot"と入力してください.)
  7. 演習で使うデータファイルとソースコード一式を用意しました.仮想マシン においてブラウザを立ち上げて本サイトを開きダウンロードし,解凍 (unzip コマンドにより)してください. データファイルとソースコードのダウンロード

演習の進め方(仮想マシンが使えない場合)

データ解析は,計算機操作と結びついていますから,計算機スキルは理論と同様 に重要です.さらにソースコードを入力すると,抽象的な理論(数式)の理解に も役立ちますので,是非仮想マシンで演習を進めてください.もし,仮想マシン が使えなかったり,教科書に書かれている概念を手っ取り早く確かめたい場合は, JavaScriptで実装したアプリケーションをご利用ください.

第3章クラスタリングにおいては,

[手動クラスタリング]
[ 北海道市データのアルゴリズムによるクラスタリング]
[ 北海道市町村データのアルゴリズムによるクラスタリング]
の3つのアプリケーションを用意しました.

演習問題3.1の「手動によるクラスタリング」は,

[手動クラスタリング]
を使います.左上に表示されている北海道の35市をラジオボタンにより,4つの クラスタへ手動で分割してください.クラスタラベルを変えると,対応する北海道地図の座 標の色が変わります.これにより「クラスタリングとは,データをクラ スタに分割することで,各データにクラスタラベルを付与すること」 を実感してください.中程にある[重みベクトル更新]を押すと,クラスタの重心 が計算され,続いて入力ベクトルとそれが属するクラスタの重心との平方和の和 であるクラスタ内平方和Jwが計算されます.これは,プログ ラムではcalcJwを用いて算出するものです.ところで, [重みベクトル更新]ボタンのすぐ上にある 「重みベクトルの表示:□」のチェックボックスをチェックすると,重心の位置 が地図上に□で表示されますので,お試しください.

演習問題3.2の「ランダムなラベリング」も,

[手動クラスタリング]
を使います.今度は,中程にある[初期化]と書かれたボタンを押すとランダムに 色分けされる(クラスタリングされる)ことがわかると思います.乱数の初期値 を上部にある[乱数初期化の種]のところで変更してから初期化ボタンを押すと, 結果が変わるのがわかるはずです.また中程にある[重みベクトル更新]ボタンを 押すと,重心とクラスタ内平方和Jwが再計算されます.次に, このアプリケーションを使い,3.3節の k-meansアルゴリズムの原理を実感してみましょう. 上部のクラスタ数Kボタンのすぐ下にある 「ラベル更新ボタンの表示:□」のチェックボックスをチェックすると, [ラベル更新]ボタンが出現します.[ラベル更新]ボタンを押すと, 各入力ベクトル(市の座標データ)のクラスタラベルが,最も近い重みベクトル に対応するものに更新されます.地図上で色が変わるので確認できるはずです. また,新たに出現した量子化誤差Eqも再計算されます.量子 化誤差は,各入力ベクトルから最も近い重みベクトルとの2乗誤差を足しあわせ たものです(クラスタ内平方和と似ていますが,少し違います).
[初期化]ボタンを押した後, [重みベクトル更新]と[ラベル更新]を交互に押すことにより, 手動で k-meansアルゴリズムを試すことができます.ボタンを押すたびにJwあ るいはEqは小さくなり,最後には変わらなくなる(収束する)ことが確認できる はずです.

演習問題3.3の「k-meansによるクラスタリング」,3.5の 「compLearnによるクラスタリング」を実施するには,

[ 北海道市データのアルゴリズムによるクラスタリング]
[ 北海道市町村データのアルゴリズムによるクラスタリング]
を使います. [k-meansアルゴリズム]や[競合学習]ボタンを押せば,それぞれ k-meansアルゴリズム競合学習で クラスタリングされます.どちらのアルゴリズムについてもクラスタ数 や乱数初期化の種を変えることができます.また,競合学習については,学習率 を変えることができます.なお,与えることができる値には,上限と下限があります.

第4章識別関数の学習においては,

[修正パーセプトロンによる学習]
を用意しました.

演習問題4.1を実施するには,

上記アプリケーションを使います.まず,学習パターン(教師データ)を作るた めに,[k-meansアルゴリズム]ボタンにより,クラスタリングをしてください. このクラスタリング結果を学習パターン(教師データ)として,modPerceptron により識別関数を学習するには,[修正パーセプトロンによる学習]ボタンを押し てください.学習結果は,ボタンのすぐ下に表示されています.「最終の学習回数 nLearn=0」となっていれば,無事収束したという意味になり,収 束に要した回数がic=数字で表示されます.学習率を変えれば,収 束までの回数が変わったり,収束しなくなったりします.また,北海道の図のす ぐ上にある「□重みベクトルの表示」にチェックを入れると,重みベクトルが表 示されるようになります.修正パーセプトロンの学習前後で,重みベクトルが 地図上で変化する様子が確認できます(学習するのは重みベクトルです). [重みベクトルによるボロノイ分割]のボタンを押すと,学習した重みベクトルに より,入力ベクトルを分割します.もともと,パーセプトロンは,学習パターン が正しく分割されるように重みベクトルを学習しますので,収束した場合は, 変化がありません.重みベクトルだけが学習前後で動くのが確認できるでしょう.

演習問題4.2を実施するには,

同じアプリケーションにおいて,クラスタ数を2にし,重みベクトルの値を実 際に入力して,[重みベクトルによるボロノイ分割]ボタンを 押してください.正しく重みベクトルを設定すれば,思ったように北海道を分割 できるはずです.

第5章確率論と確率モデルにおいては,

[フルーツポンチのモデル]
を用意しました. クラス数(フレーバー数)K=4, 特徴の次元数(果物の種類数)M=7や,実際の事前確 率(すべて0.25),フルーツのブレンド割合(表5.2)の値は,教科書と同じで, 固定しています.

p.90にあるフルーツポンチの生成実験は,

中程にある [フルーツポンチ(果物の入ったボウル)の生成genPunch]ボタン を押すと実施できます.textareaに生成結果が表示されるはずで す.このアプリケーションで生成される乱数系列は,c++と異なる ため,教科書とは違う結果になります.ボウル数,ボウルあたりの果物数,乱数 の種を変えて,実験して見てください.

p.93にあるボウルを取り出した「壺」の推定実験,および演習問題5.8, 5.9は,

[フルーツポンチを取り出した壺(フレーバー)の推定estPot] ボタンを押すことで,上部テキストエリアで生成されている各行のフルーツポンチ について,取り出した壺を推定します.教科書と同じく,フルーツポンチの確率 モデルは,生成時と同じです.演習問題5.8も,同じ要領で実施できるはずです (わからない時はp.217の解説ページを見てください).さらにフルーツポンチ の生成と壺の推定を組み合わせれば,演習問題5.9も実施できます.

演習問題5.10は,

ボウル数,ボウルあたりの果物数,乱数の種を適宜変化させ, [フルーツポンチ(果物の入ったボウル)の生成genPunch ]ボタンに よりフルーツポンチを生成してから, [フルーツポンチ(果物の入ったボウル)の生成genPunch ]ボタンに により,モデルパラメータを推定してください.教科書で示しているヒン トを参考にして,ボウル数やボウルあたりの果物数を色々と変えて実験してくだ さい.ヒントにある最大のボウル数とボウルあたりの果物数を指定した場合でも, PCやiPad(推定に25秒かかりました)での動作を確認しました.推定結果が下の表に示されるので,誤差などを評価してください.

学習支援ページについて

学習支援ページを用意しましたので,参考にしてください.
  1. 学習支援ページ1

各章の紹介(+講義)用スライド

このスライドは,仮想マシンが使えない場合を想定した講義用です.矢印キーでページの移動ができます. すべての方に向けたものではない点,随時更新される点,などご了承ください.