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

内山俊郎 (Toshio Uchiyama)
Last Update: September 20 2023

目次

  1. はじめに
  2. 「わかりやすいデータ解析入門(第2版)」(内山2019)
  3. 演習の進め方(仮想マシンを使う方法)
  4. 演習の進め方(仮想マシンを使わない方法)
  5. 学習支援ページ1
  6. レポート課題支援ページ
  7. 各章の紹介(+講義)用スライド

はじめに

 本ページは,北海道情報大学通信教育科目のデータ解析入門に関する情報, および,教科書の「わかりやすいデータ解析入門(第2版)」(内山2019)の ソースコードやデータ,正誤表やサポート情報を掲載します.
 学習の進め方は教科書の第1〜5章を読みながら行ってください(「学習用プリント集」参照のこと).レポート課題と関連する情報やデータ解析の演習問題があります.なお,教科書ではデータ解析をC++プログラミングにより行っています.もしこれが難しい場合は,本ホームページで用意したJavaScriptアプリを使って実施しても構いません.この場合はプログラミングが不要となります.具体的には上部のメニューから「演習の進め方(仮想マシンを使わない方法)」を選び,アプリケーションのあるページに行って実施してください.
 C++プログラミングを行う場合はプログラミング環境を構築済みの仮想マシンを用意していますので,必要な方は,メニューから「演習の進め方(仮想マシンを使う方法)」を選んで必要な準備をしてください.

演習の進め方(仮想マシンを使う方法)

 本講義では,Linuxマシン上でC++言語を用いた演習を用意していま す.これを動作させるための環境を仮想マシン(WindowsOSやMacOS上で動作する)で用意しました.仮想マシンを動かすためのソフトウェアをインストール後,仮想マシン本体をダウンロードして解凍し,しかるべきアイコンをクリックすれば,演習を実施するための Linuxマシンが動きます.必要な情報(アカウントとパスワードなど)は,下記 に示します.実際の演習をする上で必要となるソースコードやデータファイルも ダウンロードできるようにしています.ソースコードについては,エディタを使っ て打ち込む練習をされることをお勧めしますが,プログラムの講義では無いので, 確実に動作させるために,ダウンロードされるのは,問題ないと考えます. 手順は,以下のようになります.
  1. 仮想マシンを動かすためのソフトVirtualBoxのインストール. VirtualBoxのサイトにあるダウンロードのページから必要なソフトをダウンロードして,インストー ルしてください.
  2. 演習に必要な動作環境が構築済みの仮想マシンをダウンロードしてください.圧縮された仮想マシン7z形式を右クリックして「名前を付けてリンク先を保存」を選んでダウンロードし,この形式の圧縮ファイルを解凍できるソフトウェアにより解凍してください. VirtualBoxを起動し,上部にあるメニューから「仮想マシン→追加」を選択し,先にダウンロードした仮想アプライアンスのフォルダ内の「introData2023.vbox」というファイルを指定してください. この作業を最後まで完了させれば,VirtualBoxに「introData2023」という仮想マシンが登録されます.このマシンが選択された状態で,起動ボタンを押せば,マシンが起動します.
  3. なお,この仮想マシンは64ビットマシンなので,BIOSの設定で 仮想化支援機能がオン(Enable)になっている必要があります.
  4. 仮想マシンにログインするための「ユーザ名とパスワード」は,"user01"と"hiu1989"をお使いください.
  5. 仮想マシンの利用を中断したい場合は,例えば仮想マシンのウィンドウを閉じるボタンを押し, 出てきたメニューから「仮想マシンの状態を保存」を選んでください.これを選べば,次回起動したとき,保存した状態から作業を再開できます.シャットダウンしたい場合は, "sudo shutdown -h now"と入力し,パスワードを聞かれるので,"hiu1989"を入れてください.データ解析をするにあたり,ソースコードやデータファイルは上記仮想マシンのDownloadsフォルダ(user01の)に,圧縮形式(source2019.zip)で置いてありますので,解凍して必要なフォルダにコピーするなどの操作を行ってください.もし自分独自の仮想マシンを使う場合などは,仮想マシンの中からブラウザを起動して, データファイルとソースコードのダウンロードからダウンロードしてください.

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

データ解析は,計算機操作と結びついていますから,計算機スキルは理論と同様 に重要です.さらにソースコードを入力すると,抽象的な理論(数式)の理解に も役立ちますので,是非仮想マシンで演習を進めてください.もし,仮想マシン が使えなかったり,教科書に書かれている概念を手っ取り早く確かめたい場合は, 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.92にあるフルーツポンチの生成実験は,

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

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

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

演習問題5.10は,

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

学習支援ページについて

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

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

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