pikesaku’s blog

個人的なプログラム勉強メモです。記載内容について一切の責任は持ちません。

Python統計学勉強会参加メモ

Jupiter Notebook

参考

jupyter.org

インストー
$ pip3 install --upgrade pip
$ pip3 install jupiter

起動
$ jupyter notebook


上記コマンド実行後に出力されたTokenつきURLにアクセスする。
http://localhost:8888/?token=397ffd660a92ec8bc712d3f963853735553cff7b852aade9

メモ

実行しても既存の実行済みデータは保持される。
対話式と同様にオブジェクトでコード完了させると、内容がprintされる。
例)
f:id:pikesaku:20170730202753p:plain

※以降のPythonコードはJupiterで実行

一様分布乱数

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
np.random.seed()
result = np.random.randint(1,101,10000)
plt.hist(result, bins=5)


f:id:pikesaku:20170730204255p:plain

・1行目はおまじない
・1〜100(101-1)までの数字をランダムに10000個生成
・histメソッドでヒストグラム生成
・binsは集計する区間数。100までを5個に分ける=>20づつ集計

メモメモ後でまとめる。。。。

Python統計学勉強会メモ

jupiterのきまりごと

実行してもすでに読み込み済み内容は保持される。
変数名で終わりになるとprintされる

ndarray型とは?

足し算や掛け算で利用した際は、要素同士を計算してくれる。

正規分布とは
ある値を中心とし、そこを起点にある程度のばらつきをもったデータの集合

2こうぶんぷ


numpy.random.binomial(n, p, size=None) 

2こうぶんぷは偶然なのかを調査

bostonデータはボストンを500くらいに区切った区画ごとのデータ

機会学習ではtargetは正解データ

昔はtex最近はjupiterでやる人おおい。
jupiterからダウンロードで図を保存可能

plt.hist(prices, 20, cumulative=True) 

cumulativeオプションで累積グラフになる

y, binEdges = np.histogram(prices, bins=20) 
histgramはグラフではなく、データとして取得するメソッド

pythonは戻り値が2つ以上つかえる。pythonの特徴



plt.plot(bincenters, y.cumsum()) 

cumsumは累積を出してくれる。



abc分析とは?

ヒストグラムのY軸の値順になれべかえたものが、ABC分析

np.average(prices) 

平均値 = average

中央値= median
成績順にならべかえた時、真ん中の人がどの点数であったか?

3人いて以下の点数であったとき
10 20 100

平均43.333333
中央20

四分位数とは?
集団を順位別に4分割し、その分割の句切れ目を、それぞれ
第一四分位数
第二四分位数
第三四分位数
という。

これで傾向がわかる。
100点満点テストの場合、
第二四分位数の位置の人の点数が30点であれば、難しいテストだったのかな?など



pandas
データ解析用のライブラリ

boston

boston.target

boston.data
がある。
機会学習のデータセットは、targetが正解データ

Dataframeを使う際はcolumは大事。データを指定して取り出す時に使う。インデックス(数字)を指定しても可能だが、面倒・間違いやすい

plt.scatter(df['RM'], df['PRICE'], s=100, alpha=0.5) 

sは点のサイズ

alphaは透明度
plt.figure(figsize=(12, 8))
plt.scatter(df['RM'], df['PRICE'], s=100, alpha=0.5) 


データフレームにすると散布図が楽

相関係数

y=x
これは相関係数1

y=-x
これは相関係数-1

dataframeを使うと相関係数の一覧が簡単に出せる
df'CRIM', 'RM', 'PRICE'.corr() 

どの要素とどの要素が連動しているか?

感覚的に0.4~0.5あれば、関係性あると講師は考えている
一般的には0.5
ただケースバイケース。


df.corr()
これで実行すると、全要素の解析をしてくれる。

相関係数は線形であるかを見ている。
そのため、関連性はあっても線形でない場合は、0になる。

直線でない場合は、低くなる点に注意。

波線など。。。。


df.describe()

代表値の一覧が観れる。


df['PERROOM'] = df['PRICE'] / df['RM'] 
こんな感じでフィールド追加できる
これはndarrayだから

std = np.std(df['PERROOM']) 
このstdで標準偏差

plt.figure(figsize=(20,10))
plt.scatter(df['RM'], df['PRICE'], c = df['DEV'], s = 200, alpha = 0.5) 

plt.figure(figsize=(20,10))
plt.scatter(df['RM'], df['PRICE'], c = df['DEV'], s = 200, alpha = 0.5)
plt.colorbar()

このcは色をきめる。
部屋と価格で散布図だが、そこに色の情報も追加している。


回帰直線とは?

最小二乗方

これは、直線を作って、そことの距離が近い線をもとめる。

計算したら、面倒

これを、scikit-learnを使うと楽

pvalue 
stderr 

を使うケースは、講師の経験上でもない。

y = ax + b
aがslope(傾き)
bがインターセプト(雪片)

plotx = np.arange(3, 10, 1)
3から10までの1づつデータを生成

■人口知能の機能
回帰
分類→画像認識で利用される

回帰直線を作ると、データのない部分についても推測で使える。
ただし、、、、データのない部分については、回帰直線だと間違いが多い。

非線形なデータは回帰直線だと間違いが多くなる。

この場合、

回帰曲線が使える。

次元数を上げていくと、複雑なパターンを扱える。

y = ax^2+bx+c

2次元は一回カーブできる。
P33は2次元。資料謝り


res = opt.curve_fit(fit_func, df['RM'], df['PRICE']) 
これで回帰曲線を得ることができる

2次元方程式では、1回だけカーブできる。

2回カーブするには、3次元方程式
ax^3+bx^2+cx+d

必ずしも多次元にすればいいというわけではなし。
多次元

この予測は距離にじょうでやってるが、人口知能では、きょりにじょうは使わない。

def fit_func(x, a, b, c, d): ⭐️この引数の順番は大事
  return a * x**3 + b * x**2 + c * x + d 
res = opt.curve_fit(fit_func, df['RM'], df['PRICE'])
上記ではfit_funcは、関数を渡している。

このresの中は、
(array([  2.47012408, -22.64326546,  66.05885736]),
 array([[  8.44020212e-02,  -1.08471220e+00,   3.44183985e+00],
        [ -1.08471220e+00,   1.40942558e+01,  -4.52003372e+01],
        [  3.44183985e+00,  -4.52003372e+01,   1.46506533e+02]]))
In [ ]:

これは何を意味しているのか?

IoT検定の教科書



X, Y = np.meshgrid(plotx, ploty) 


回帰分析に使えるデータセットは、

ボストンと疾患データ


日本は
data.gov

2,3次元回帰では難しい場合にSVMをつかう。これは人口知能による回帰
高次元ベクトル解析

環境作る方法

1 自分でライブラリ構成する場合
2 anacondaを使う場合
3 pyenv
4 pycharm→ここからjupiter note bookを作れる。ただ動きが変な場合あり。

anaconda navigator

anacondaはライブラリ管理ツール

anacondaにもcondaという管理コマンドがあり。
condaはpipと同じもの。
condaの方が依存関係などがよく管理されてる。