E資格挑戦!!

このブログはE資格取得に向けた学習内容をまとめたものです(^o^)

機械学習【ラビット・チャレンジ(E資格)】

 

線型回帰モデル

要 点

 線型回帰とは回帰問題(ある入力(離散あるいは連続値)から出力(連続値、「目的関数」という。)を予測する問題)のうち、出力を直線で予測出来るものを指す。線型回帰モデルは線型回帰問題を解くための機械学習モデルの一つである。

 「線形回帰モデル」

  ・回帰問題を解くための機械学習モデルの一つ

  ・教師あり学習(教師データから学習)

  ・入力とm次元パラメータの線形結合を出力するモデル

f:id:satoshi19841011:20210202125903j:plain

 

 線型回帰モデルは教師データを有する「教師あり学習」に分類され、入力(説明変数)とm次元パラメータの線形結合を出力する。この際、線形結合とは入力(説明変数)と未知のパラメータの各要素を掛け算し足し合わせたものとして表される。

 入力(説明変数)は回帰曲線に誤差があると仮定し、出力(目的関数)に乗ずる未知のパラメータを推定するものである。この際、未知のパラメータの推定には最小二乗法が用いられる。

 線型回帰モデルは、1次元の入力の場合は単回帰モデル、2次元以上の場合は線形重回帰モデルと呼ばれる。

 データの分割とモデルの汎化性能測定

 本講義では機械学習で用いるデータを学習用データと検証用データに分ける工程についても説明された。

 ● データの分割

  ・ 学習用データ:機械学習モデルの学習に利用するデータ

  ・ 検証用データ:学習済みモデルの精度を検証するためのデータ

 ● データを分割する理由

  ・ モデルの汎化性能(Generalization)を測定のため

  ・ データへの当てはまりの良さではなく、未知のデータに対してどれくらい

   精度が高いかを検証するため

f:id:satoshi19841011:20210202130410p:plain

実装演習結果/サマリーと考察

  演習課題は、ボストンの住宅データセット(ボストン市の住宅価格)を用いた物件価格の推定である。ここで用いたデータセットは線型回帰モデルのテストセットとしてよく用いられるものである(データのレコード数は506、カラム数は14である)。

 問題はカラムのうち部屋数(=4)、犯罪率(=0.3)を用いた物件価格の推定である。

f:id:satoshi19841011:20210202130707p:plain

 

  Pythonで実装した線型回帰モデルによる価格の推定値は約4.24であった。

                             (プログラムソースのキャプチャを下に示す。)

f:id:satoshi19841011:20210127004930p:plain

f:id:satoshi19841011:20210127005010p:plain

f:id:satoshi19841011:20210127005047p:plain

線形回帰_画面キャプチャ

 考察として、与えられたデータセットに基づき、線型回帰は実装できたと考えられる一方、与えられたデータセットには説明関数に用いた部屋数に「4部屋」というデータはなく、講義でも言及のあった外挿問題が生じていると推察される。また、価格の推定値もデータセットに含まれるデータの値から大きく下回ることから、正しい予測値ではないと考えられる。

関連記事レポート

 上記の課題で取り上げられているボストンの住宅データセットは線形回帰モデルの検証用としてよく知られていることから、様々なHP、個人ブログで取り上げられている。例えば、下記のブログでは、ライブラリ(matplotlib)を用いてデータの回帰曲線を描画するなど、分析対象のデータを視覚的に表現しながら、ライブラリ(scikit-learn)の活用法、コーディングを紹介しており、参考になった。

qiita.com

非線形回帰モデル

要 点

 非線型回帰とは回帰問題(ある入力(離散あるいは連続値)から出力(連続値、「目的関数」という。)を予測する問題)のうち、出力を曲線で予測出来るものを指す。非線型回帰モデルは非線型回帰問題を解くための機械学習モデルの一つである。

 非線形回帰の目的関数の導出には、基底展開法が用いられる。基底展開法は回帰関数として、基底関数と呼ばれる既知の非線形関数とパラメータベクトルの線型結合を使用する。よく使われる基底関数としては、多項式関数、ガウス型基底関数などが挙げられる。

f:id:satoshi19841011:20210202131025p:plain

 非線形回帰モデルの場合も、未知パラメータは線形回帰モデルと同様に最小2乗法や最尤法による推定を行う。

 また、学習データに対して、十分小さな誤差が得られない「未学習」や、逆に誤差は小さいものの、モデルの検証に用いるテスト集合誤差との差が大きくなる「過学習」の問題があり、対策を施し、適切な表現力のモデルを構築することが必要である。その方法として、不要な基底関数の削除、正則化法などを取り入れる方法が有効である。

f:id:satoshi19841011:20210202131151p:plain

実装演習結果/サマリーと考察

 講座では非線形回帰の課題(ハンズオン)が明記されてなかったので、サマリーと考察として上記要点の補足事項と正則化法(罰則項:Ridge回帰、Lasso回帰)を用いて線形回帰モデルの改良の検証例を記載する。

 非線形回帰モデルは線型回帰モデルと同様に基底展開法を適用できるが、未学習、過学習という導出したモデルの表現力が低い場合(未学習)と高い場合(過学習)があり適切な表現のモデルとなるように「工夫」が必要である。そのための主要な方法には正則化法がある。正則化法は、モデルの複雑なに伴って値が大きくなる正則化項を課して、その値を最小化するものである。

     f:id:satoshi19841011:20210222233003p:plain

    f:id:satoshi19841011:20210222232834p:plain

 次に線形回帰モデルの実装で用いたボストンの住宅データセットを用いて、①線形回帰モデル、②線形回帰モデルにRidge推定量による罰則項を適用したモデル(Ridge回帰)、③線形回帰モデルにLasso推定量による罰則項を適用したモデル(Lasso回帰)を実装し、その精度の評価を行った。その結果、Ridge回帰によるモデルが最も精度が高く、Lasso回帰によるモデルと元に線形回帰モデルが概ね同等の精度になった(この際、訓練データを全データの70%、テストデータを30%に設定した。)。

 ①、②、③を実装したプログラムソースのキャプチャを下に示す。

f:id:satoshi19841011:20210222233833p:plain

線形回帰モデルの精度評価(1/2)

f:id:satoshi19841011:20210222233910p:plain

線形回帰モデルの精度評価(2/2)

f:id:satoshi19841011:20210222233945p:plain

Ridge回帰モデルの精度評価(1/2)

f:id:satoshi19841011:20210222234019p:plain

Ridge回帰モデルの精度評価(2/2)

f:id:satoshi19841011:20210222234045p:plain

Lasso回帰モデルの精度評価(1/2)

f:id:satoshi19841011:20210222234113p:plain

Lasso回帰モデルの精度評価(2/2)

 また、モデル構築時の学習データにない入力に対する予測性能を「汎化性能」といい、その検証方法として、 学習に使用したデータと同じデータを用いて、モデルの学習データへの当てはまりの良さを評価する方法がある。学習データを構築したモデルに入力て得られた出力の誤差(学習誤差)と、学習データにないデータ(検証データ)を入力して得られた誤差(検証誤差)を比較し評価する方法である。

 モデルの予測精度や誤り率を推定するための手法に「ホールドアウト法」がある。これは有限のデータを学習用とテスト用に分割して、モデルの構築(学習)と検証に使用するものである。しかし、手元に大量のデータがある場合を除き、良い性能評価が得られない。そのため、手元のデータから取り出す学習用データを変化させる「クロスバリデーション(交差検証)」と呼ばれる方法で、それぞれの学習、検証データを元に構築したモデルを検証する方法がある。こうして得られた各モデルの精度の平均をCV(モデルの汎化性能)と呼ぶ。CVの値が小さいほど汎化性能が高く優れたモデルといえる。

 ホールドアウト法とクロスバリデーションのイメージを下に示す。

f:id:satoshi19841011:20210202132051p:plain

ホールドアウト法イメージ

f:id:satoshi19841011:20210202132139p:plain

クロスバリデーションのイメージ

 また、学習誤差と検証誤差の導出のイメージを下に示す。

f:id:satoshi19841011:20210202131653p:plain

f:id:satoshi19841011:20210202131723p:plain

 

 さらに、機械学習のモデルにおける設定値、制限値などはチューニング・パラメータという。最適なチューニング・パラメータの算出には、グリッドサーチという手法がある。グリットサーチは、取り得るパラメータの組み合わせを試行していくことで最適なパラメータを走査する方法である(この他、パラメータの設定範囲、試行回数を指定して、その範囲内で無作為に抽出したパラメータから最適な組み合わせを走査するランダムサーチという方法もある。)

f:id:satoshi19841011:20210202132520p:plain

グリッドサーチのイメージ

   

関連記事レポート

 非線形回帰モデルに限らず、Pythonを用いた機械学習、特に回帰問題等のデータ解析に関する関連書籍を紹介する。下記の図書は本講義でも利用されているpandas、Numpyなどのライブラリについて体系的に解説、理解しやすい書籍と思料。私自身、人工知能分野の初学者なので十分に理解できているわけではないが、引き続き参照しつつ学習を進めていきたい。

www.amazon.co.jp

ロジスティック回帰モデル

要 点

 ロジスティック回帰モデルとは、ある入力(数値)からクラスに分類する問題(分類問題)の一つであり、教師データを有する「教師あり学習」の機械学習モデルである。

 また、出力をを確率として扱い、分類する上で任意の入力を0〜1の間の数値に変換、出力できるシグモイド関数が必要である。シグモイド関数微分シグモイド関数自身を用いて表現できるため計算も容易である。

f:id:satoshi19841011:20210202205837p:plain

シグモイド関数

f:id:satoshi19841011:20210202205908p:plain

シグモイド関数微分


 

 

 ロジスティック回帰モデルは、怪しい人物を検知する動画分析ソリューションなどでも活用されている。
















実装演習結果/サマリーと考察

 講義資料は、タイタニック号の乗客データのデータセットを用いたロジスティック回帰による分類問題があった。ここで用いたデータセットはロジスティック回帰モデルを含む分類アルゴリズムのテストセットとしてよく用いられるものである(データのレコード数は891、カラム数は11である)。      

  

 講義資料では「30歳男性の乗客が生き残れるか」という問題がである。まずは、よくKaggleコンペで取り上げられている生存確率の推定を題材に、性別と年齢を説明変数とし、訓練データとテストデータに分けた上で、モデルの精度(テストデータが適切に生存又は死亡に分類されるか)を検証してみた。

 

f:id:satoshi19841011:20210202132739p:plain

  Pythonで実装したロジスティック回帰モデルによる生存、死亡の分類の精度は約77%であった。

  続いて、構築した回帰モデルをもとに課題を検証した。

  「30歳」、「男性」の条件で分類したところ、「0」(死亡)に分類された。

  また、この際に死亡に分類される確率は約80%であった。

  

  (以下にプログラムソースのキャプチャ及びコードの概要を示す。) 

f:id:satoshi19841011:20210127111508p:plain

[5]、[58] 最初に必要なライブラリ、データセットを読み込む。データセット'titanic'はseabornに格納されているものを使用した。

[112] titanicに格納されているデータの最初の5行を試し表示させた。 

f:id:satoshi19841011:20210127111739p:plain

[99] データセット'titanic'からから性別’sex’及び年齢'age'を取り出した。これを目標変数Xとおいた。 

f:id:satoshi19841011:20210127111757p:plain

生存者"survived"を目的関数Yとおいた。 

f:id:satoshi19841011:20210127111811p:plain

[104]  X、Yを訓練データとテストデータに分割した。この際、テストデータの割合を0.2とした。

[108] ロジスティック回帰を用いることを宣言

[109] 訓練データを用いて学習

[110] テストデータを用いてモデルの精度を検証し、約0.77(77%)の精度を得た。

f:id:satoshi19841011:20210127160154p:plain

 

最後に、「30歳」、「男性」の条件で検証したところ、0(死亡)に分類された。

(死亡に分類される確率は約80%)

関連記事レポート

 Kaggleでは機械学習の初心者向けにタイタニック号の生存者予測のコンペティションが行われている。そのため、タイタニック号の生存者予測については、Kaggleほか、個人のブログでもソースコードの公開、解説記事が多く存在する。(例えば下記ホームページではcsv形式でデータセットも公開している。)

 今回、上記の課題を実施するにあたり、タイタニック号の乗客のデータセットの入手方法について検索したところライブラリ(seaborn)内に格納されていることを知った。過去にC言語などを学習した際の経験として科学技術計算等に用いるライブラリの入手や活用に対し、当時初心者として取っ付きにくく感じていたのとは対象的に、Pythonは実装のハードルは低く扱いやすいものと感じた。

 一方、理論(数学的な事項)を十分に理解せずとも便利なホームページを活用することで、ある程度の実装ができてしまい機械学習が分かった気になる。一方、それだけで進めていくと、モデルの結果の検証や修正の段階で行き詰まってしまうのではないかと感じた。コードの実装に合わせて理論を十分に理解出来るよう努める必要がある。  

www.kaggle.com

 また、本講義で学んだ訓練データとテストデータに分割して学習させる手法を用いて、線形回帰モデルの課題で用いたボストンの住宅データセットを題材に、データ全体のうち7割を訓練データとして学習した際に、モデルの精度がどの程度実現できるか検証してみた。

 以下に実行結果のキャプチャーを示す。最後に5つのテストデータの価格と学習したモデルを元にした予測データを出力しているが、概ね一致していることが確認できた。

 

f:id:satoshi19841011:20210203213414p:plain

f:id:satoshi19841011:20210203213450p:plain

f:id:satoshi19841011:20210203213508p:plain

f:id:satoshi19841011:20210203213605p:plain

f:id:satoshi19841011:20210203213627p:plain

主成分分析

要 点

 主成分分析とは、多変量データの持つ構造をより少数個の指標に圧縮することであり、計算量の減少を実現する手法である。データの次元を圧縮(少なく)することに伴う情報の損失を抑えることが必要であるが、2、3次元まで次元を圧縮すれば可視化も可能である。

f:id:satoshi19841011:20210202163806p:plain

次元圧縮のイメージ

 多変量データの情報の量を分散の大きさと捉え、線形変換後の変数の分散が最大となる射影軸を探索線形変換後の分散が最大になる投射軸を探索する。

 

f:id:satoshi19841011:20210202164218p:plain

f:id:satoshi19841011:20210202164100p:plain

投射軸のイメージ

 この際、変換後の分散は次の式で表される。さらに、ノルムが1になるよう制約条件を付した上で変換後の分散が最大になるようよう、ラグランジュ関数を用いて解く。

 

f:id:satoshi19841011:20210202164740p:plain

変換後の分散

f:id:satoshi19841011:20210202164922p:plain

目的関数と制約条件

 また、主成分分析の次元圧縮により情報量の損失は寄与率により評価できる。

 寄与率は第k主成分の分散の全分散に対する割合(第k主成分が持つ情報量の割合)を指し、1〜k主成分まで圧縮した際の情報損失量の割合を累積寄与率とおくとき、それぞれ次の式で評価できる。

 

f:id:satoshi19841011:20210202165556p:plain

左:寄与率、右:累積寄与率
実装演習結果/サマリーと考察

 本講義の実装演習は次の通りである。

 【設定】

  ・乳がん検査データを利用しロジスティック回帰モデルを作成

  ・主成分を利用し2次元空間上に次元圧縮 

f:id:satoshi19841011:20210202133525p:plain

 【課題】

  ・32次元のデータを2次元上に次元圧縮した際に、うまく判別できるかを確認 

 課題の結果、32次元のデータを用いたロジスティック回帰モデルによる判別の精度は約96%、主成分を利用し2次元に次元圧縮した場合は約93%であり、概ねうまく判別できたと考える。 

     以下にプログラムソースのキャプチャ及びコードの概要を示す。

 

f:id:satoshi19841011:20210129120114p:plain

[250] 必要なライブラリをインポートする。

   乳がんデータ('load_breast_canser')、主成分分析に必要なライブラリ(PCA)など。

[252] [253] 読み込んだ乳がんデータの項目を確認した。

 

f:id:satoshi19841011:20210129120138p:plain

 [255] 乳がんデータの項数を確認した(カラムに30個の説明関数があることを確認)。

 [257] [259] レコード数をカラム数を確認し、中身の確認をした。

f:id:satoshi19841011:20210129120153p:plain

[181] 目的関数の中身を確認した('malignant':悪性、'benign':良性 に分類され、それぞれ0、1で表現されていた)。 

 

f:id:satoshi19841011:20210129120208p:plain

[184] [185] 目的関数をY、説明関数をXとおいた。

[241] X,Yを訓練データとテストデータに分割した。この際、テストデータを1割に設定

[242] [243] ロジスティック回帰モデルを生成

f:id:satoshi19841011:20210129120232p:plain

[244] モデルの精度を確認。約96%の精度であった。

[245] 主成分を利用して2次元に圧縮することを宣言

[246] 説明関数のXの訓練データを2次元のデータに置き換え

[247] ロジスティック回帰モデルを生成することを宣言

f:id:satoshi19841011:20210129120249p:plain

[248] 2次元に圧縮したデータを元にロジスティック回帰モデルを生成

[249] 2次元に圧縮した訓練データと目的関数を用いてロジスティック回帰モデルの精度を確認。約92%の精度を実現していることを確認

 

 今回は主成分分析の次元圧縮のみを実施したが、今後は寄与率、累積寄与率の確認や視覚化も試行してみたい。 

関連記事レポート

 練習として、線形回帰モデルで題材にしたボストンの住宅データセットを元に主成分分析を用いて、そのモデルの精度を検証してみた。

 仮に主成分分析を行っても高い精度を確保できるのであれば、住宅価格を予測するための説明変数(犯罪率、税金など)には強い相関関係がある言える。

 結果としては精度は25%程度であり、説明変数間の相関性は低いと考えられる。一方、主成分分析により相関性の強さの評価は検証できたことから、今後、未知のデータの相関性を確認する際などに活用してみたい。

 以下にプログラムソース及び実行結果のキャプチャを示す。

f:id:satoshi19841011:20210203225551p:plain

f:id:satoshi19841011:20210203225608p:plain

f:id:satoshi19841011:20210203225623p:plain

f:id:satoshi19841011:20210203225642p:plain

f:id:satoshi19841011:20210203231104p:plain
アルゴリズム

要 点

 本講義では、分類問題のための機械学習手法としてk近傍法及びk-means(k平均法)について説明があった。新しいデータを追加した際に最も近傍にあるk個とり、それらがもっとも多く所属するクラスにkを識別する手法である。

k近傍法

 下にk近傍法のイメージを示す。kのとり方(何個のデータを取るか)により、分類が変わる場合がある。

f:id:satoshi19841011:20210202134231p:plain

k近傍法のイメージ

 kの値は一般に大きくするほど、分類の境界線は滑らかになる。

f:id:satoshi19841011:20210202134615p:plain

  k-means(k平均法)

 k-meansは、与えられたデータをk個のクラスタに分類する教師なし学習によるクラスタリング手法である。イメージとしては特徴の似たものをグループにするものである。

 

f:id:satoshi19841011:20210202135601p:plain

k-meansのイメージ

k-meansは次の手順で行う。

 ① 各クラスタ中心の初期値を設定

 ② 各データ点に対して、各クラスタ中心との距離を計算し、

  最も距離が近いクラスタを割り当て

 ③ 各クラスタの平均ベクトル(中心)を計算

 ④ 収束するまで②、③の処理を反復

この際、初期値の値が近すぎる場合などは上手くクラスタリングできない場合があり、初期値の設定に注意が必要

f:id:satoshi19841011:20210202135942p:plain

クラスタリングが上手く行かない場合のイメージ
実装演習結果/サマリーと考察

 講義資料には準備された人口データをもとにk近傍法により分類する課題が記載されていた。

f:id:satoshi19841011:20210202135049p:plain

k近傍法のハンズオン

 

 しかし、ラビット・チャレンジではハンズオン用のデータ保存先等が不明であったため、練習としてSklearnに含まれるワインのデータセットを元に、K平均法を用いたクラスタリングを実装した。13種類あるワインの説明変数(アルコール度数など)の中からアルコール度数と色彩強度を用いてワインを3種類(3個のクラスター)に分割し、可視化した。

 以下にプログラムソース及び実行結果のキャプチャを示す。

f:id:satoshi19841011:20210129152421p:plain

f:id:satoshi19841011:20210129152439p:plain

f:id:satoshi19841011:20210129152506p:plain

f:id:satoshi19841011:20210129152519p:plain

f:id:satoshi19841011:20210129152535p:plain

関連記事レポート

 練習として、iris(アヤメ)のデータセットを題材に「k近傍法」及び「決定木」を用いて正しく分類できるかを検証してみた。

 

「k近傍法」

 irisのデータセットの目的関数(irisの種類)は3種類であるので、正しく3個のクラスターに分類できるかどうかを確認した。

 結果として、K=3の場合、約98%の精度を得られた。またKの値は大きく取りすぎると精度が減少することも確認できた。(例えばデータ数の半数である75(=K)とおくと精度は約69%であった。)Kの値はハイパーパラメータとして適切な値を設定する必要があると考えられる。

 以下にプログラムソース及び実行結果のキャプチャを示す。

f:id:satoshi19841011:20210204012605p:plain

f:id:satoshi19841011:20210204012638p:plain

f:id:satoshi19841011:20210204012659p:plain

 (以下はK=75とした場合の精度を計算した画面キャプチャである。精度が約69%になっていることが確認できる。)

f:id:satoshi19841011:20210204012906p:plain

 

「決定木」

 k近傍法と同様にirisのデータセットの目的関数(irisの種類)3種類を正しく分類できるかどうかを確認した。

 決定木の深さを3とし、分類を行った結果約97%の精度(テストデータの割合=0.2の場合。割合を0.1にすると100%の精度)を得られた。

 以下にプログラムソース及び実行結果のキャプチャを示す。

f:id:satoshi19841011:20210208102249p:plain

f:id:satoshi19841011:20210208102310p:plain

サポートベクターマシン

要 点

 サポートベクターマシンSVM)とは、2クラス分類のための機械学習手法の一つであり、線形モデルの正負で2値分類するものである。

 SVMでは、線形判別関数ともっとも近いデータ点との距離をマージンといい、この値が最大となる線形判別関数を求めるという手法である。

f:id:satoshi19841011:20210202161734p:plain

SVMにおけるマージンのイメージ

 SVMはマージンを最大化することを目標なので目的関数は次のように表される。

f:id:satoshi19841011:20210202162119p:plain

 上記の式の分子は、マージン上のすべての点において1になり、その他の点では1より大きい値をとることから、目的   関数及びその制約関数は次のように表せられる。

f:id:satoshi19841011:20210202162720p:plain

 この目的関数を最適化問題として扱い、ラグランジュ未定乗数法で解く。

 SVMは2値分類する際に境界部分(分離超平面)のデータとしてサポートベクター

 (下図参照)のみを機械学習の学習データとして扱い、他のデータは不要になる。

 

f:id:satoshi19841011:20210202163504p:plain

サポートベクターのイメージ
実装演習結果/サマリーと考察

  講義資料では具体的な実装演習の明示がなかったため、練習としてsklearnに含まれるiris(アヤメ)データセットを元に、irisのデータ(花弁やがくの長さ、幅など)からirisの種類を判別するSVMモデルを作成した。

 レコード数150のデータに対し、データの半分を訓練データとして学習させたところ、50個のテストデータに対し、分類の精度は100%(50個すべて適切に分類)であった。

 以下にプログラムソース及び実行結果のキャプチャを示す。

 

f:id:satoshi19841011:20210129165653p:plain

f:id:satoshi19841011:20210129165734p:plain

関連記事レポート

 練習として、手書き文字のデータセット(0〜9)に対しSVMを適用し、正しく分類できるかを検証した。

 結論として全ての数字に対し、ほぼ100%の正解率(最も低い正解率は「9」の86%)が得られた。

 下記にプログラムソース及び実行結果のキャプチャを示す。

 

f:id:satoshi19841011:20210204002459p:plain

f:id:satoshi19841011:20210204002518p:plain

f:id:satoshi19841011:20210204002541p:plain