Takunojiのプログラミング・プレイグラウンド(遊び場)

「プログラミングのススメ」と学習した結果身につくもの、アイディアを実現するために何をしたら良いか?の答えが出せるようになります。

プログラミング 数学 〜プログラミングと数学の接点〜

イントロダクション

ここ最近は、ブラウザアプリの作成について記載していたのですが、そろそろ実装レベルの内容しか記載する事がなくなってきたので、ここから先は下のブログ「PGボックスにて記載する方向にシフトします。

ぢゃ何を書くか?

実は、結構前から機械学習に躓いており…いろんなアプローチで理解に挑戦するもあえなく断念。TensorFlowの実装(チュートリアル)をやってみたがこれも、各学習モデルの作り方が分からず…

どーするか?

今迄の経験(機械学習の理解)では、共通して理解出来なかったのは「理論」です。ここでいう理論と言うのはどー考えたら、このような結果が得られるのか?を組み立てるための理論です。
キーワードになるのは以下のものです(自分の場合)
1. 統計学
2. パターン認識
3. 線形代数
4. ベクトル、数列などの計算方法

数学をJavaで切る!

以前この様に考えて次のようなリポジトリを作成とりあえず、2〜3次関数までのグラフを作成するプログラムを作りました。がこの次はどう進んで良いか分からず放置していましたが、キました(笑)

数学的アプローチ

丁度、機械学習に躓いていたので、数学の基礎からJavaで切り刻んでしまおうと思いました。そもそも行列とか、集合とか、言葉は聞いた事あるけど今迄の人生で学ぶ気にはならず…当選学生の時です。現在になり、やっとけばよかったと思う次第です。 しかし、目の前に立ちはだかる以上、倒さなければならないので少ない脳みそを捻り打開策を考えました。それの一つが数学的アプローチで理解すると言うものです。 よく「数学は積み重ねだからわからない時は前に戻ってみる」と言います。ぢゃ〜戻ろうか?と戻ってみると行列の基礎まで戻りました。

行列ならば

この言葉を聞いてピンときました。行列→PythonならばNumPy、JavaならばND4Jがある!世の中捨てたもんではないなとつくづく思いました。とりあえずは、行列の扱いに慣れるために、行列を使いグラフを描いてみました。これで基礎的な事は理解したと思っています。(自己満です) 行列は、座標計算→2次元描画(通常の絵)や3次元描画を行うのにも使用されているので、それぞれ着手する時に再度突き詰めて行こうと思っています。

画像処理

機械学習なのになんで?」と思っていました。しかしOpenCvチュートリアルなど読んでみると、機械学習の根本である、特徴量やアルゴリズムなどの使い方が書いてあるので、ここを理解すればイケる!と思った次第です。 実際、画像の分析や顔認証などの技術を説明していました。詳細を読んでいくとヒストグラムとか特徴抽出などの方法について言及していました。なので、とりあえずは勉強したものの、よくわからない状態ですが、当時は行列の理解がなかったので、わからなかった事にして再度OpenCvの理解に挑戦しようと思う次第です。

再学習

今にして思えば、OpenCvを使用して画像処理を行う事のみを実装したので、その目的や用途に関して理解していなかった。今回はもっと突っ込んで学習しようと思います。 でわでわ。。。