Raspberry Pi 3 & Python 開発ブログ☆彡

Raspberry Pi 3の使い方、設定をわかりやすく解説。Raspberry Pi3 Model B(Element14版)、Raspbian 8.0(NOOBS Ver1.9.2)を使用して開発中。

【スポンサーリンク】

scikit-learnの使い方

【スポンサーリンク】

前回はTensorFlowで機械学習による分類の手法を紹介しました。今回は、scikit-learnで
未来を予測する回帰のアルゴリズムを紹介したいと思います。
(scikit-learnでも分類のアルゴリズムを使うことができます。)

今回紹介する回帰のコードの概要

連続した過去3日間の天気をもとに、明日の天気を予想するサンプルコードです。
晴れ⇒1,曇り⇒2、雨⇒3と数字に置き換えて考えます。また、100日間、
晴れ⇒曇り⇒雨⇒晴れ⇒曇り⇒雨...という天気を繰り返していることにします。
※完全にscikit-learnの使い方を紹介するためだけのサンプルになります。

① エクセルに1,2,3,1,2,3...と書かれたデータを用意します。
② 50日分のデータを使い、学習します。
③ この学習済みモデルに、適当な連続した3日間の天気のデータを与えて
  明日の天気を予想します。明日が晴れか、そうでないか(曇りor雨)を予想します。

それでは、Windowsにscikit-learnをインストールして、実際に動かしてみます。
今回もRaspberry PiではなくWindowsです。

Windowsにscikit-learnで使用するモジュール(scikit-learn,numpy,pandas)のインストール

〇scikit_learnのインストール
下記サイトから"scikit_learn-0.18.1-cp35-cp35m-win_amd64.whl"をダウンロードします。
https://pypi.python.org/pypi/scikit-learn/0.18.1

下記コマンドでインストールをします。
pip install /[上記ファイルのダウンロードパス]/scikit_learn-0.18.1-cp35-cp35m-win_amd64.whl
※wheelをインストールしていない場合は、"pip install wheel"コマンドでwheelをインストールしてください。.whl形式のパッケージをインストールできるようになります。

〇numpyのインストール
下記サイトから"numpy-1.11.0+mkl-cp35-cp35m-win_amd64.whl" をダウンロードします。
http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

下記コマンドでインストールをします。
pip install /[上記ファイルのダウンロードパス]/numpy-1.11.0+mkl-cp35-cp35m-win_amd64.whl

〇pandasのインストール
下記コマンドでインストールをします。
pip install pandas

〇天気予報データをエクセルで作成
セルA1に"weather"と記載し、A2~A100まで1,2,3,1,2,3...と繰り返し記載したcsvファイルを作成し、今回作成するpythonコードと同フォルダに保存します。csvのファイル名はtest.csvとします。(上記でも書きましたが、晴れ⇒1,曇り⇒2、雨⇒3を意味しています。)

f:id:raspberrypi:20170426193747j:plain

scikit-learnのサンプルコードの説明

# モジュールのインポート、変数宣言
from sklearn import tree, svm
import numpy as np
import pandas as pd

train_X =
train_y =

train_Z = []

scikit-laarn,munpy,pandasモジュールをインポートします。使用する変数を宣言しておきます。

#csvデータの読み込み        
df = pd.read_csv("test.csv", header=0)
df.columns=["weather"]


pandasモジュールを使用して、test.csvファイルのデータを読み込みます。

#学習用データの作成
for i in np.arange(0, 50):
    s = i + 3
    three_days_weather_data = df["weather"][i:s]  
    nextday_weather_data = df["weather"][s:s+1].values

    if nextday_weather_data == 1:
        train_y.append(1)
    else:
        train_y.append(0)
        
    train_X.append(three_days_weather_data.values)

three_days_weather_dataは連続した3日間の天気のデータです。nextday_weather_dataはその次の日の天気のデータです。今回、連続した3日間の天気のデータをもとに、次の日が晴れか晴れ以外かを予測しますので、
・訓練用データ:train_X ⇒ 連続した3日間の天気のデータ
・正解値データ:train_y = 次の日の天気(晴れ⇒1、晴れ以外⇒0)
を代入します。

# 決定木モデルで学習を実行
clf = tree.DecisionTreeClassifier()
clf.fit(train_X, train_y)

scikit-learnで用意されているモジュールをそのまま使用するだけです。clfを生成し、clf.fitメゾットに先ほど作成した学習データを引数として与えます。

# 学習済みモデルにテストデータを入れてテスト
forecast = df["weather"][51:54]
train_Z.append(forecast.values)           
result = clf.predict(train_Z)
print(result)

csvファイルの適当な3日間のデータを学習済みモデル(clf.predictメゾット)に与えます。その翌日の天気が晴れなのかそうでないか推測してくれます。1であれば晴れ、0であれば晴れ以外の天気ということになります。

今回はscikit-learnの使い方を紹介するために、全く面白くない規則正しいデータを使用しました。訓練データや予測するデータを工夫すれば面白いものができそうです。たとえば、前3か月の株や為替データを訓練データとして、次の日株が為替が上がっているか、下がっているかを予測する等できそうですね。あくまで例です、実際の投資に使う際は自己責任でお願いします。