はじめに
僕はWebシステム開発者ですが、これからのニーズとしてウェブ上での画像認識や音声認識などを組込み付加価値の高いサービスをお客様へ提案できればと考え機械学習について少しずつですが勉強中です。
機械学習をする上で必須利用されるモジュール(numpy, matplotlib)の使い方についてまとめておきます。機械学習をするにはScikit-learnをPythonの動作環境へインストールし勉強するのが定番のようです。
Scikit-learnには学習用のデータセットの取得や分類・回帰・クラスタリングなどの分析モデルの関数が含まれています。
あくまで、初学者が機械学習理論を学ぶためのもので、本格的な実装はこれとは別にTensorflow等あって奥が深いです。
Scikit-learn requires:(動作要件)
Scikit-learn公式サイトからの抜粋
https://scikit-learn.org/stable/install.html
Python (>= 3.5)
NumPy (>= 1.11.0)
SciPy (>= 0.17.0)
joblib (>= 0.11)
自分の環境には既にinstall済みのライブラリがあり、下記の*のみinstallしました。
*SciPy (>= 0.17.0)
$ pip install SciPy
#1.3.2がinstallされた 当方python3の仮想環境(venv)で実行しているためpip3 installではないです。素のpython3環境であればpipはpip3に読み替えてください。
*joblib (>= 0.11)
$ pip install joblib
#0.14.0がinstallされた
sklearnのインストール
Scikit-learn install:
pip install -U scikit-learn
コマンドオプション -U は既にinstallされている場合はUpgradeするときに使う。
最新0.21.3がinstallされた
ヒストグラムを描いてみる
ヒストグラムとは
データの散らばり具合を可視化する作業に使えます。
度数分布を示すグラフの一つ。横軸に階級(value)、縦軸に度数(frequency)をとり、各階級の度数を長方形の柱で示す。柱状グラフ。
階級の幅を階級幅(value,x値の幅)と言います。
Pythonによる実装例
import random import matplotlib.pyplot as plt # データ初期化 data = [] # 表示するデータの作成(ダミー) for i in range(1000): data.append(random.normalvariate(0, 10)) # グラフのタイトル plt.title("Histogram") plt.xlabel("value") plt.ylabel("frequency") # ヒストグラムを作成 plt.hist(data, bins=50, color='b') plt.show()
実行結果
上記のソースをコピペしてhistgram.py というファイルを作成
python実行環境で以下のコマンドを実行。
$ python histogram.py
下記のようなグラフが表示できればOK
データはrandom.normalvariateライブラリを使って、正規分布を返す。 第一引数は平均で、 第二引数 は標準偏差を与えます。
機械学習は統計学や数学の基礎(私の場合おじさん世代なので数II B といっていたあたりで微分・積分とか)も知識としては必要です。
まあ都度調べるでも良いと考えます。実際にAIモデルを開発する際、そんなに数学知識は重要でもないかも。専門的に取り組む場合には様々な研究論文も読破する覚悟も必要ですが、、、
以下プログラマ視点でhist()関数とmatplotlib.pyplotの引数やメソッドのまとめ
hist()の主な引数
引数 内容
x データ系列(表示するデータ)必須
bins 階級数
range 範囲 規定値 None
cumlative 累積 True/False 規定値 False
bottom 下端 規定値 None
histtype ヒストグラムの種類bar(棒),barstacked(積み上げ),step(枠線),stepfilled(枠線塗り潰し)
align 位置 規定値 mid(中央),left(左),right(右)
orientation 向き 規定値 vertical(垂直) horizontal(水平)
…
matplotlib.pyplotでよく利用するメソッド
軸を設定する axis([x最小値], [x最大値], [y最小値], [y最大値])
x軸の範囲を設定する xlim(x最小値, x最大値)
y軸の範囲を設定する ylim(y最小値, y最大値)
x軸名を設定する xlabel(x軸名)
y軸名を設定する ylabel(y軸名)
タイトルを設定する title(タイトル)
データ系列をプロットする plot(データ系列)
x,yにプロットする plot(x, y)
散布図を描く scatter(データ系列1, データ系列2)
グラフを表示する show()
凡例を表示する legend()
今日は以上です。