Aidemy 2020/10/28
はじめに
こんにちは、んがょぺです!バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます!
今回は、教師なし学習の投稿になります。どうぞよろしくお願いします。
*本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。
今回学ぶこと
・教師なし学習について
・教師なし学習の種類
・数学的な事前知識
教師なし学習
教師なし学習とは
・教師あり学習は、クラスラベルと呼ばれる「答え」が与えられて学習が行われるが、教師なし学習はこの答えを渡さず、コンピュータ自身が判断して学習するものである。
・今回は、この教師なし学習の中の「クラスタリング」と「主成分分析」という手法について学ぶ。
クラスタリング
・クラスタリングとは、データを塊(クラスター)ごとに分割する手法である。
・クラスタリングの一手法である「k-means法」は、人がクラスターの個数を決め、コンピュータがその個数になるようにデータを分割するものである。
・また、k-means法では「重心」と呼ばれる点の位置が適切になるように学習し、これに基づいてクラスタリングを行う。
主成分分析
・主成分分析とは、データの次元を減らして(次元削減)一つのグラフに情報を集約させる手法である。
・主成分分析では、データの特徴を特に示す(主成分)軸を学習し、定めるという流れで行われる。
・例えば、「年齢、身長、体重」の3つの異なるデータから軸を定め、「個人データ」という形で2次元のグラフで表すというものが挙げられる。
教師なし学習の事前知識
ユークリッド距離
・二次元空間上の二点(x1,x2),(y1,y2)間の座標距離は
$\sqrt{(x_1-y_1)^2+(x_2-y_2)^2}$
で求めることができる。
・同様にn次元空間上の2点(x1,x2...xn),(y1,y2...yn)間の距離は
$\sqrt{(x_1-y_1)^2+(x_2-y_2)^2+...+(x_n-y_n)^2}$
で求められる。この距離のことをユークリッド距離(ノルム)という。
・以下のように、NumPyでユークリッド距離を求められる。(np.linalg.norm() は「()内の二乗の和」を表す)
コサイン類似度
・二つのベクトルがどのぐらい似ているかを評価するとき、「長さ」と「方向」の類似性から判断される。
・このうち方向に注目すると、二つのベクトルの作る角度「θ」が小さければ小さいほど類似性が高いと言える。
・θの求め方としては、ベクトルの内積の公式 $\vec{a} \cdot \vec{b} = |\vec{a}|\, |\vec{b}| \, \mathrm{cos}\theta$ を発展させて、cosθを求めることでわかる。この手法のことを「コサイン類似度」という。
・この時のcosθであるが、cosθは値が大きいほどθが小さくなることに注意。
・また、コサイン類似度もn次元のデータに対応している。
・コードでは、NumPyで求めることができる。(np.dot()は「各要素の積の総和」を表す(以下で言うと、1*2+2*3+3*4))
まとめ
・教師なし学習は正解ラベルを渡さずにコンピュータ自身が判断し学習する手法である。
・教師なし学習には「クラスタリング」と「主成分分析」がある。前者はデータをクラスターごとに分割する手法であり、後者は、次元削減することで一つのグラフに情報を集約させる手法である。
・教師なし学習では、「ユークリッド距離(ノルム)」や「コサイン類似度」でデータの類似性などを判断することがある。
今回は以上です。最後まで読んでいただき、ありがとうございました。