I.Julia+Junoで機械学習を学ぶ ver. 1
Mediumに、Juliaによる機械学習の解説がありましたので、Juliaの練習もかねて機械学習を学びます。IDE(Juliaのスクリプトを書き、実行する環境)はJunoを使います。プログラムがはじめての方にも読んでいただけるように、できるだけわかりやすく書きます。
JuliaやPythonやRといった言語は単体で使えますが、IDEを使うのが普通です。IDEを使うと何が便利かというと、書いたプログラムが消えないで残るとか、プログラムの一部だけを実行できるとか、作成したオブジェクト(数や文字、表など)を保存し、簡単に呼び出すことができるとか、、、多くの利点があります。
ですから、新たな言語を学ぶさいには、言語と共にIDEもインストールします。Juliaの場合はここで紹介するJunoが初心者にも使いやすいと思います。ちなみに、IDEを複数インストールしても問題ありません。
Junoでは、各スクリプトを実行した結果がEditor(プログラムを書くところ)に表示されますので、スクリプトだけだと何のことかからなくても、実行結果を参照することでスクリプトの意味を推測できます。
次の二つの解説にしたがって学びますが、有料記事ですので紹介は一部のみになります。
Julia For Data Science: Regularized Logistic Regression
II.ライブラリのインストール
どんな言語もベース(そのまま)でプログラムを書くと、多くの場合、複雑なものになります。そこで、よく使う機能はそれを簡略な式ですむように別にプログラムを作っておいて、それを作業するのが効率的です。このように作業を効率的にするためのプログラムのセットがライブラリです。
ですから、例えば、ExcelのファイルをJuliaに読みこむならXLSXというライブラリをインストールしておく必要があります。ライブラリは、箱(Package)に入れて配布されていますので、JuliaでXLSXのパッケージをインストールする式は次のようになります。
Pkg.add("XLSX")
インストールするのは一度でよいのですが、道具を使用するとき道具箱の中から道具を取り出すように、使用することを明示する必要があります。
XLSXを使う式は次です。
using XLSX
今回必要なライブラリーを追加、使用するスクリプトは次です。1行ごとにSshift + Returen(Enter)を押します。行の末尾の歯車の印が現れ作業中であることを示します。作業がおわればチェックの印になります。
Pkg.add("XLSX")
Pkg.add("Plots")
Pkg.add("DataFrames")
Pkg.add("Statistics")
using XLSX
using Plots
using DataFrames
using Statistics
III.データを読み込む
データは次にあります。
https://archive.ics.uci.edu/ml/datasets/combined+cycle+power+plant#
Excel形式のデータでいくつかのシートに分かれています。第5シートを読む式は次です。
# Read the relevant excel workbook
df = DataFrames.DataFrame(XLSX.readtable("/YOURNAME/Downloads/CCPP/Folds5x2_pp.xlsx", "Sheet5")...)
#はコメント行を示す記号で、説明が書かれています。日本語もOKですが、プログラムは基本的に半角文字数字ですので、コメント以外はスペースも含めて半角にしてください。
“と”の間がファイルのフルパス(コンピュータ上でのファイルの完全な住所)です。作業ディレクトリにファイルをおけば、ファイル名だけでよいのですが、はじめは、「作業ディレクトリって何?」、「ディレクトリって何?」ということになるのが普通ですから、フルパスを書くのよいです。
フルパスというと面倒そうですが、書く必要はありません。MacならFinder、WindowsならExcplorerでファイルを見つければ簡単にコピーできます。フルパスの取得方法については次に書きました。
III.機械学習ためにデータを分割する
機械学習の目的は、判定の根拠となるデータから、適切な判定結果を高い確率で算出するモデルを見つけ出すことです。
このため、機械学習のデータは、判定の根拠となるデータ(1列目から4列目)と判定結果のデータ(5列目)が含まれています。
また、ふつう、複数のモデルが作成されるので、どのモデルがよりよいかを判定する必要があります。
このため、学習(トレーニング)のためのデータと、得られたモデルのどれが一番適切かをチェックするためのデータが必要です。
スクリプトの流れは次のようになります。
- ライブラリをaddする。
- ライブラリをusingする。
- データを読み込む。形式は、Data frame(Excelの表のように列名のある表)。
- 計算しやすいように、形式を、Array(たてよこに数字の並んだ表)に変換。
- 判定の根拠とするデータ(1列目から4列目)と判定結果のデータ(5列目)をわける。
- 学習データ(80%)とチェック用データ(20%)にわける。
この結果、トレーニング用データのArrayが2つ、検証用データのVectorが2つできます。
次はJunoのエディタの画面です。式だけを見ているとわかりにくいですが、式の右の集計結果を見れば、式の意味がわかります。
ところで、VectorとMatrixとArrayが出てきてややこしいですが、ここでは、Vectorは1次元(一列に数気な並ぶ)、Matrixは2次元(たてとよこに数字が並ぶ)、Arrayはこの1次元、2次元に加えて、それ以上の多次元の数の並びを含むと考えればよいです。
つまり、2次元のArrayがMatrixで、1次元のArrayがVectorということです。
多次元のArrayというと難しそうですが、インターネットの検索は、意味を数字にして多次元のArrayに並べて三角関数を使って距離を計算し、距離の近いものを見つけ出します。
ですから、直接は見えませんが、私たちは日々Arrayを利用してます。
全スクリプトは次です。
# Import needed libraries
# Use 'Pkg.add("package_name")' to install them
Pkg.add("XLSX")
using Plots
using XLSX
using DataFrames
using Statistics
# Read the relevant excel workbook
# Use 'cd("project_directory")' to change into directory which has the file
df = DataFrames.DataFrame(XLSX.readtable("/YOURNAME/Downloads/CCPP/Folds5x2_pp.xlsx", "Sheet5")...)
# Split into design matrix and target vector
X = df[:, 1:4]
design_matrix = convert(Matrix, X)
y = df[:, 5] # Target vector
# Split into training and test
train_size = 0.80
data_size = size(design_matrix)[1]
train_index = trunc(Int, train_size * data_size)
# Split using the desired train size
X_train = design_matrix[1:train_index, :]
X_test = design_matrix[train_index+1:end, :]
y_train = y[1:train_index]
y_test = y[train_index+1:end]
続く