↓ メインコンテンツへスキップ
  1. 第08講 機械学習(1/3; ベクトル、行列、可視化)/

機械学習とは

機械学習を知る
#

教科書 p.342(Lesson 12)

機械学習(machine learning)は、人工知能(AI)の一分野であり、コンピュータがデータから学習することを可能にする技術です。 機械学習は、データからパターンを見つけ出し、そのパターンを使って未知のデータに対する予測を行うことができます。 機械学習は、データから学習するため、データが豊富であるほど精度が向上します。

Python は機械学習を行うための高度なライブラリが豊富に揃っているため、機械学習のプラットフォームへ多く採用されています。 機械学習のライブラリとしては、scikit-learn や TensorFlow などが有名です。

機械学習は、大きく分けて以下の3つのタイプに分類されます。

  • 教師あり学習(supervised learning)
    • 正解を与えてモデルを構築し、そのモデルをもとに予測を行います。
    • 例えば、画像認識や音声認識など
  • 教師なし学習(unsupervised learning)
    • 正解を与えずにモデルを構築し、データの構造を理解します。
    • データを分類するクラスタリングなど
  • 強化学習(reinforcement learning)
    • 試行錯誤させながらAIの性能を向上させる学習方法です。
    • ゲームAIやロボットの制御など

機械学習の基本的な考え方
#

これらの機械学習の各種手法を理解するには、データの処理方法に加えて、基礎的な統計の知識やデータの可視化方法について理解する必要があります。 以降は、このような基礎的な部分を学習していきます。

便利な Numpy 関数
#

ここでは、 Numpy の便利な関数を紹介します。 Numpy は import numpy as np としてインポートされているものとして読み進めてください。

  • 要素全てが 0 の長さ \(n\)の配列を生成する。
    • np.zeros(n)
  • 要素全てが 0 の \(n \times m\)の行列を生成する。
    • np.zeros((n, m))
    • タプルで配列の次元を指定する。
      • np.zeros((2, 2, 2, 2)) は4次元の行列(要素は全て0)を生成する。
  • 要素全てが 1 の長さ \(n\) の配列を生成する。
    • np.ones(n)
  • 要素全てが 1 の\(n \times m\)の行列を生成する。
    • np.ones((n, m))
  • 1次元の配列(array)を \(n \times m\) の行列に変換する。
    • np.reshape(array, (n, m))
    • ただし、len(array) == n * m である必要がある。
      • 2番目の引数のタプルの次元は、結果となる配列の次元を指定する。
      • 次元数は幾つでも構わないが、全てを掛け合わせた結果が len(array) と等しい必要がある。
  • 配列の最大値の要素を返す。
    • np.max(array)
    • 最小値を求めるには np.min(array)
  • 最大値の要素のインデックスを返す。
    • np.argmax(array)
    • 同様に np.argmin(array) で最小値のインデックスを求められる。

実行例
#

>>> import numpy as np
>>> np.zeros(10) # 長さ10の配列(各要素は 0)を生成する。
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> np.ones(10)  # 長さ10の配列(各要素は 1)を生成する。
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>> a1 = np.zeros((2, 3, 4)) # 2x3x4 の配列(各要素は 0)を生成する。
>>> a1
array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],
       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]])
>>> np.reshape(a1, (6, 4)) # a1 を 6*4 の2次元配列に変換する。
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
>>> np.reshape(a1, 24)     # a1 を 長さ24の1次元配列に変換する。
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0.])
>>> a2 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
>>> np.random.shuffle(a2) # a2 の要素をランダムに並び替える。
>>> a2   # この結果は実行するたびに変わるので、以下の通りにはならない。
array([ 4,  7,  8,  1,  3,  9, 12, 11,  5,  2, 10,  6])
>>> np.max(a2)    # a2 の最大値を返す。
np.int64(12)
>>> np.argmax(a2) # a2 の最大値である 12 のインデックスを返す。
np.int64(6)
>>> np.min(a2)    # 最小値を求めるには min。
np.int64(1)
>>> np.argmin(a2) # 最小値のインデックスを求めるには argmin。
np.int64(3)

リンク
#