PHP
統計と機械学習を少し勉強してPHP-MLをちょっと使ってみた
ぽんて
更新日:2021/11/08
K最近傍法と相関係数について勉強したのでメモ
K最近傍法
K最近傍法とは、あるデータがどのグループに属するのか推測する方法の一つです。
機械学習の中でも感覚的に理解しやすく使いやすいのが特徴です。
解説
下図のように赤点グループと青点グループがあったとします。
このとき、緑点は一体どちらののグループに属するのかをK最近傍法で推測してみます。
(1)変数「K」の指定
K最近傍法の「K」は実は変数を表しています。
数字は何でも良いので、今回は3とします。
(2)緑点から最も近い点をK個探す
今回はK=3としているので3個の点を探します。(緑丸内の3つ)
(3)緑枠内の点をグループごとに集計し多い方のグループに属すると推測する
図では青が2個、赤が1個なので緑点は青グループに属すると推測できます。
PHP-MLで使ってみよう
使い方はとても簡単で、次のソースの通りです
※https://php-ml.readthedocs.io/en/latest/machine-learning/classification/k-nearest-neighbors/参考
1 2 3 4 5 6 7 8 9 10 11 12 13 |
require_once__DIR__.'vendor/autoload.php'; use Php\Classification\KNearesNeighbors; $samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]]; $labels = ['a', 'a', 'a', 'b', 'b', 'b']; $classifier = new KNearestNeighbors(); $classifier->train($samples, $labels); $classifier->predict([3, 2]); // return 'b' |
$sampleが座標で$labelが各座標のグループ名です。
それらをtrainで学習させ、predictで指定した座標のグループを推測しています。
相関係数
ある2種類のデータの関係性の強さを-1~1で表す方法です。
機械学習ではありませんが幅広く活用できるので紹介しておきます。
解説
上図は6~17歳までの年齢と平均身長の関係を表したグラフです。
年齢と比例し平均身長が大きくなっているため、グラフでは右肩上がりの直線に近くなります。。
このようにきれいな右肩あがりに近づくほど相関係数も「1」に近づきます。
逆にきれいな右肩下がり(年齢増で身長減)の場合相関関係は「-1」に近づき、
グラフがギザギザなど比例も反比例もしていない場合は相関なしとして「0」に近づきます。
PHP-MLで使ってみよう
これも使い方はとても簡単で、次のソースの通りです
※https://php-ml.readthedocs.io/en/latest/math/statistic/参考
1 2 3 4 5 6 7 |
use Phpml\Math\Statistic\Conrrelation; $x = [6,7,8,9,10,11,12,13,14,15,16,17]; $y = [116.7,1222.4,128.2,133.5,145.3,152.9,160.2,165.5,168.6,170.0,170.9]; Correlation::pearson($x, $y); // return 0.99 |
$xがx軸(年齢)、$yがy軸(平均身長)です。
それらのデータをpearson関数を通すことで相関係数が出力されます。
とても簡単!
最後に
K最近傍法も相関係数も工夫次第で簡易なレコンメンド機能や売上分析を作ることができる強力なものです。
機会があれば使ってみると楽しいかも!
、、、ただ本格的に開発するならPHP-MLは適切ではないかもです。(機能が少ない、動作が重い)
では
ぽんて