EurekaMoments

新米エンジニアが一人前を目指す修行の日々を記していくブログです。

Glossary of Machine Learning

  • Introduction
  • 特徴量とは(Feature Value)
  • 学習とは(Learning)
  • 教師あり / なし学習(Supervised / Unsupervised Learning)
  • 最適化問題(Optimization Problem)
  • 座標降下法(Coordinate Descent)
  • 最急降下法(Gradient Descent)
  • 確率勾配法(Stochastic Gradient Descent)
  • 汎化性能(Generalization Ability)
  • 新しい特徴量を作る(Creating New Feature Value)
  • 多層ニューラルネットワーク(Maltilayer Neural Network)
  • ランプ関数(Ramp Function)
  • 鞍点(Saddle Point)
  • ヘヴィサイド関数(Heaviside Function)
  • 分離超平面(Separating Hyperplane)
  • カーネル法(Kernel Method)
  • 入力データを行列で表現する(Representation of Input data as Matrix)
  • 原因を突き止める(Nailing down the Cause)
  • スパースモデリング(Sparse Modeling)
  • 非負値制約行列分解(Non-negative Matrix. Factorization)
  • ボルツマン機械学習(Boltzmann Machine Learning)
  • ボルツマン機械学習で利用される手法(Method of Boltzmann Machine Learning)
  • 制限付きボルツマン機械(Restricted Boltzmann Machines)
  • ディープボルツマン機械学習(Deep Boltzmann Machine Learning)
  • 事前学習(Pre-Training)

Introduction

機械学習を学ぶにあたり、そもそも「機械学習?何それ?美味しいの?」みたいなレベルからのスタートだったので、まずは機械学習についてざっくり基礎的な事が学べる本を読んでみようと思い、下記の書籍を読んでみました。

機械学習入門 ボルツマン機械学習から深層学習まで

機械学習入門 ボルツマン機械学習から深層学習まで

これを読んだことで、まずは機械学習に関連する用語にいろいろ触れる事ができたので、今回はそれらを用語集として残しておこうと思います。また、各用語についての関連記事のリンクも付けてみました。

続きを読む

Recommendation of Hand Calculation for Simple Software Programming

  • Introduction
  • Hand Calculation
  • About Kalman Filter
  • Prediction
  • Observation
  • Update
  • Conclusion

Introduction

あるロジックをプログラムに実装するとして、自分の場合だったらまずはMATLABPythonでプロトタイプを作って有効性をシミュレーションします。そして最終的にはC言語C++に移植をする訳ですが、ここで悩ましいのがMATLABPythonで書いたコードと同じような書き方をC言語C++では出来ない事です。そして、その違いを特に感じるのが行列演算になります。3次元だろうが4次元だろうが、MATLABPythonでは簡単に実装できてしまうのに対して、C言語C++で実装しようとするのはかなり面倒だし、デバッグも大変です。正直言ってプロトタイピングした甲斐がありません。そこで、面倒な行列演算を何とかシンプルに実装できないかを考える事にしました。

Hand Calculation

コードをシンプルにしたかったり、プログラムの計算負荷を軽くしたい時に良く取られる手段の一つとして、事前に計算出来る部分は予めやっておくというのがあります。少々面倒ではありますが、上記で書いたような行列演算も2次元、3次元くらいなら手計算出来ますし、その結果得られた形というのはかなりシンプルになり、それくらいであればC言語C++で書くのもあまり苦ではならなくなります。また、事前に計算してみる事によって理論の理解がより深まるし、リファレンスとしていた理論式なんかに万が一誤植があったとしても気付く事ができるので、まずは頑張って手計算してみるという事には多くのメリットがあります。そこで今回の記事では、自動運転技術としては一般的なカルマンフィルタの理論を例として、事前に手計算する事の大切さを紹介してみようと思います。

続きを読む

Animation Playback GUI Tool with matplotlib of Python

  • Introduction
  • Sample
  • Required modules
  • Read sample data
  • Animation playback figure window
  • Radio button GUI
  • Slider GUI
  • Update animation
  • Source code

Introduction

実験で取った時系列データを見返したり、プロトタイピングしたロジックをシミュレーションでデバッグしたい時は、それをアニメーション表示させるということをよくやります。しかしながら、普通にアニメーション表示させるだけだとただデータの頭からお尻までを再生するだけで終わってしまうので、一時停止や巻き戻し、時には早送りなどしながらじっくりデータを見たい時は少々不便です。
そこで今回は、Pythonの描画ライブラリmatplotlibのGUI作成機能を利用して、アニメーション再生や一時停止、巻き戻しなどができるGUIツールのサンプルを作成したので紹介したいと思います。

Sample

今回作成したツールは以下のようになりました。
f:id:sy4310:20180909074138p:plain ソースコードGIFアニメーション、お試し用のサンプルデータはGitHubで公開しています。
github.com

続きを読む

GPS NMEA Analysis with Python package pyproj

  • Introduction
  • Reference
  • Sample Data
  • About $GPGGA format
  • Extraction $GPGGA data from NMEA text log
  • Transformation Longitude and Latitude to X and Y position
  • Visualize X-Y Position and Analysis

Introduction

障害物検知用センサの計測精度を評価したりする場合、その基準とする位置座標を得るためにGPS測量を行うことがあります。RTK-GPSであれば数センチ程度の精度でその位置座標が取得できるので、ミリ波レーダやスキャンレーザの計測テストを行う際は、まず先に基準とするポイントを決めて、その位置座標をGPSで測るという作業を全ポイントでやっておきます。(これが中々大変な作業。。)
この時に問題になるのが、取得された緯度、経度情報をX-Yの平面直交座標に座標変換する処理です。通常なら、その座標変換を行うための原点やスケールなどのパラメータを自分で設定しなければならないのですが、Pythonで使えるパッケージの一つであるpyprojを使えば、この座標変換処理を数行のコードを書くだけで簡単に実行してくれて非常に便利です。
今回の記事では、pyprojの使い方と、それによるGPSのNMEAフォーマットの一つである$GPGGAデータの解析を行ってみた際の結果を紹介します。

Reference

pyprojの使い方については以下の記事を参考にしました。

pyproj [いかたこのたこつぼ]

また、解析対象であるGPSのNMEAデータのフォーマットについては以下の記事に細かくまとめられていました。

GPSのNMEAフォーマット

こんな書籍もあるようで、面白そうですね。

Raspberry Pi Gps Using Python 2.7 or 3.4: For Raspbian Jessie Linux Using Gpsd Gps3

Raspberry Pi Gps Using Python 2.7 or 3.4: For Raspbian Jessie Linux Using Gpsd Gps3

続きを読む

Self-Learning Notebook about GPS

  • Introduction
  • Reference
  • Difference between GNSS and GPS
  • Geodetic system
  • Coordinate system
  • Geoid
  • NMEA
  • $GPGGA Data Format
  • $GPGSA Data Format
  • $GPRMC Data Format
  • Coordinate Transformation

Introduction

ロボットや車が自律移動をする際に自分の位置を計測する手段としてGPSがあります。カーナビやスマートフォンの地図アプリなどでも自分の居場所を知るために利用されるGPSですが、障害物検知用のミリ波レーダやスキャンレーザの計測精度を評価するためのリファレンスとして使われることもあります。
GPSで取得した位置情報は緯度、経度の形で表されますが、それを解釈したり座標変換したりするやり方を間違えると本来とは全然違うを自分の位置を認識してしまうので注意が必要です。今回の記事では、GPSを正しく扱うために必要な基礎知識をメモとして残しておきます。

Reference

今回は以下の書籍を見て勉強させていただきました。

https://www.enri.go.jp/~fks442/K_MUSEN/1st/1st060428rev2.pdf

続きを読む

Data Analysis for Predicting Class of Wine Part1

  • Introduction
  • Reference
  • Sample Data Contents
  • Correlation check
  • The Top 5 Attributions which have high correlation with Class
  • Integration Class 1 and Class 3
  • Correlation between Color intensity and top 5 attributions has high correlation with Class
  • Next Step

Introduction

最近勉強しているPythonの扱いに少しずつですが慣れてきたので、世の中で公開されている機械学習サンプルデータを用いてデータ分析 + 予測モデル構築 + 精度評価の練習をしてみました。今回の記事では、その内のデータ分析作業にフォーカスしてみようと思います。

Reference

今回利用したのは、カリフォルニア大学アーバイン校(UCI)が公開しているものの一つである、「ワインの等級を予測するための学習データサンプル」です。

UCI Machine Learning Repository: Wine Data Set

公開されている学習データの中でもこれはかなり人気の高いものであり、下記の書籍のようなPythonの入門本などでは、「Pythonなら機械学習が手軽に試せる」ということを示すための例題として取り上げられることが多いです。
ちなみにこの書籍では、以下のデータによる例題が掲載されています。

UCI Machine Learning Repository: Wine Quality Data Set

自分もこの書籍を読みながらPythonを勉強し、確かにScikit learnで機械学習が試せるというところまでは理解したのですが、肝心なデータの中身についてはあまり触れないままSVMやランダムフォレストによる予測モデル構築と予測という流れで進むので、そもそもどういう傾向を持つデータなのか、そして最終的に構築モデルによる予測精度がどれだけリーズナブルなものなのかが気になっていました。
そこで今回は、世の中のデータサイエンティスト達のプロセスを真似しながら、自力で予測モデルを構築するためのデータ分析に取り組んでみました。分析プロセスについては以下の記事を参照ください。

eurekamoments.hatenablog.com

www.mirandora.com

続きを読む

読書メモ_統計学が最強の学問である

  • 背景・目的
  • 今回読んだ書籍
  • 他の関連書籍
  • 学んだ事メモ
  • 読んだ感想

背景・目的

車やロボットの自律移動技術や、今流行りの機械学習Deep Learningの技術を身に着けるには、統計学の知識が必要となります。しかしながら、自分は今まで統計学という学問をちゃんと勉強したことがなかったので、今回は下記の有名な書籍を読んで、統計学において大事なことをメモしてみました。

今回読んだ書籍

統計学が最強の学問である

統計学が最強の学問である

続きを読む