FXを機械学習!〜重回帰分析〜
こんにちは!
前回はFXデータの単回帰分析を行いました。
今回は重回帰分析を行なっていきたいと思います。
単回帰分析と違うところは、説明変数が複数あるところです。
単回帰分析では、
目的変数 円/ドル
説明変数 先月の円/ドル
としましたが、
今回の重回帰分析では、
目的変数 円/ドル
説明変数 円/ドル、円/ユーロ
としました。
CSVから読み込んだデータがこちら
これを3次元グラフに表すと、
わりと直線状に分布しているのがわかりますね。
ここで重回帰分析を行なっていきます。
単回帰分析では直線で予測グラフが表されましたが、重回帰分析では平面(または超平面)で予測グラフが表されます。
今回は説明変数2つでの重回帰分析なので、
という式で表されます。
x1は先月の円/ドル、x2は先月の円/ユーロです。
w0,w1,w2は学習された重みです。
学習の結果、
となりました。
グラフ化すると、
アングルの問題で平面に見えづらいですが、きれいにデータにそったグラフが描かれているのがわかります(オレンジが平面)。
また、予測精度であるMSEは
となり、単回帰分析の時より精度が上がっているのがわかります。
FXを機械学習!〜単回帰分析〜
こんにちは!
今日からFXのデータを使って色々なアルゴリズムを試してみた結果を記事にしていきたいと思います。
初回は線形回帰の基礎の基礎、単回帰分析です。
回帰分析というのはざっくりいうと数値を予測するアルゴリズムです。
その中で最もシンプルなのが単回帰分析です。
予測したい数値データのことを目的変数と言います。
予測のために使うデータを説明変数と言います。
単回帰分析は目的変数1つ、説明変数1つの簡単な線形回帰分析です。
今回は
目的変数→円/ドル
説明変数→先月の円/ドル
として単回帰分析してみました。
まずはpandasでcsvを読み込みます。
1月前のデータを準備します。
この時点で散布図を書くと下のようにほぼ直線状にデータが並んでいますね。
これは単回帰分析でもそこそこの成果が期待できそうです。
※単回帰分析は直線の予測グラフです
そして単回帰分析を実行してみました。
予測のグラフは
で表されます。w0やw1は重みと言って、この重みをデータから学習します。
単回帰分析を実行したところ、
となりました。
予測グラフを図示してみましょう。
オレンジの直線が単回帰分析でもとめた予測グラフです。
データによくフィットしていますね。
ちなみに線形回帰の精度には平均二乗誤差(MSE)がよく使われます。
今回のMSEは、
この数値でした。
悪くはない結果だと思います。
以上、単回帰分析でした!
機械学習自動化ツール 〜回帰編〜
前回の記事で機械学習自動化ツール〜分類編〜を扱いました。
そこで今回は〜回帰編〜です。
回帰というのは簡単に言ってしまえば数値の予測です(分類はカテゴリの予測でした)。
では今回の自動化ツールを使って回帰による予測をしていましょう。
前回と同様の学習データです。
全ての項目のデータが揃っています。
こちらが予測用のデータ。身長のデータだけありません。
ここから
性別、体重、年齢 → 身長
の予測を行なっていきます。
この2つのデータを機械学習自動化ツールにインプットしてみましょう。
結果がこちら。
なんとも言えない結果ですね。当たっているような当たっていないような。
ちなみに「男」に1.0と入っているデータは男で、「女」に1.0と入っているデータは女です。この辺はUIを改善した方が良さそうですね。
特徴量の影響度合いは、
意外なことに年齢が大きく影響していました(個人的には体重の影響が大きいのと持ってました)。
正解率は、
ほぼ6割のなので悪くはないですが、分類の時よりは劣ってますね。
最後に各アルゴリズムの比較結果です。
今回はサポートベクターマシンはふるわなかったようですね。
線形回帰に正則化項をを使いしたリッジ回帰が一番でした。
ラッソ回帰も正則化項を入れるという点では同じなのですがかなり引き離されています。
回帰に関してはまだ改善の余地があるかな、という状態です。
オリジナルのアルゴリズムを入れることなども検討していきたいと思います。
機械学習自動化ツール 〜分類編〜
初めまして。
オリエンタル情報システム、データサイエンティストの”たけまる”です。
今日から機械学習やデータ分析まわりの記事をかいていきますので、たまにみていただけると嬉しいです。
ということで早速機械学習の話題。
最近データサイエンティストの不足にともない、機械学習自動化ツールが流行っています。ということで当社でもプロトタイプを作ってみました。
対応しているのは教師あり学習で、
・分類 → カテゴリの予測
・回帰 → 数値の予測
とりあえずsklearnにあるアルゴリズムだけで対応してます。
では実際に分類の予測をしていきましょう(次回は回帰の予定)。
上のような学習データをCSVで用意しました。
このデータを学習させて、
身長、体重、年齢 → 性別
の予測をしていきたいと思います。
予測用のデータはこちら。
性別のところが抜けているのがわかります。
その他のデータも学習データとは違う値になっています。
この2つのCSVをインプットして予測させてみましょう。
結果がこちら。
かなり妥当な結果が得られていると思います。
それぞれの特徴量がどれだけ影響しているかもわかります。
そして正解率です。
かなり高い数値が出ています。
最後に各アルゴリズムの比較結果です(上の結果はベストなアルゴリズムの結果)
圧倒的にサポートベクターマシン(SVM)でした。
データによって適切なアルゴリズムは違います。
さらにいうとアルゴリズムを設定した上でハイパーパラメータのチューニングも行うことで高い精度が得られます。
それらは普通データサイエンティストがデータの形状から判断したり試してみたりするのですが、そのフローを自動化したのがこのツールです。
汎用性が高い分、オリジナルでアルゴリズムを組むよりは精度は劣るかもしれませんが、データをインプットするだけで予測できるので、手頃に機械学習ができるという大きな強みがあります。