元理系院生の新入社員がPythonとJavaで色々頑張るブログ

プログラミングや機械学習について調べた事を書いていきます

【Java】手書き文字を収集するアプリケーションの作成

隠れマルコフモデルによる手書き数字認識を実装する前に、手書き数字データを収集するアプリケーションを作成します。
いきなり余談ですが、手書き文字は採取時のデータの性質によってオンライン手書き文字とオフライン手書き文字に分けることが出来ます。
オフライン手書き文字は文字を見たままの画像として扱い、オンライン手書き文字は筆記時間毎のペンのX,Y座標や筆圧、移動速度や仰角等の時系列として扱います。
今回はHMMによる手書き数寺院式に適用する為、時系列データとして扱えるオンライン特徴量を採取します。

続きを読む

【Java】複数の信号を学習する離散隠れマルコフモデル

前回実装したスケーリング処理を用いた離散隠れマルコフモデルは、EMアルゴリズムによって最適化パラメータを算出した際に、即時にHMMのパラメータを更新する為、複数の学習データを用いて学習することが出来ませんでした。emoson.hateblo.jp

そこで今回は、最初に全ての学習データに対して最適化パラメータを算出し、その後、更新パラメータの平均をHMMに適用する様にします。

続きを読む

【Java】スケーリング処理を用いた離散隠れマルコフモデルの実装

前回実装した離散隠れマルコフモデルは、フォワード、バックワードアルゴリズムの確率計算を行う際に、長い時系列を適用するとアンダーフローが発生する問題がありました。emoson.hateblo.jp

スケーリング処理はトレリス計算中に逐次スケーリング処理を施し、アンダーフローの発生を抑制します。

続きを読む

【Java】javaで多次元正規分布

旋回作成した行列計算用のクラスを用いて多次元正規分布を求めるクラスを作成します。emoson.hateblo.jp

多次元正規分布については以下の記事で触れました。emoson.hateblo.jp

続きを読む

【Java】行列計算用のクラス

行列計算

信号処理や機械学習アルゴリズムには行列計算が多く使われています。
例えば多次元正規分布では分散共分散行列の逆行列計算を行ったり、ニューラルネットワークでは順伝搬計算を行う際にユニットの出力とユニット結線荷重の内積計算を行ったりします。
機械学習アルゴリズムを実装する際には、毎回1から行列計算処理を実装していたのですが、そろそろ専用のクラスを作ろうと思いました。

続きを読む

【雑記】内定式行ってきました

10月1日に内定式に行ってきました。
頑張って研究してきた甲斐もあって、大手メーカーの研究職につくことになりました。

6月頃から学会と就活と研究(と言っても推薦を無事頂けたので就活らしい就活はしていません)が重なり、体力的にかなりハードな日程でした;;
内定式で訪れた本社の大きさ驚いたり、懇親会で同期(?)や人事の方々と様々な話をして、ようやく長い学生生活の一つの区切りを実感することが出来ました。

卒業後の行き先が決まって一安心ですが、足元を軽んじないように日々研究を頑張りたいですね~