LoginSignup
6
6

More than 5 years have passed since last update.

ゼロから始める機械学習(2) どんなデータを使うのか?

Last updated at Posted at 2018-02-26

今回は機械学習で使われるデータはどんなものか?をいくつかの例を使って具体的にみていきたいと思います。

機械学習が中でやっている処理を見る前に、扱われる入力データ出力データがどんなものか見ることで、機械学習に出来ることのざっくりしたイメージを説明できればと思います。

データは全て数字で表される

機械学習への入力データ、出力データは全て数値情報に変換された数値データになります。

具体的にどのような数値データが使われているのか、下記3つを例に説明します。

  1. 試験結果予測
  2. 画像認識
  3. 自然言語処理

試験結果予測

模擬試験の結果を元に、本試験の結果を予測するシナリオを例に説明します。

入力データ

模擬試験の科目が5科目(英語、国語、数学、物理、化学)でAさんの結果が以下の点数だったとしましょう。

英語:70点、国語:80点、数学:75点、物理:58点、化学:75点

点数は数値データなので、変換は行わずそのまま入力します。

5科目なので、5個数字を並べます。これを数学の言葉でベクトルと言います。

(70,80,75,58,75) ← 順番に(英語得点、国語得点、数学得点、物理得点、化学得点)

ベクトルというと難しそうに聞こえますが、単に数字を並べたものです、難しくないです

次に、受験者の現在の所属情報(公立高校、私立高校、予備校)を追加することを考えましょう。

所属情報は数値ではないので、点数のようにそのまま機械学習への入力にすることは出来ませんから、数値データに変換する必要があります。

2次元のベクトルを用意して、それぞれが公立高校、私立高校を表すことにし、所属しているものだけ1にして他は0にすることで数字で所属を表現します。

(1,0) 公立高校 ← 第1要素が公立校
(0,1) 私立高校 ← 第2要素が私立校
(0,0) 予備校  ← 第1,第に共に0で予備校を表す

候補は3つですが両方ゼロの場合は予備校とすることで1次元節約して2次元で表現しています

前に出てきたAさんが私立高校所属の場合、Aさんの情報を表すために試験結果ベクトルと所属ベクトルを合わせた7次元のベクトルで表現します。

(70,80,75,58,75,0,1)

簡単にいうと7個の数値データで表現しています

出力データ・教師データ

出力を合否判定にする場合

合否判定の場合は合格、不合格の2つの選択なので、1次元のベクトルで表現します。

教師データ

合格、不合格を0,1で表します

(1) 合格
(0) 不合格
出力

1次元のベクトルで合格確率を表します。

(0.3) ← 合格確率 30%
(0.9) ← 合格確率 90%

出力を試験点数にする場合

試験点数を予測する場合は出力データ、教師データとも、1次元のベクトルで試験の点数を表現します。

合否判定、試験点数、どちらも学習の際には機械学習の出力データと教師データを比較して正しく予測できているかを確認し、パラメーターを修正していきます(具体的な修正の仕方は今後の連載にて説明します)

画像認識

手書きの数字を識別するシナリオを例に説明します。

入力データ

機械学習で画像を扱う場合は、画像情報を数値で表した画素情報が入力として使われます。

対象の画像の解像度が784ピクセル(縦28 x 横28)の白黒画像(輝度0~255)の場合、784個の画素それぞれのピクセルの輝度が入った画素情報を784次元のベクトルに入れて数値表現します。

(0,23,225,250,0,.......,9,89) ←784次元

要するに256個の数字で画像を表します

カラー画像の場合はそれぞれのピクセルを赤、緑、青の3つの輝度で表すので白黒より3倍のベクトル次元が必要になりますが基本的な考え方は変わりません。

出力データ・教師データ

手書き文字の識別の場合、書かれた数字が0~9のどれかを数字で表すので10次元のベクトルを使います。

(1,0,0,0,0,0,0,0,0,0,0) <=0の場合
(0,1,0,0,0,0,0,0,0,0,0) <=1の場合
(0,0,1,0,0,0,0,0,0,0,0) <=2の場合
(0,0,0,1,0,0,0,0,0,0,0) <=3の場合
(0,0,0,0,1,0,0,0,0,0,0) <=4の場合
(0,0,0,0,0,1,0,0,0,0,0) <=5の場合
(0,0,0,0,0,0,1,0,0,0,0) <=6の場合
(0,0,0,0,0,0,0,1,0,0,0) <=7の場合
(0,0,0,0,0,0,0,0,1,0,0) <=8の場合
(0,0,0,0,0,0,0,0,0,1,0) <=9の場合

機械学習での画像処理についてはこちらの記事もご参照ください
ディープラーニング超概要 なぜ黒魔術と言われるのか?

自然言語処理

日本語を英語に翻訳するシナリオを例に説明します。

入力データ

自然言語を機械学習で扱う場合は単語を入力の単位にするのが一般的です。

日本語英訳の場合は、入力は日本語の単語になります。

単語の場合、語彙数分のベクトルを準備して、その単語に割り当てられた要素だけ1にして他の要素は0にセットして単語を表します。

翻訳対象の日本語の語彙数を1万とすると、1万次元という高次元のベクトルの1要素だけが1でその他が0のベクトルで単語を表現します。

ひとつだけ1で他は全部0なのでone-hotベクトルと呼ばれています

出力データ・教師データ

和文英訳の場合出力は英単語になります。
英単語の場合も語彙数と同じ次元のone-hotベクトルが使われます。

one-hotベクトル、どうしてこんな効率の悪い表現を使うのか?
10,000の語彙を表すために10,000次元のベクトルを使うのは非効率に見えます。

1つの変数の要素を1~10,000にして単語に通し番号ふった方が効率的です。
なぜそうしないのでしょうか?

単語はひとつの数字で表すことが出来るような単純な要素間の大小関係がありません。

お茶という単語と本棚という単語どっちが大きいか?と言われても困りますよね。

機械学習の処理の際も。どの単語も大小関係ないものとして処理をする必要がありますが、例えばお茶に1、本棚に10,000という値をつけてしまうと、機械学習の計算の際にお茶より本棚が10,000倍大きいものとして処理されてしまうのです。

これを避けるために一見非常に効率の悪い表現にみえるone-hotベクトルという表現が使われています。

分散表現
単語の意味を複数の数字で表現するアプローチも存在します。分散表現と呼ばれるものもその一つで、分散表現では単語間の類似度を複数のベクトルを使って表現します。

one-hotベクトルが高次元だが1つの要素以外0なのに対して分散表現は低次元(例えば200次元)の要素(複数の要素が0以外の値を持つ)で単語間の類似度を表現(似た単語は似たベクトルになる)ようにするアプローチです

分散表現については今後の連載の中で詳細を記述する予定です

まとめ

今回は機械学習で扱われる入力データ、出力データがどんなものか説明しました。
次回は機械学習の内部処理について見ていきたいと思います。

バックナンバー
ゼロから始める機械学習(1) そもそも機械学習とは何か?

6
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6