ラベル Study の投稿を表示しています。 すべての投稿を表示
ラベル Study の投稿を表示しています。 すべての投稿を表示


キカガク(KIKAGAKU)で「ファインチューニング」を学ぶ

Photo by Owen Beard on Unsplash

今回は「ファインチューニング - KIKAGAKU」を学ぶ。

学習内容

  1. 画像分類/データセットの準備
  2. CNN モデルの定義/目的関数と最適化手法の選択/モデルの学習/
  3. ファインチューニング/全結合層を追加/モデルの学習/予測精度の評価

学習させるのに5日間を要した。(PCを使用している間のみ、バックグラウンドで学習。)


ソースコード


出力結果



出力ログ


Posted in  on 6/02/2020 by rteak |  


キカガク(KIKAGAKU)で「畳み込みニューラルネットワークの実装」を学ぶ

Photo by Owen Beard on Unsplash

今回は「畳み込みニューラルネットワークの実装 - KIKAGAKU」を学ぶ。

学習内容

データセットの準備

  1.  Tensorflow で使用できる形式に変換 

CNN モデルの定義

  1. 目的関数と最適化手法の選択
  2. モデルの学習
  3. 予測精度の評価

CNN モデルの順伝播の流れ

  1. Convolution 層の計算
  2. Pooling 層の計算
  3. ベクトル化

ソースコード


出力結果

データセット読み込み後、1つ目の画像を抽出。



予測精度の評価。学習結果を確認するために損失を可視化。


正解率を可視化。


Convolution 層のフィルタを通して出力されるデータ毎に可視化。1つ目。


2つ目。


3つ目。


Pooling 層を通して出力されるデータ毎に可視化。1つ目。


2つ目。


3つ目。


実行ログ





Posted in  on 6/01/2020 by rteak |  


キカガク(KIKAGAKU)で「畳み込みニューラルネットワークの基礎」を学ぶ

Photo by Owen Beard on Unsplash

実習環境

Colaboratory を使わない場合、 OpenCV をインストールしないといけないが、ここに書かれている cv2 だとインストールできなかった。

pip install opencv_python でインストールした。 

なお、PIL はすでに pip install pillow でインストール済み。

学習内容

画像処理の実装

  1. OpenCV
  2. Pillow
  3. グレースケール変換

画像処理の基礎

  1. 画像とは
  2. 画像の特徴抽出
  3. 画像を切り取る
  4. ヒストグラムを取る
  5. CNN 以前の画像分類のモデル
  6. フィルタとは
  7. エッジ検出

畳み込みニューラルネットワーク

  1. 畳み込み( Convolution )
  2. プーリング( Pooling )
  3. 全結合層( Fully Connected Layer )

出力結果

OpenCV では画像が BGR の順に格納されており、Matplotlib では画像が RGB の順で格納されているため青味がかった色になっている。


OpenCV に格納された画像を cvtColor() で RGB の順に変換した結果。


グレースケール変換した結果。Matplotlib が RGB の 3 チャンネルの画像の入力を標準としているため、白黒になっていない。


plt.imshow(img_gray, cmap='gray') で表示した結果。


横方向のエッジ検出を行った結果。


縦方向のエッジ検出を行った結果。


出力ログ




ソースコード



Posted in  on 5/31/2020 by rteak |  


Tensorflow のインストールがうまくいかないときの対処


Tensorflow のインストールがうまくいかないときの対処

Tensorflow のインストール

Tensorflow のインストールは、「pip での TensorFlow のインストール」に記載されている手順のとおりやれば問題なく行える。
ちなみに、私はAnaconda を使わずに、Python と PyCharm だけで環境構築している。

うまくいかないときのパターン

Python のバージョンと Tensorflow のバージョンが適合していないと、エラーメッセージが表示され、プログラムが正しく動作しないことがある。

現在、Python 3.7.7 を使用しているが、Tensorflow 2.2.0 をインストールしたときは、プログラム実行に Warning や Error が表示された。

対応方法

Tensorflow 2.1.0 にダウングレードすると、 Warning や Error は表示されなくなった。

Tensorflow のバージョンを変えてみるとうまくいくことがある。

以下は、Tensorflow のインストールの検証結果である。

検証コマンド


Tensorflow 2.2.0 をインストールしたときの検証結果


Tensorflow 2.1.0 をインストールしたときの検証結果





Posted in  on 5/27/2020 by rteak |  


キカガク(KIKAGAKU)で「ニューラルネットワークの実装(回帰)」を学ぶ 《練習問題》

Photo by Alex Knight on Unsplash

キカガク(KIKAGAKU)で「ニューラルネットワークの実装(回帰)」を学ぶで練習問題が出ていたので、解いてみた。

練習問題

上記の結果のように、平均ニ乗誤差 (MSE) が検証データに対して約 73となっており、誤差を二乗しているとしても少し予測誤差が大きいことがわかります。この原因を考え、対策をうち、平均ニ乗誤差が小さくなるようなモデルを考えてみましょう。

ヒント
  1. Batch Normalization をいれる
  2. エポック数を増やす
  3. 最適化手法 (optimizer) を変更する
  4. データセットを可視化し、必要な特徴量を選択する or 増やす    
試行錯誤することで、実際の動作などの理解が深まるのでぜひ取り組りくんでください。

回答例

モデル変更前の MSE は次のとおり。
[62.691704245174634, 6.1231995]
なぜか、73 よりよくなっている。

Batch Normalization をいれると、MSE は次のような結果になった。
[36.493252174527036, 4.8187714]
改善前と比べて 58% 改善した。

変更箇所はソースコード 42 行目から 47 行目までを参照。


エポック数を 30 から 60 に増やすと、MSE は次のような結果になった。
[27.27410544601141, 3.981625]

改善前と比べて 43% 改善した。
変更箇所はソースコード 62 行目を参照。

optimaizer を adam から sgd に変更すると、MSE は次のような結果になった。
[40.223956089393766, 4.9830503]

前回までと比べると悪化したので、optimaizer は adam の方が適しているといえる。
変更箇所はソースコード 50 行目を参照。

ちなみに RMSprop に変更すると、MSE は次のような結果になった。
[26.024830537683822, 3.8633108]

特徴量を 13 から 12に減らすと、MSE は次のような結果になった。
[20.303845349480124, 3.5017285]

改善前と比べて 32% 改善した。

今回は、4つ目の変数 CHAS を減らした。 

CHAS チャールズ川によるダミー変数 (1: 川の周辺, 0: それ以外)

変更箇所はソースコード 11 行目から 20 行目までを参照。


目的関数


評価関数



ソースコード







Posted in  on 5/24/2020 by rteak |  


キカガク(KIKAGAKU)で「ニューラルネットワークの実装(回帰)」を学ぶ

Photo by Alex Knight on Unsplash

前回「キカガク(KIKAGAKU)で「ニューラルネットワークの実装(分類)」を学ぶ」のつづき。
今回は「ニューラルネットワークの実装(回帰) - KIKAGAKU」を学ぶ。

学習内容

データセットの準備

モデルの定義と学習

  1. 平均二乗誤差 ( Mean Squeard Error:MSE )
  2. 平均絶対誤差( Mean Absolute Error:MAE )

新たにインストールしたもの

今回も PyCharm を使って演習を行った。
そのため、tf.keras.utils.plot_model(model) でモデル構造の可視化する際、pydot と pydotplus、pydot_ng、graphviz のインストールが必要となった。(ソースコード 56 行目参照)

Graphviz の実行モジュールは下記 URL からダウンロード
https://graphviz.gitlab.io/_pages/Download/Download_windows.html

Graphviz をインストールした後、環境変数に Graphviz の実行モジュールがインストールされているフォルダパス(例  C:\Program Files (x86)\Graphviz2.38\bin )をセットしておく必要がある。

tf.keras.utils.plot_model(model) を実行すると、model.png が作成される。

出力結果

model.png



目的関数の可視化


評価指標の可視化


練習問題は後でじっくりと。

ソースコード

Google Colaboratory を使用していないため、print や plt.show() を追記して実行結果を表示している。

Posted in  on 5/23/2020 by rteak |  


キカガク(KIKAGAKU)で「ニューラルネットワークの実装(分類)」を学ぶ

Photo by Alex Knight on Unsplash

前回「キカガク(KIKAGAKU)で逆伝播を学ぶ」のつづき。
今回は「ニューラルネットワークの実装(分類) - KIKAGAKU」を学ぶ。

実習環境

演習では、敢えて Google Colaboratory 使わずに、PyCharm の環境で Tensorflow や scikit-learn をインストールして演習を行った。
Tensorflow は「pip での TensorFlow のインストール」 を参照してインストールした。

学習内容

Tensorflow の基礎

データセットの準備

  1. 入力変数と目的変数に切り分け
  2. Keras で計算できるデータの形式に変換
  3. 目標値を 0 からに変換
  4. 学習用データとテスト用データに分割

モデルの定義

  1. モデルの層の定義
  2. モデルの学習プロセスを定義
    最適化手法の指定
    目的関数の指定
    評価指標の指定

モデルの学習

  1. 学習済みモデルの精度の確認
  2. モデル精度の向上
  3. 学習済みモデルの保存と推論

学習済みモデルの保存

  1. 学習済みモデルのロード
  2. 予測値の計算

ソースコード

学習済みモデルの保存まで


保存した学習済みモデルのロードして推論



Posted in  on 5/18/2020 by rteak |  


キカガク(KIKAGAKU)で逆伝播を学ぶ

Photo by Alex Knight on Unsplash

前回「キカガク(KIKAGAKU)で順伝播を学ぶ」のつづき

学習内容

勾配降下法

  1. ニューラルネットワークのパラメータの最適化
  2. 学習率(Learning Rate)

ミニバッチ学習

  1. バッチ学習
  2. イテレーション
  3. エポック
  4. 確率的勾配降下法(stocastic gradient descent; SGD)

誤差逆伝播法

  1. 合成関数の微分
  2. 連鎖律(Chain Rule)
  3. パラメータの更新量の算出・逆伝播

感想

出てきた数式はノートに写して計算の流れを確認した。
実際に数字を当てはめ、計算してみた。

計算結果が合わないところがあったが、どちらが正しいのか不明。
後で改めて確認してみよう。

Posted in  on 5/06/2020 by rteak |  


キカガク(KIKAGAKU)でニューラルネットワークの概要と順伝播を学ぶ

Photo by Alex Knight on Unsplash

前回「キカガク(KIKAGAKU)で機械学習実践(教師なし学習)を学ぶ」のつづき

学習内容

ニューラルネットワークの概要

  1. ノード(Node)
  2. 入力層(Input Layer)
  3. 中間層(Intermediate Layer)
  4. 隠れ層(Hidden Layer)
  5. 出力層(Output Layer)
  6. 重み(Weight)
  7. バイアス(Bias)
  8. 全結合型(Fully Connected)
  9. 畳み込み型(Convolutional)
  10. 再帰型(Recurrent)

順伝播

  1. 線形変換
  2. 非線形変換
  3. 活性化関数
  4. 活性値(Activation)
  5. ロジスティックシグモイド関数(Logistic Sigmoid Function)
  6. 勾配消失
  7. 正規化線形関数(ReLU:Rectified Linear Unit)
  8. ソフトマックス関数(Softmax)
  9. 目的関数
  10. 平均二乗誤差(Mean Squared Error)
  11. 二値交差エントロピー(Binary Cross Entropy)
  12. 交差エントロピー(Cross Entropy)
  13. ワンホットベクトル(One Hot Vector)
Posted in  on 4/26/2020 by rteak |  


キカガク(KIKAGAKU)で機械学習実践(教師なし学習)を学ぶ

Photo by Alex Knight on Unsplash

今回はキカガクで「機械学習 実践(ハイパーパラメータ) - KIKAGAKU」と「機械学習 実践(教師なし学習) - KIKAGAKU」を学んだ。

学習内容

機械学習実践(ハイパーパラメータ調整)

  1. K-分割交差検証( K-fold cross validation )
  2. 手動調整/グリッドサーチ( Grid Search )
  3. ランダムサーチ( Random Search )
  4. ベイズ最適化( Bayesian Optimization )
  5. 手動によるハイパーパラメータの調整
  6. グリッドサーチによるハイパーパラメータの調整
  7. ランダムサーチによるハイパーパラメータの調整
  8. ベイズ最適化によるハイパーパラメータの調整(探索/活用)

機械学習実践(教師なし学習)

  1. 主成分分析( Principal Component Analysis )
  2. 次元削減( Dimensionality reduction )
  3. 寄与率( Proportion of the variance )
  4. 標準化
  5. ホテリング理論
  6. k-平均法( k-means )
Posted in  on 4/13/2020 by rteak |  


キカガク(KIKAGAKU)で機械学習実践(教師あり学習)を学ぶ

Photo by Alex Knight  on Unsplash

今回はキカガクで「機械学習 実践(教師あり学習:回帰) - KIKAGAKU」と「機械学習 実践(教師あり学習:分類) - KIKAGAKU」を学んだ。

機械学習 実践(教師あり学習:回帰)

回帰

直線で表現することを線形回帰という。

  • 単回帰分析

  • 重回帰分析

  • Ridge 回帰(リッジ回帰)

  • Lasso 回帰(ラッソ回帰)

直線ではない形で表現するアルゴリズムを非線形回帰という。

  • 決定木(回帰木)

  • ランダムフォレスト

  • ニューラルネットワーク

Kaggle などの世界的な分析プラットフォームでは、勾配ブースティングと呼ばれる手法が多く使用されており、有名な例として XGBoost や LightGBM がある。

重回帰分析の復習

回帰分析とは、2 つ以上の変数から回帰分析を行う多変量解析の一つ。
目的関数は単回帰分析と同様に二乗和誤差を用いて最適化する。

重回帰分析の実装

  1. データセットの準備

  2. 学習用データセットとテスト用データセットへ分割
    単純に全体の何割かを学習用データセットとし、残りをテスト用データセットとする、といった分割を行う方法はホールドアウト法 (holdout method) と呼ばれる。

  3. モデルの学習・検証
    Step 1:モデルの定義
    Step 2:モデルの学習
    Step 3:モデルの検証

  4. 推論 (inference)

モデルの検証において、LinearRegression クラスは score() メソッドを提供しており、入力変数と目的変数を与えると学習済みのモデルを用いて計算した決定係数 (coefficient of determination) という指標を返す。決定係数の最大値は 1 であり、値が大きいほど(1 に近いほど)モデルが与えられたデータに当てはまっていることを表す。

学習時に用いたデータに対してはよく当てはまっていても、学習時に用いなかったデータに対しては予測値と目標値の差異が大きくなってしまう現象を、過学習 (overfitting) という。

線形回帰の過学習を抑制する手法

過学習を抑制するアプローチは次のとおり。

  • データセットのサンプル数を増やす

  • ハイパーパラメータを調整する

  • 他のアルゴリズムを使用する
    Ridge 回帰(リッジ回帰)やLasso 回帰(ラッソ回帰)など

正則化 (regularization) は、機械学習において、正則化は目的関数に正則化項と呼ばれるモデルの複雑性に罰則(ペナルティ)を科すために追加の項を導入して過学習を抑制する。

Ridge 回帰は、重回帰分析に対して正則化を行うことで、モデルの過度な複雑さに罰則を課して過学習を抑制する。重回帰分析の目的関数である最小二乗法と正則化項という 2 つの最小化した場所を最適解とする。

ハイパーパラメータとは、モデルの学習を実行する前に設定する値。

ノルムとは、長さを一般化したもので、ベクトル空間で距離を与えるための概念。

Lasso 回帰も、重回帰分析に対して正則化を行うが、不要な入力変数の重みを 0 にし(スパース性)、実質的に入力変数を減らすことによって過学習を抑制する。

スパース性とは物事の本質的な特徴を決定づける要素はわずかであるという性質を示す。

ソースコード



実行結果





Fig.1 パラメータの分布をヒストグラムで可視化


Fig.2 Rigde 回帰のパラメータの分布


Fig.3 Lasso 回帰のパラメータの分布


相関関係と多重共線性問題

過学習が起こる原因の一つとして、入力変数同士の相関が強いものが含まれていると発生する多重共線性 (Multicollinearity) という問題がある。

一般的に機械学習アルゴリズムは、学習時に相関の高い入力変数を使用することにより、モデルの予測精度向上の妨げとなる場合がある。その対策として、単純にデータセットの中から相関の高い入力変数のどちらかを削除する方法や、使用するアルゴリズムを変更する方法がある。

.corr() を使用して相関関係を表す数値(相関係数)を確認する。

相関係数はヒートマップで可視化する。ヒートマップは、seaborn.heatmap() メソッドを使用する。

2 つの変数の関係を可視化するには sns.jointplot() を使用する。

Partial Least Squares (PLS) は、多重共線性の問題の対処法として有力なアルゴリズムである。

  1. 入力値と目標値の共分散が最大になるように主成分を抽出

  2. 抽出された主成分に対して重回帰分析を用いてモデルの学習を行う

主成分分析は、100 個の特徴量があった場合にその特徴量の数を分散を用いて 10 や 20 個などに削減する手法(次元削減)である。

PLS との違いは教師あり学習と教師なし学習で、主成分を抽出するときに目標値の情報を使うか使わないかの違いがある。

scikit-learn に用意されているモジュール PLSRegression を使用すると、これらのステップを意識せずに実装できる。

ソースコード



実行結果



Fig.4 相関係数のヒートマップ


Fig.5 相関係数の高い2つの変数の関係

機械学習 実践(教師あり学習:分類)

分類

分類はカテゴリが異なる複数のデータを見分けることができる境界線を求めることが目的。
二次元平面上にあるデータ(集合)を一本の直線で分けられることを線形分離可能といい、そのアルゴリズムを線形分類器と呼ぶ。

線形分類器として有名なものは、

  • 単純パーセプトロン

  • 線形サポートベクトルマシン

  • ロジスティック回帰

等。

線形分離可能ではない場合に、線形ではない形で分類するアルゴリズムを非線形分類器と呼ぶ。

非線形分類器として有名なものは、

  • k-近傍法

  • 決定木(分類木)

  • ランダムフォレスト

  • 非線形サポートベクトルマシン

  • ニューラルネットワーク

等。

決定木の実装で分類の全体像を理解

scikit-learn は問題設定が回帰、分類問わず、

  1. モデルの定義

  2. 学習

  3. 検証

の 3 ステップで進める。

分類では、回帰の時に使用した指標である決定係数ではなく、決定木の score() メソッドで表示される正解率 (Accuracy) を用いる。
正解率の最小値は 0 となり、最大値は 1 となる。

目的関数は、回帰では平均二乗誤差が用いられていたが、分類では交差エントロピーが主に用いる。
ただし、どちらの目的関数も正解と予測の差を評価したいという考えは同じ。

分類の問題設定でも、scikit-learn を用いての実装は回帰の場合と大きな違いはなく、推論も同様に predict() メソッドで実行することが可能。

決定木の特徴

決定木は複数の分岐を繰り返すことによって分類を行う。
特徴は次の 2 つ。

  • 解釈が容易。必要な前処理が少ない。

  • 過学習になる場合が多く、汎用性の低いモデルになる傾向がある。

ハイパーパラメータは次の 2 つ。

  • max_depth(木構造の深さの上限)は、過学習を抑えるためのハイパーパラメータ。上限が低いとモデルの表現力は低下し、過学習を抑える。

  • min_samples_split(木構造の分岐先の値)は、分岐先のノード数の最低値を設定するハイパーパラメータ。過学習に陥る可能性が上がるので調整が必要。

決定木単体では高い性能を出せない複雑な問題設定に対してはアンサンブル学習が用いられる。
アンサンブル学習は、決定木を基本として、学習器を複数用意して一つのモデルにしようというアルゴリズムである。
アンサンブル学習には、

  • ランダムフォレスト

  • XGBoost

  • LightGBM

等がある。

サポートベクトルマシン (SVM)

サポートベクトルマシンは、2 つのカテゴリを識別する分類器。
サポートベクトルマシンでは、境界線に最も近いサンプルとの距離(マージン)が最大となるように境界線が定義される。

サポートベクトルマシンにカーネル関数を取り入れた一連の手法をカーネルトリックと呼ぶ。
カーネル関数により、高次元(無限次元)の特徴空間へ写像し、特徴空間上で線形分離を行う。

特徴は次の 2 つ。

  • 未知のデータへの識別性能が比較的強い。ハイパーパラメータの数が少ない。

  • 学習する際に必ずデータの標準化(もしくは正規化)を行う必要がある。

ハイパーパラメータは次の 2 つ。

  • C(コストパラメータ)は、誤った予測に対するペナルティ。大き過ぎると過学習を起こす。

  • gamma(ガンマ)は、モデルの複雑さを決定する。値が大きくなるほどモデルが複雑になり過学習を起こす。

サポートベクトルマシンは一般的にデータに対して標準化を適用する必要がある。
標準化 (Standardization) は平均と標準偏差を算出して行なう。
標準化を行うには、sklearn.preprocessiong 以下の StandardScaler を用いる。

算出した平均と標準偏差から実際にデータセットの値を変換するには transform() メソッドを使用する。

ロジスティック回帰

ロジスティック回帰 (Logistic regression) は、あるデータがカテゴリに属する確率を予測するための回帰のアルゴリズムに該当するが、確率を予測することが可能な特性から分類の問題設定で用いられることが多い。

ロジスティック回帰は入力変数から目的変数に対して二値分類をおこなうモデル。

特徴は次の 2 つ。

  • 説明能力が高い。入力変数の重要度、オッズ比がわかる。

  • 線形分類器のため、複雑な問題設定に対応できない場合がある。

ハイパーパラメータは次の 2 つ。

  • C(コストパラメータ)は。誤った予測に対するペナルティ。大きすぎると過学習を起こす。

  • penaltyは、正則化を行う方法を決定する。L1L1、L2L2 のノルムから選択する。

ロジスティック回帰ではオッズ比を用いて、目的変数に対する各入力変数の影響の大きさを確認する。
オッズ比とは、ある事象の 1 つの群と 1 つの群におけるオッズの比として定義される。
オッズ比が 1 になると事象の起こりやすさが同じであることを表し、1 よりも大きい(小さい)とオッズ A がオッズ B よりも起こりやすい(起こりにくい)ということになる。

分類のアルゴリズムには確率を予測できるものと確率を予測できないものに分けることができる。
特に、分類器では前者を識別モデル、後者を識別関数と呼ぶ。

ロジスティック回帰は識別モデルに該当し、predict() メソッドで推論を行い分類結果を取得でき、predict_proba() メソッドで確率を取得することができる。

scikit-learn を用いて推論を行う際の入力変数は行列である必要がある。

分類の評価方法

分類において、学習済みモデルを評価する指標

  • Accuracy(正解率)は分類の精度を確認するための指標

  • Precision(適合率)は誤りを少なくしたい場合の指標

  • Recall(再現率)は正例の見逃しを避けたい場合の指標

  • F1score(F 値)はPrecision と Recall の両者のバランスを取るために調和平均で計算される指標

Precision と Recall は互いにトレードオフの関係にあり、どちらかの値を上げようとすると、もう一方の値が下がることになる。

混同行列 (Confusion Matrix) は実測値と予測値の関係性を示す表。

  • TP (True Positive、真陽性):予測値を正例として、その予測が正しい場合の数

  • FP (False Positive、偽陽性):予測値を正例として、その予測が誤りの場合の数

  • TN (True Negative、真陰性):予測値を負例として、その予測が正しい場合の数

  • FN (False Negative、偽陰性):予測値を負例として、その予測が誤りの場合の数

ソースコード




実行結果



Fig.6 入力変数の影響度


Fig.7 特徴量の重み


Fig.8 オッズ比



Fig.9 目的変数のデータ個数 


Fig.10 混同行列


Fig.11 評価指標


Posted in  on 4/12/2020 by rteak |  


キカガク(KIKAGAKU)で AI を学ぶ


Photo by Alex Knight  on Unsplash

※2020年4月6日の投稿記事を再編集しました。
※キカガクはリニューアルされ、この記事で紹介している講座は受講できません。

KIKAGAKU | AIを無料で学べる学習サイト が Web ニュースで紹介されていた。
コロナ禍で家にいることが多くなったこともあり、このサイトで AI を学んでみることにした。

はじめに

コンテンツのコンセプトが説明されている。
利用する上で、費用や環境等に支障がないことがわかり安心。
学習する側に立った配慮がなされている。
学習方法や学習環境の構築についても懇切丁寧に説明されている。

データサイエンスの基礎

データサイエンスと社会への応用

データサイエンスとは

データサイエンスとは、与えられたデータに基づいて知見を見出し、次の行動にその知見を活かすこと。

データサイエンティストとは、データサイエンスを駆使する人のこと。
ビジネスの中に存在する課題を把握し、課題に対しデータ解析を行い、解決への活路を見つけ、その解決策を継続的に利用可能な形に変えていくスキルが必要。

データ解析の方法

  • データの集計
  • データの可視化
  • データの予測
    与えられた過去のデータの傾向に基づいて、次の値を予測する。
    入力値に対する目標値の両方を与えて、入出力間の関係を学習させる。

データ解析が活用されている事例

  • 製造業
    異常検知、在庫管理(組合せ最適化)
  • 小売
    リコメンド(類似度)
  • 医療
    医師の判断を支援

人工知能・機械学習・ディープラーニング

人工知能 (Artificial Intelligence)

  • 学習
    規則性を見つけてモデル化すること。
    入力値(情報)と目標値(答え)を与え、その関係性・規則性を見つけ出すこと。
  • 推論
    学習を終えて得られた学習済みモデルを用いて、新しい入力値に対してその予測値を求めること。
    AI 搭載のプロダクトには、この学習済みモデルを用いた推論機能が組み込まれている。

機械学習 (Machine learning)

機械学習は、収集したデータに基づいてモデルの学習を行い、そのデータの構造の特徴を掴むこと。

  • 教師あり学習
    学習では、入力値 xx (情報)と目標値 tt (答え)のセットを与え、その規則性・関係性を見つける。そして、学習で獲得した学習済みモデル(入力値と目標値の規則性・関係性)と新たな入力値 xx から、予測を行う。また、この予測の事を推論と呼ぶ。
    回帰 (regression) は、目標値に連続値を取る(家賃、売上、株価など)。
    分類 (classification) は、目標値にカテゴリを取る(犬/猫、男/女、赤ワイン/白ワインなど)。
  • 教師なし学習
    目標値(答え)がない。教師あり学習と異なり、予測する対象が決まっていない。
    主にデータの背後に存在する本質的な構造を抽出するために用いられる。
    人間が統計量などを用いて、出力結果に対する意味解釈を行う。
    代表的な例として、データに対してクラスター(グループ)を作るクラスタリングがある。
    データ間の距離が近いデータをクラスターとする k-平均法は、クラスタリングの代表的なアルゴリズムである。
  • 強化学習
    少数もしくは全くデータがない状況でも学習を行うことができる。
    行動しながらデータを収集し、そのデータで学習を行い、次の行動を決めていくといったプロセスまでが強化学習には含まれている、
    シミュレーションできる環境もしくは、実機で何度も再現できる環境が必要である。

ディープラーニング (Deep Learning)

アルゴリズムは、実際にコンピューターが実行できるレベルまで具体的な手順を明確化したもの。

機械学習アルゴリズムのひとつがディープラーニング。
ディープラーニングは主に教師あり学習で用いられる。
ディープラーニングは、特徴抽出の工程をアルゴリズムの一部として組み込むことに成功し、データに基づいて特徴抽出まで学習できることで、属人的であった工程を省くことができるようになった。

ディープラーニング以外の機械学習アルゴリズムとして、決定木やロジスティック回帰などがある。

機械学習の開発ロードマップ

機械学習の開発ロードマップ(開発プロセス)は次のような順序になる。

  1. 企画・ヒアリング
  2. 環境構築
  3. データ収集
  4. データ前処理
  5. モデル構築
  6. プロトタイプ構築
  7. 運用・検証
  8. 再学習

Posted in  on 4/06/2020 by rteak |  


Deep Learning の学習記録

Photo by Franck V. on Unsplash

教材

東京大学で開催された「Deep Learning 基礎講座」のコンテンツ( Deep Learning基礎講座演習コンテンツ 公開ページ | 東京大学松尾研究室 - Matsuo Lab )を Google Colaboratory にアップロードして学習中。

講義は視聴できず、演習のみ。

学習内容

今回は、演習を通じてデータ分析でよく使用されるライブラリ(Numpy、Scipy、Pandas、Matplotlib)の使い方を学んだ。

Numpy

多次元配列、転置、行列の積、乱数、復元抽出、非復元抽出

Scipy

逆行列、固有値、固有ベクトル、最適化

Pandas

Series、DataFrame、データの操作、データの結合、ソート

Matplotlib

データビジュアライゼーション、散布図、ヒストグラム

Posted in  on 3/23/2020 by rteak |  


Python で日数を加算(減算)した日付を求める

Photo by Roman Bozhko on Unsplash


指定した日付に指定した日数を加算(減算)した日付を求める関数を作成したので公開。

関数名:add_days
引数1:起点となる日付(yyyy/mm/dd形式、「/」スラッシュは指定した区切り文字)
引数2:日数(減算の場合はマイナスで指定)
引数3:区切り文字(デフォルトは「/」スラッシュ)
戻り値:日付(yyyy/mm/dd形式、「/」スラッシュは指定した区切り文字)

引数1で指定した日付に引数2で指定した日数を加算(マイナスの場合は減算)した結果の日付を求める。
日付は引数3で指定した区切り文字で区切った日付の文字列として戻される。

■ソースコード


【関連記事】


Posted in  on 3/22/2020 by rteak |  


Python で日数計算

Photo by Mockaroon on Unsplash


日数計算を行う関数を作成したので公開。

関数名:day_count
引数1:起点となる日付(yyyy/mm/dd形式)
引数2:終点となる日付(yyyy/mm/dd形式)
引数3:区切り文字(デフォルトは「/」スラッシュ)
戻り値:日数

起点となる日付から終点となる日付までの日数を算出する。

■ソースコード



Posted in  on 3/19/2020 by rteak |  


Google Colaboratory

Photo by Matt Ragland on Unsplash


Google Colaboratory は、ブラウザさえ使えればどこでも Python を使った機械学習、ディープラーニングが実行できる。
(しかもスマホのブラウザでもOK)

開発環境は何もしなくても整っている。
Githubとも連携できる。
GPU も無料で使える。

ノートブックの中でテキストやコードが書ける。
コードはそのまま実行できる。

スニペットが用意されており、貼り付けるだけでミスのないコードが書ける。

Google Drive 内の Sheets や ファイルを使ったプログラミングが簡単に行える。
Google Drive 内の リソースを使用する場合は認証手続きがあり、セキュリティも確保されている。

他にもいろいろとメリットがありそうだ。

今使用している PC は非力なので、しばらくは Google Colaboratory を使ってみることにする。



Posted in  on 3/18/2020 by rteak |