dezeroでニューラルネットワークを使った回帰をやってみる

やってみよう。

まずは線形回帰

グラフはこんな感じで線形近似できている。

損失が徐々に減っていく。いい感じだ。

 

これをsinカーブでやってみると、直線しか表現できないのでぜんぜんだめ

 

そこでニューラルネットワークの出番。

活性化関数のお陰で表現が増える

sinカーブにノイズをのせたサンプルデータを作ってニューラルネットワークでやってみよう

損失の減り方をみると開始直後に急激に減って、なんと1万回くらいのところで再度損失が急激に減少した。理由は分からないが なんかすごい。

ではコードはこちら

次回予告

次はdezeroをフル活用でやってみよう

オプティマイザとかも予め用意されているらしい。

グラフ 第2軸の作り方

matplotlibを使って2軸あるグラフを作成してみます。

 

 

Python3: 3Dプロット from mpl_toolkits.mplot3d import Axes3D

3Dプロットのやりかたです。

モジュールは

from mpl_toolkits.mplot3d import Axes3D
%matplotlib notebook

を使っていきます。

 

 

data_scientist:chapter9 教師なし k-means法

k-means法

教師なしクラスタリングということで k-means法を試してみました。

ブロブデータでやってみる

データセットからブロブを呼び出します。

このブロブをk-means法を使って分類します。

k-meansの条件としてクラスタの数を指定しますが、下記のようなエルボ法を使ってベストなクラスタ数を決定します。今回は3です。

 

 

 

 

 

 

 

k-meansの結果がこれです。うまく行っています。

 

顧客データでやってみる

エルボ法でベストなクラスタ数を見つけておきます。

5にしましょうか。

クラスタ数5の結果です。

1と3に固まっていますね。

 

ちなみにk-means デフォルトクラスタ数8でやってみました。

さっきのクラスタ3は下の2,3に分割されてしまっていると考えます。

クラスタ数5に戻って、結果のヒートマップを確認します。

年齢層でみると、クラスタ1は30-35歳、クラスタ3は45-50歳というように離れていることがわかります。

次は職業です。クラスタ数1と3は大きな差がないので、今回のクラスタリング結果に対して職業の寄与度は低いのでしょう。

スクリプト

data_science_chapter_9_k-means

data_scientist:chapter8 リッジ回帰

重回帰の精度を高めるべくリッジ回帰をやってみます。

普通のロジスティック回帰モデルでは最小2乗誤差を目指しますが、入力に対して出力が敏感に変化してしまう場合は、過学習によって訓練Scoreと検証Scoreが一致しない場合があります。

そこで、正則化項 を新たに追加して訓練を緩慢にします。
正則化項は1次のときラッソ回帰、2次のときリッジ回帰といいます。

今回は正則化項なしである重回帰に対して、大きな改善は見られませんでしたので重回帰でも十分な結果が得られていることがわかりました。

スクリプト

data_scientist_chapter_8_Ridge