はじめての機械学習入門

はじめに

こんにちは。deepblueインターン生の羽入です。今回は機械学習をほとんど知らなかった私が数か月機械学習に触れてみて感じたことや、分かったことをお伝えしていきたいと思います。

対象者

  • 機械学習についてよくわからない人
  • 機械学習の全体像を把握したい方
  • 機械学習の学習未経験者、または初心者

この記事を読む必要がない人

  • 機械学習に詳しい方
  • ある程度知識を有している方
  • 実際に機械学習を用いている方

この記事から何を得られるか

機械学習やAIなど昨今では、ビジネスシーンでも多く使用され、もはやなくてはならない存在です。また2020年には約40万人、2030年には約60万人のエンジニア不足が起こると予測されていますが、その不足の原因もAIやIoTが応用される分野が広がっているからに他なりません。そこで今回の記事を通してそのAIの開発のもとになっている機械学習について知っていきましょう。機械学習の具体例などを多く知っていくことで、自分自身と関連のある分野への応用が利くことや、AIの可能性について広く知っていけると思います

身近に使われている機械学習

  • 迷惑メールの判定
  • ショッピングサイトの「あなたへのおすすめ機能」
  • トップ棋士に勝利したAlphaGO

機械学習とは

機械学習とは数多くのデータから自動的に共通点や法則を見つけだし、そのデータを分類したり、また予測を立てるシステムのことです。機械学習は大きく分けて3つの分野に分かれています

教師あり学習

教師あり学習とは正解付きのデータを大量に読み込ませて、その正解のデータからなぜそのデータが正解なのかの特徴量を抽出して、新たにデータを与えられてそのデータが正解かどうかを判定させるシステムです。
例えば、先ほど例に挙げた迷惑メール判定や、犬の写真の判定です。そうするとどうしてこの画像は犬になるのか?という画像の中の犬の特徴量を探し出して、次に画像が与えられたときに犬かどうかを判別する。つまり答えが先に与えられていてその特徴を探し出すのが教師あり学習です。

教師なし学習

教師なし学習は正解のないデータで機械学習を行うことです。システムに大量のデータを読み込ませて特徴量を求め、その特徴量にしたがって分類するシステムのことです。
例えば、動物の画像を大量に与えて、自動的にその与えられた動物の特徴量を探し、特徴量に応じて動物を振り分けます。どんな動物に振り分けるか決まっていないのでこのシステムの事を教師なし学習と言います。

強化学習

強化学習とは現時点でのプログラムの周りの状況から、データを読み取り報酬が高くなるようにどういう行動をすればいいかを学習しながら、全体で報酬が最も高くなるように自動的に学びながら成果を出していくモデルです。具体例としてエレベーターがどう行動するのが待ち時間の短縮につながるかのシステムや、先ほど例をあげたAlphaGOなどが当てはまります。

実際に機械学習をやってみた。

今回は教師なし学習の有名な手法であるk-means法をやってみました。
k-means法を説明します
①データの集まりの中から分けたい集団と同じ数だけ(今回は2にします)の中心点をランダムに決めてしまいます。
②その適当にとった2つの中心点に近い点たちを、中心点ごとにグループ化します。
③2つのグループ内の重点(中心点)を決める。
④2つの重点に近い点に基づき再度グループ分けします。
⑤この③、④を変化がなくなるまで繰り返す。
結果、上手く2つのデータのグループに分けることができます。
文字の説明だけでは分かりづらいと思うので以下のURLで実際に体感できます。
URL: http://tech.nitoyon.com/ja/blog/2013/11/07/k-means/
そしてこれからk-means法の実装をしていきたいと思います。
プログラミングにあまりなじみがない方は何をやっているかわからないかもしれませんが、そのコードを知ることで、こんな感じで機械学習が行われているんだ。と知っていただけると思います。

# 必要なライブラリを読み込みます。
import numpy as np
import numpy.random as random
import scipy as sp
from pandas import Series, DataFrame
import pandas as pd

# 可視化モジュール
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
%matplotlib inline

# 機械学習モジュール
import sklearn

# 小数第3まで表示
%precision 3
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

データを作成する。今回はわかりやすいようにわかりやすいデータを用いました。

X,y = make_blobs(random_state=50)
plt.scatter(X[:,0],X[:,1])

kmeans= KMeans(init ='random',n_clusters = 2)
kmeans.fit(X)
y_pre = kmeans.fit_predict(X)
merge_data = pd.concat([pd.DataFrame(X[:,0]),pd.DataFrame(X[:,1]),pd.DataFrame(y_pre)],axis =1)
merge_data.columns = ['element1','element2','cluster']
# グループごとにデータをわける
merge_data_cluster0 = merge_data[merge_data["cluster"]==0]
merge_data_cluster1 = merge_data[merge_data["cluster"]==1]
ax =merge_data_cluster0.plot.scatter(x='element1', y='element2', color='red', label='cluster0');
# 色をそれぞれ分ける
merge_data_cluster1.plot.scatter(x='element1', y='element2', color='blue', label='cluster1',ax=ax);


これでk-means法は完成です。

まとめ

今回は比較的有名な教師なし学習のk-means法をやってみました。機械学習と聞くとものすごい敷居が高く感じる方も多いと思います。私自身もそうでした。しかしすこし勉強するだけで基礎を理解することは可能なので、私が紹介した分野の中で興味がでた方は、色々調べてみると面白いと思います。読んでいただきありがとうございました。