【Pythonでの機械学習】ブログアクセス数データの近似モデルを構築

20160502 92 760x450 728x431 - 【Pythonでの機械学習】ブログアクセス数データの近似モデルを構築

1. データを整形する

 

今回作成するプログラムは、pythonによる機械学習にてこのブログのある月のアクセス数を取り込み、近似モデルを構築することを目的とします。

 

まずはじめに用意するのは、機械学習に必要なデータです。
データファイルは”tsv”ファイルとします。
tsvファイルとは、データの各項目間が「タブ」で区切られているファイルのことです。

 

データの中身はこんな感じです。

 

Python 10 1 - 【Pythonでの機械学習】ブログアクセス数データの近似モデルを構築

 

左の項目は日単位を表しており、右の項目はアクセス件数を表しています。(アクセス件数が少ないのは悩みどころです笑)

 

このデータを読み込んでみて、プログラムとして処理しやすいように整形していきます。
以下のようなコードを記載します。

 

 

◇ コメント 1
必要なライブラリとして、scipy, csv, matplotlibをインポートします。
SciPyは、多くのアルゴリズムを提供しています。今回はデータの読み込みと整形に利用します。
csvは、tsvファイルにも適用されるため利用しています。
matplotlibは、Pythonを使用してグラフを作成することに関してとても便利な高機能ライブラリのため利用しています。

 

◇ コメント 2
sp.genfromtxt()では、任意のデータファイルと区切り”タブ”を指定して読み込みを行います。
変数x, yは、取得したデータを次元ごとに分割し、それぞれの変数に格納しています。
さらに、利用するデータの中に、不適切な値を取り除くためにisnan()関数にて要素を取り出します。
ただ、今回のtsvファイルには不適切な値は存在しないため、利用しなくていいのですが、このプログラムを参考にする方もいるかもしれないので、不適切な値も考慮したプログラムとします。

 

◇ コメント 3
ここでは、整形したデータがどのような状態となっているか確認しているだけなので、特に説明は必要ないと思います。
配列の要素として、値が取り出せていれば問題ないと思います。

 

★出力結果★

 

Python 10 2 - 【Pythonでの機械学習】ブログアクセス数データの近似モデルを構築

 

2. 近似モデルを構築する

 

次に、近似モデルの構築についてです。今回利用しているデータを眺めると、日が経つにつれてアクセス件数が増加していることがわかります。(少しづつ上がっていて何より笑)
ここで、やや右肩上がりの増加傾向がみて取れるので、1次式の近似モデルを構築してみます。
以下にコードを記載します。

 

 

◇ コメント 4
SciPyのpolyfitは、引数に配列を渡すだけで、多項式の次元指定により誤差を最小とするモデル関数を取得できます。
傾きと切片を求めてくれるわけですね。
ただ、利用するのはfp1のみであり、引数にfull=Trueを渡すことで近似プロセスの情報を得ることができますが、fp1以外利用しません。
そのため、、、

このコードでも構いませんし、簡略的でわかりやすいかもしれません。

 

◇ コメント 5
SciPyのpoly1d()関数を利用して、取得した係数を元にモデル関数f1を作成します。

 

◇ コメント 6
次に、f1の直線を引く用意をします。
SciPyのlinspace()にて、線形に等間隔なベクトルを作成します。0,x[-1]の範囲で1000個の点を出力させます。
そして、matplotlibのpyplotを利用して、fx1の範囲でf1関数の線を線幅1で指定し引きます。
plt.legend()にて、凡例を記載するためのコードを記載しています。

 

3. グラフに描画する

 

日単位が横軸(x)、アクセス数が縦軸(y)の散布図を描きます。そこに上記で求めた近似モデルの線を描きます。
以下にコードを記載します

 

 

◇ コメント 7
取り込んだデータを線と併せて描画するため、plt.scatter()を利用します。
plt.title(), plt.xlabel(), plt.ylabel(), plt.xticks(), plt.autoscale(), plt.grid(), plt.show()にて、体裁と描画を記載しています。

 

ここまでで近似モデルの構築プログラムの完成となります。

 

★access.py★

 

 

4. より良い近似モデルを構築する

 

上記で作成したプログラムを実行してみます。

 

Python 10 3 - 【Pythonでの機械学習】ブログアクセス数データの近似モデルを構築

 

画像を眺めていると、正しいモデルとしては採用できないとわかりますよね。
そこで、次元数を増やして、より良い近似モデルを構築していきます。
作成したプログラム内に次元数を変化させたモデルを追加していきます。

 

Python 10 4 - 【Pythonでの機械学習】ブログアクセス数データの近似モデルを構築

 

画像にて、青が1次モデル、黄が2次モデル、緑が3次モデル、赤が5次モデル、紫が10次モデルとなります。
このように、次数を増加させていくことでより良い近似モデルを構築することができました。
ここまでで、今までみてきた5つのモデルの中で、次数が低いものは明らかに単純なモデルとなっています。
元のデータがあまり利用しやすいものではありませんが、次数を増加させすぎると過学習になってしまいます。

 

それでは!!

 

 

機械学習や分析の分野に興味があり、pythonを学びたいと思っている方は是非こちらもどうぞ↓

誰でも30日間で習得出来るpython学習法

 

Pythonチュートリアル公開中です。

 

ABOUTこの記事をかいた人

sugi

大学卒業後、IT企業に就職を果たす。システム開発・人工知能に触れながら大手企業と業務をこなす。2年半後脱サラし、現在フリーランス活動中。 2019年2月から起業する予定。 自社サービス及び製品を開発し、売り上げを立てている。