2015/09/23 19:13
|
実践 機械学習システム まとめ(1)
|
### 前置き
機械学習を勉強する!という目標を今年掲げていたので、オライリー社の「実践 機械学習システム」を買って積み本していましたが、ブログが完成したので備忘録として残していこうと思います。
<center>
<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4873116988/ref=as_li_tf_il?ie=UTF8&camp=247&creative=1211&creativeASIN=4873116988&linkCode=as2&tag=koucs06-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4873116988&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=koucs06-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=koucs06-22&l=as2&o=9&a=4873116988" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
</center>
### 1章 Pythonではじめる機械学習
#### 1.1 機械学習とPythonはドリームチーム
pythonと機械学習が相性が良いと呼ばれる所以は2つある。
1. 動的型付きの言語である
* pythonがインタプリタ型の言語であり、C言語等の静的型付け言語に比べると処理速度は遅いが、入力データの型が不定である場合の多いデータ解析分野では動的型付けの言語のほうが相性が良い。
2. 豊富なライブラリ
* これに関しては他言語にも同様のものがある場合も多いが、__NumPy__や__SciPy__といった数学的処理を補助するライブラリが豊富であるPythonは相性が良い。
本書ではこのように述べられているが、Ruby・Perlあたりでも同様のことができそうな気もしいます。
#### 1.2 本書が扱う内容
>
一見、機械学習であるようなカッコ良いこと、SVM(Support Vector Machine)やNNS(Nearest Neighbor Search)を使うことやそれらの組み合わせを考える時間は、機械学習のエキスパートにとって全体の作業の時間のほんのわずかな時間しか占めない。
<br />
##### 作業の流れ
1. データを読み込み、データを整形する
2. 入力データの調査および解釈を行う
3. 学習アルゴリズムにどのような形でデータを入力するのがふさわしいか分析を行う
4. 正しいモデルと学習アルゴリズムを選択する
5. 結果に対して正確な評価を行う
> データを機械学習に最適化させる形で改良することを「特徴エンジニアリング(feature enggineering)」という。
**【本文より】**
コーディング等を行う際は、設計段階に一番時間を用いるのと同じで、機械学習においてもデータを最適化させて学習アルゴリズムを最大限に活用するということが重要。
#### 1.3 困ったときは
機械学習に関してのQ&Aサイトがまとめられていました。
#### 1.4 はじめに
主に環境構築に関しての説明パート。
__Python (バージョン 2.7以上)__
* 数値計算用ライブラリ
* NumPy
* SciPy
* グラフ等視覚化
* Matplotlib
自分は 以下の環境を構築しました。
``` bash
[vagrant@localhost ~]$ python --version
Python 2.7.9
[vagrant@localhost ~]$ pip list
matplotlib (1.4.3)
numpy (1.9.2)
pip (7.1.2)
scipy (0.16.0)
```
注意として、本書は環境構築の詳細は掲載されておりません。
自分で調べ、環境構築を行ったうえで学習していく形になります。私の場合、Ruby等でライブラリ管理に慣れてはいましたが、少々手間がかかりました。
本まとめでは割愛します。
##### 1.4.5 NumPy入門
NumPyを用いたリスト操作などの方法が簡単に述べられています。下の例はNumPyで配列を作る例です。この他に、NumPyの配列とPythonのリストを用いた計算の処理速度の比較を紹介している項目等が掲載されています。
```
[vagrant@localhost ~]$ python
Python 2.7.9 (default, Sep 8 2015, 21:05:24)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import numpy as np
>>> b = np.array([0,1,2,3,45,5])
>>> b
array([ 0, 1, 2, 3, 45, 5])
>>> b.ndim
1 # 次元数
>>> b.shape
(6,) # 配列数
```
##### 1.4.5 SciPy入門
>
SciPyはアルゴリズムを提供するライブラリであり、数値計算に関する書籍に載っているアルゴリズムならば大抵のものがSciPyで実装済みである。
本書で扱っているパッケージはscipy.stats(統計)と、scipy.interpolate(補間)、scipy.cluster(階層クラスタリング)、scipy.signal(信号処理)です。基本的な操作方法はアルゴリズムを学びながらという形です。
### ここまでのまとめ
本書では最初の章でデータ整形の重要性・データ整形と相性のいいプログラミング言語とパッケージを紹介しています。
次回以降は実際にデータを入力し、それをNumPy・SciPyで扱っていくということを行っていきます。