機械学習にはいろいろな手法があります。
イメージがつきやすいので、最初に学習するのは「回帰分析」がオススメです。
「回帰分析」の目的は、これまでの値を元にこれからの値を予測することです。
この記事では機械学習の基本となる「値予測」について解説します。
- 機械学習を利用したい
- 傾向から値を予測したい
- 数値にどういう関係があるのか分析したい
まず値予測がどういったものなのか、どう考えるのか説明します。
応用させるためにも、概要を理解しておきましょう。
次にサンプルデータを使って予測するプラグラムを動かしてみます。
どういう風に作っていけばよいのかイメージできるので、自分で値を変えて試してみてください。
機械学習(AI)の全体像については↓↓↓をご覧ください。
「値予測」について
値予測とは、「これまでのデータから、これからの数値を予測するもの」です。
回帰分析は機械学習のうちの「教師あり学習」にあたります。
「教師あり学習」の中でも値を予測する「回帰分析」の1つです。
基本では中学生で習う一次関数「y = ax + b」を利用します。
このように値予測では4つの要素を使います。
- y : 目的変数(求めたい数値)
- x : 説明変数(求めるために使用する数値)
- a: 傾き
- b : 切片
「値予測」では数多くのデータを元に「a:傾き」と「b:切片」を求めます。
「x:説明変数」を与えて、さまざまな「y:目的変数」を予測することができるようになります。
相関関係をみつける
上の例では、データ(青い点)になんとなく規則性がありました。
以下のようなデータから直線を引くことはムズカシイです。
データの関係性を見つけるための指標が「相関関係」になります。
相関関係を割り出すためには以下の要素を使います。
- 分散
- 標準偏差
- 共分散
- 相関係数
「分散」「標準偏差」は数値にどの程度のバラつきがあるのか表しています。
「共分散」は説明変数(x)と目的変数(y)をかけたものの合計を個数で割ることで求めることができます。
「相関係数」は共分散を説明変数(x)と目的変数(y)それぞれの標準偏差でかけたもので割ることで求めることができます。
具体的な計算は後ほどサンプルプログラムを動かしながら見ていきましょう。
相関係数は「-1から1の間の数値」で表されます。
- 0.7以上:強い相関関係
- 0.4〜0.7:まぁまぁ強い相関関係
- 0.2〜0.4:少し相関関係あり
- 0〜0.2:相関関係なし
まずは相関係数を求めて、値予測ができるものかどうか判断しましょう。
傾きと切片を決める
値予測には「y = ax + b」を使用します。
「a:傾き」「b:切片」がわかれば値を予測することができます。
「傾き」は共分散を説明変数の分散で割ることで求めることができます。
イメージとしてはyの増加量をxの増加量で割って傾きを出すようなものです。
一次関数の切片を求めるように移項すると「b = y – ax」となります。
つまり、「切片」は「目的変数の平均 – 傾き × 説明変数の平均」で求めることができます。
サンプルプログラムを動かす
「身長(説明変数)」から「体重(目的変数)」を割り出してみます。
まず必要なモジュールを読み込みます。
import numpy as np
import pandas as pd
from pandas import DataFrame
「NumPy」「Pandas」「DataFrame」については↓↓↓をご覧ください。
以下を実行して7人のサンプルデータを作成します。
data = DataFrame({
'身長' : [163, 169, 155, 178, 149, 182, 173],
'体重' : [60, 63, 62, 83, 55, 78, 66]
})
平均は「NumPy」の“mean関数”を使用することで求めることができます。
# 平均
ave = np.mean(data)
共分散を求めていきます。
一人一人の身長と体重の平均との差分をかけたものの合計したものを個数で割るプログラムを動かしてみます。
# 共分散
sum = 0
for i in range(0, len(data)):
tall_devi = data['身長'][i] - ave['身長']
weight_devi = data['体重'][i] - ave['体重']
sum += tall_devi * weight_devi
cov = sum / len(data)
今回の共分散は「90.14285714285714」となりました。
次は「標準偏差」と「相関係数」を求めていきます。
標準偏差は「NumPy」の“std関数”を使用します。
# 標準偏差
tall_std, wight_std = np.std(data)
# 相関係数
rela = cov / (tall_std * wight_std)
相関係数は「0.8651608694980638」となりました。
強い相関関係がありまね。
計算の流れを理解するために、1つずつやってきましたが、「DataFrame」の”corr関数”を使うと一発で相関係数を求めることができます。
data.corr()
簡単ですね!
では本題の「傾き」「切片」を求めていきます。
傾きは「共分散 ÷ 説明変数の分散」で求めることができます。
# 分散
tall_var, weight_var = np.var(data)
# 傾き
a = cov / tall_var
傾きは「0.725287356321839」であることがわかりました。
切片は「目的変数の平均 – 傾き × 説明変数の平均」で求めます。
# 切片
b = ave['体重'] - (a * ave['身長'])
切片は「-54.40870279146141」であることがわかりました。
この記事の目的である「傾き」「切片」を割り出すことができました。
あとは状況別に説明変数をいれて値予測をしていくだけになります!
最後に
機械学習の1つ、回帰分析の基本を説明してきました。
紹介した値予測は機械学習のほんの一部です。
もっとも効率的に学んでいくには部分ごとに学ぶのではく、一貫して学ぶことができるプログラムを受けることが必要です。
講座によって書き方や説明方法が異なっているので、理解するのに必要以上に時間がかかります、、、
機械学習のスクールは高く、なかなか手が出せないよぉ〜
オススメの学習方法は以下になります。
- Youtubeで概要が説明されていないかチェック
- やりたいことが実現できるか確認
- 概要や考え方・基本的なコードを講座で学ぶ
- 自分で調べながら基本的なコードを拡張させていく
一番悩むのが3つ目「概要や考え方・基本的なコードを講座で学ぶ」だと思います。
この段階では、あまり学習にお金をかけたくないでしょう
そこでオススメなのが『Udemy』です。
全部で10万以上の講座があり、機械学習についても数多くあります。
定期的にセールがあり、本来1万円する講座が1,000円代で受けることができます!
試しに学ぶ場合は、セールスを狙ってみてください。
3ヶ月に1回はセールが実施されてる気がします
プログラミング、Pythonにも慣れておらず初心者で学習してみたい方は『PyQ』がオススメです。
「プログラムとは何か?」という用語解説からPythonでのWeb開発、機械学習まで網羅的に学ぶことができます。
※中級者には物足りない内容となっています
Python、機械学習を利用してさまざまなことを自動化させることができたら人生にかなり余裕が持てるようになります!
最後まで読んでくださり、ありがとうございました!!!
コメント