EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

機械学習の基本用語集

目次

  • 目次
  • はじめに
  • 特徴量(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)

はじめに

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

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

続きを読む

数式のプログラム実装をシンプルにするための事前手計算のススメ

目次

  • 目次
  • はじめに
  • 手計算
  • カルマンフィルタについて
  • 予測
  • 観測
  • 更新
  • まとめ

はじめに

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

手計算

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

続きを読む

matplotlibを使ったPython製のデータ再生GUIツールを作った

目次

  • 目次
  • はじめに
  • サンプルコード
  • 必要なモジュール
  • サンプルデータの読み込み
  • GUI全体のウィンドウと各種グラフスペースの配置
  • アニメーション操作用ラジオボタン
  • アニメーション操作用スライダー
  • アニメーションの更新処理
  • 全体ソースコード

はじめに

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

サンプルコード

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

続きを読む

Pythonパッケージのpyprojを使ったGPSのNMEAデータ分析

目次

  • 目次
  • はじめに
  • 参考資料
  • サンプルデータ
  • $GPGGAフォーマット
  • NMEAテキストログからの$GPGGAデータ抽出
  • 緯度経度からX-Y平面への座標変換
  • X-Y平面座標の可視化

はじめに

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

参考資料

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

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

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

GPSのNMEAフォーマット

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

続きを読む

GPSについての勉強メモ

  • はじめに
  • 参考書籍
  • GNSSとGPSの違い
  • 測地系
  • 座標系
  • ジオイド
  • NMEA
  • $GPGGAフォーマット
  • $GPGSAフォーマット
  • $GPRMCフォーマット
  • 座標変換

はじめに

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

参考書籍

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

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

続きを読む

ワインの等級を予測するためのデータ分析

入門 Python 3

入門 Python 3

Amazon

目次

  • 目次
  • はじめに
  • 参考
  • データの内容の確認
  • データ同士の相関
  • 等級と相関の高い上位5つの属性
  • 等級1と3の統合
  • 上位5つの属性と色彩強度の相関
  • 次のステップ

はじめに

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

参考

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

UCI Machine Learning Repository: Wine Data Set
UCI Machine Learning Repository: Wine Quality Data Set

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

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

www.eureka-moments-blog.com

www.mirandora.com

続きを読む

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

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

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

  • 作者:西内 啓
  • 発売日: 2013/01/24
  • メディア: 単行本(ソフトカバー)

目次

  • 目次
  • 目的
  • 読んだ感想
  • 学んだ事メモ
  • 他の関連書籍

目的

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

続きを読む