見出し画像

Pythonを用いた機械学習6日目

いよいよ、統計学でよく用いられる平均、分散、標準偏差について学んでいく。学生のころは、定期テストのたびにクラスの平均点と自分の点数を比べて一喜一憂していたのを覚えている。大人になった今でも、全国の同世代女性の平均体重や収入などを比べたりしている。複数のデータを比べるとき、よく用いられるのが平均という考え方だと思う。しかし、平均という指標は万能ではなく、データの散らばりがわからないため、分散や標準偏差といった考え方にもふれていく。

前回の学習内容はこちら。集合と内包表記についてまとめている。


1.平均

「len」関数・・・length(長さ)の略。データの個数を求める関数

・合計を使って平均を求めるコード

>>> data = [70, 91, 69, 78, 82]
>>> total = sum(data)
>>> print(total)
390
>>> ave = total / len(data)
>>> print(ave)
78.0
>>> 

2行目:合計を求める

5行目:平均を求める


ライブラリ「NumPy」に、平均を求める関数が2つ用意されている。一般的に平均というと、算術平均を指すので「mean」を使う。

「mean」・・・算術平均を求める

「average」・・・加重平均を求める


・関数を使って平均を求めるコード

>>> import numpy as np

data >>> 
>>> data = [70, 91, 69, 78, 82]
>>> ave = np.mean(data)
>>> print(ave)
78.0
>>> 

1行目:ライブラリをインポートする場合は小文字


2.分散と標準偏差

平均を求めただけでは、データがどのように散らばっているのかが不明瞭である。データの散らばりがどの程度あるのかを数値で表現する必要がある。値が平均からどれくらい離れているのかを数値で示すには「平均との差の絶対値」を使うこともあるが、一般的には「平均との差を2乗する」方法を使う。

「分散」とは、平均との差を2乗した値の合計をデータの個数で割って算出した値だ。しかし、平均からのズレを2乗すると単位が変わる(㎝→㎠)ため、2乗した値ではなく「平方根」を計算する。この値を「標準偏差」という。


・分散と標準偏差を求める関数を定義するコード

>>> import math
>>> 
>>> def var(data):
...     ave = sum(data) / len(data)
...     total = 0
...     for i in data:
...         total += (ave - i) **2
...     return total / len(data)
... 
>>> def std(data):
...     return math.sqrt(var(data))
... 
>>> a = [72, 61, 91, 31, 45]
>>> print(sum(a) / len(a))
60.0
>>> print(var(a))
434.4
>>> print(std(a))
20.842264752180842
>>> 

1行目:math関数の呼び出し

2行目:var(data)メソッドの定義 /*分散を求める*/

3行目:aveにdataの平均を代入

4行目:totalの初期化

5行目:for文の宣言

6行目:totalに、各値と平均の差の2乗を入れて、足していく

7行目:戻り値にtotal割るデータの長さを指定

9行目:std(data)メソッドの定義 /*標準偏差を求める*/

10行目:ライブラリ「math」を使って標準偏差を求める

12行目:aの定義

13行目:平均の出力

15行目:分散の出力

17行目:標準偏差の出力


・NumPyを使った分散と標準偏差を求めるコード

>>> import numpy as np
>>> 
>>> a = [72, 61, 91, 31, 45]
>>> print(np.var(a))
434.4
>>> print(np.std(a))
20.842264752180842
>>> 

1行目:numpyを呼び出して、npとする

3行目:aを定義

4行目:npのvar関数を使ってaの分散を求め、それを出力

6行目:npのstd関数を使ってaの標準偏差を求め、それを出力


次回は、データの標準化・データの分布について学んでいく。


よろしければサポートお願いします。いただいたサポートを皆さんに還元していきたいと思っております。