Introduction to Applied Linear Algebra 第7章

第6章はこちら。第7章はMatrix Examples、行列を使った事例の紹介。

行列による演算で拡縮や回転反転などができる。また直線への射影もできる。軸の変換も同様。

各行に1の要素が一つだけある行列をかけ合わせることで、ベクトルに対して要素を選択するような演算を行うことができる。これを応用すると画像のクロップも行える。同様にpermutationを行列の掛け算で行うこともできる。

Incidence matrixという表現を使うと、有向グラフやネットワークを表せる。これを応用してグラフ上の流量を計算するような例が書かれている。

最後に1次元畳み込みと2次元畳み込みの事例が書かれていて、グラフや画像を平滑化するために用いられている例が図とともに述べられている。

Introduction to Applied Linear Algebra 第6章

第5章はこちら。第6章は行列について。

まずは行列の定義とか用語の説明などから入って、例として票形式のデータを行列で表すのが挙げられている。他にもdirected graphを行列で表す隣接行列の考え方なども述べられている。

次にゼロ行列と単位行列の解説がある。この辺りは基礎なので問題なく読み進められる。

最後に行列の転置・足し算・掛け算が説明されている。各章でおなじみではあるが、各演算の計算量も解説されている。

Introduction to Applied Linear Algebra 第5章

第4章はこちら。第5章は線形独立について。

まずは線形従属とは何ぞやという話から始まって、線形独立なベクトルを開設している。その後Basis(基底)の説明があって、線形独立なベクトルは基底を張っているというような内容が書かれている。

例としてはキャッシュフローとローンの利率の計算をある期間のでどのように変化するかという例が挙げられている。

そのあとは、Orthonormalベクトルの解説があり、グラムシュミットのアルゴリズムでOrthonormalベクトルを求める方法が説明されている。

Introduction to Applied Linear Algebra 第4章

前回はこちら。4章はクラスタリングの話。序盤でクラスタリングみたいな話が入ってくるのは珍しい。それだけ応用を意識している本ということだろうか。

クラスタリングがどういうものかの説明の後に様々な応用事例が述べられている。例えば郵便番号のクラスタリングや、アンケート結果のクラスタリングなど、非常に幅広い分野で応用が可能。

クラスタリングの目的関数とk-means法の紹介がある。この辺りは、よくある機械学習の教科書とかを見れば簡単に理解できる。

最後に実際の応用事例としてMNISTのクラスタリングやドキュメントトピックのクラスタリングが説明されている。MNISTの場合は単純にピクセル値を、ドキュメントトピッククラスタリングの場合は単語のカウントをベクトルとして入力としただけで、それなりにもっともらしい結果が出力できている。

Introduction to Applied Linear Algebra 第3章

第三章はノルムと距離について。2章の内容についてはこちら

ノルムとはベクトルの大きさのようなものですよ、という解説から始まり、ノルムの性質・計算方法などが説明されている。距離についてはなじみのあるユークリッド距離から解説が始まって三角不等式が述べられている。

次の節では標準偏差の計算方法が解説されている。統計的な本で見る記述と比べるとベクトル表現なので、一見して理解しづらいがやっていることは統計学の標準偏差の計算と同様。

次にベクトル間の角度を計算する方法が説明されている。内積とノルムが分かると角度は計算できる。ついでに相関係数や計算量についての話も書かれている。

Introduction to Applied Linear Algebra 第2章

引き続きIntroduction to Applied Linear Algebra第2章を読んだ時のメモ。第1章はこちら

第二章は線形関数について。線形関数はベクトル同士の掛け算で表せますよということから始まって、アフィン変換などで2次元ベクトルの場合グラフ上でどのように変換されるかが可視化されている。具体例としてcivil engineeringの分野で橋にかかる負荷の計算の例が挙げられていた。

その後は、テイラー展開と線形回帰モデルについての解説がある。テイラー展開では偏微分とか出てくるけども、二次元での例が図示されているので何となく理解できると思う。線形回帰の部分では住宅価格の予測についての例が示されている。

Introduction to Applied Linear Algebra 第1章

線形代数の復習をかねてIntroduction to Applied Linear Algebraという本を読んでいます。線形代数についての基礎(ベクトル・行列)から機械学習に関する応用など幅広く書かれていて、読み始めですがかなり分かりやすいです。
実世界での応用事例についてを紙幅を割いて各章で述べられているところも、初学者にとってはなんで線形代数を勉強するのかという疑問を解決するために良いと思っています。

まずは第一章。第1章はベクトルです。基本的にはベクトルとは何か、足し算、内積などの基礎的な内容から計算量までが語られています。
応用事例として例えばベクトルの内積により、2つのベクトルの共起回数を求められるといった内容や、多項式の計算ができるといったことなどが書かれています。

「欠測データ処理」を読んだ

データ分析の前処理における重要なポイントの一つとして、欠測データをどのように扱うかがある。
入門向けの記事だと単純に平均値や0埋めなどを施して、そのまま機械学習モデルに投入する例が多いが統計学的にはこのような単一代入法と呼ばれる手法はバイアスを生じる。
そこで使われるのが多重代入法と呼ばれる手法である。

多重代入法について詳しく知りたかったので、評価の高い「欠測データ処理」を読んだ。

本書では欠測データの種類、単一代入法・多重代入法の理論的な側面とともにRによる実際のコード例も紹介されている。
例えば、一口に欠測データといってもその生成メカニズムとしてMCAR, MAR, NMARなどの種類が存在する。ある調査では経験的に完全にランダムに欠損が生じているデータ(MCAR)は公的統計の調査においては約10~20%程度という結果もある。
MARによる欠損は単一代入法ではバイアスが生じるため、多重代入法を利用するべきである。多重代入法とは欠測データの分布から独立かつ無作為に抽出されたM個のシミュレーション値によって欠測値を置き換えるものである。

最後の「おわりに」の章にある3つの疑問に対する回答が、なぜ多重代入法を使うのかという説明として非常にわかりやすかった。「なぜ複数回の代入が必要なのか」という疑問に対して、複数回の代入を行うことで推定に関する不確実性を代入されたデータに取り入れることで、標準誤差を適切にすることができると書かれている。これによって母集団パラメータの推定を妥当なものとすることができる。

特徴量エンジニアリングに焦点を当てた簡潔な本:「Feature Engineering for Machine Learning」

機械学習の特徴量エンジニアリングに焦点を当てた本、「Feature Engineering for Machine Learning」を読んだ。

テーブルデータ、画像データ、文章データなどの各種データに対しての基本的な特徴量エンジニアリング手法が網羅されている本でした。例えばone-hotエンコーディングやn-gram、SIFTなどなど基本的な手法から、Box-Cox変換、Dummy Coding、データリークの問題など、一般的な機械学習の入門書ではカバーされないような内容もところどころ書かれていた。

後半ではCNNの仕組みや、論文推薦システムの構築などの、特徴量エンジニアリングを利用した実アプリケーションの作成もチュートリアル的に示されており、特徴量を加えることで精度が大きく変わるところなども分かり、特徴量エンジニアリングの重要性が学べる本となっていた。

全部で200ページほどの結構薄い本なので、英語の技術書に挑戦してみようかな、という人には機械学習の基礎が出来ているのであれば分かりやすいかと思うのでオススメしたい。

Kaggleで人気 XGBoostの論文 「XGBoost: A Scalable Tree Boosting System」を読んだ

タイトルの通りなんですが、Kaggleでとても人気のある手法のXGBoostがどういった仕組みで動いているのかを知るために次の論文を読みました。

XGBoost: A Scalable Tree Boosting System

詳しいことは、日本語で読める分かりやすい解説記事(こことか)があるのでそちらを参照していただきたいです。この記事は個人的な備忘録です。

要するにXGBoostとは決定木をすでに作った木の情報をもとにしながら何個も作ってそれらの結果を足し合わせることで、性能を向上させるBoostingの手法を効率的に実装したものと言えます。

基本的なポイントは単純ですが、決定木を作っていくうえですべての木の中から最も良いものを調べて選択するのは計算量的に難しいため、ある種の近似を用いて精度的に問題の少ない気を作っていき高速に実行可能なアルゴリズムとなっています。また、オーバーフィッティングを防ぐために、サブサンプリングや縮退化などの仕組みも導入されており、汎化性能が良くなるようになっていることもKaggleのコンテストで人気の理由の一つだと思います。

また、論文では並列化や分散処理をした場合の速度性能の評価が行われており、高い並列性能が出ています。提供されているライブラリではキャッシュが当たりやすくなるようになどの最適化が施されているので、自分で実装せずにライブラリを使いましょう。pipで簡単に入れられるようです。