とらりもんHOME  Index  Search  Changes  Login

とらりもん - 2018_jitsuyo Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}
2018年の実用解析I用のページです。

!授業目標
計算機を使う数理解析の基礎を学ぶ。計算機言語Pythonを学び, それを用いて, 機械学習, 特に人工知能(ディープラーニング)の仕組みを理解し, 実際にコンピューターで実装してみる。

!教科書
* 「ゼロから作るDeep Learning」 ← 買うこと!!
* 「入門者のLinux」

!Linuxの最小限の機能をマスターしよう

機械学習・人工知能では, Linuxという基本ソフトがよく使われます。WindowsやMac以上によく使われます。そこで, この授業も, Linuxを使って進めます。

まず, Linuxを多少は使えるようになりましょう。Linuxは機械学習や人工知能そのものではありませんが, 機械学習や人工知能のソフトを動かしたり実装したりするには, Linuxの知識やスキルがちょいちょい必要になります。以下のコンテンツを自習してください:

[[IT入門]]と[[Unix/Linux入門]]から抜粋:
#[[ソースコードとバイナリコード]]
#[[オープンソース]]
#[[情報のデジタル表現]]
#[[UNIXとは / CUIとGUI / なぜUNIXなのか?]]
#[[コンソール / プロンプト / コマンド]]
#[[打ち込みを助けてくれる便利な機能]]
#[[ディレクトリ / パス]]
#[[ファイル / ファイルの種類と拡張子 / 隠しファイル]]
#[[テキストエディター vi]]
#[[標準入出力・リダイレクト・パイプ]]
#[[シェル・ヒストリー・環境変数]]
#[[シェルスクリプト入門]]
#[[圧縮・解凍・アーカイブ]]
#[[テキスト処理]]
#[[バイナリーデータ処理]]

! 2018/04/16, 23
!! 最尤法

最尤法(さいゆうほう)は, 統計学的にものごとを推定する時によく使われる考え方の総称である。もともと確率論や統計学では, ある事象が起きる確率の大小を議論するのだが, 最尤法では, ある事象が実際に起きた後に, 「この事象が起きるってことは, この事象が起きやすい状況があったと考えるのがもっともらしいだろう」と考え, その最も典型的な「起きやすい状況」を採用するのだ。

問: 20歳の日本人の身長は,
女性 平均158.32 cm, 標準偏差 5.52 cm
男性 平均171.66 cm, 標準偏差 5.60 cm
である([[出典|http://d.hatena.ne.jp/konisimple/20110307/1299504113]])。

ある日本人(20歳)について, その身長だけで女性か男性かを推定する方法を述べよ。その方法を, pythonで実装せよ。

この問では, 男女のそれぞれの身長を確率変数と考え, それぞれの確率分布を確率密度関数であらわす。その確率密度関数の値を男女で比べて, 大きい方の性別を採用する。平均と標準偏差だけでは確率分布はわからないが、ここでは正規分布を仮定しよう。

!! ニュートン法

代数方程式f(x)=0を数値的に解く方法に, ニュートン法がある。ニュートン法は, 関数y=f(x)の接線を求め, その直線とx軸の交点を求め, そのxでのy=f(x)の接線を求め, ...という手順で, f(x)=0となるxを推定していく方法である。詳しくはネット上にたくさん解説サイトがあるので調べてみよう。ニュートン法は, 「最適化問題」というものの考え方の基礎であり, 機械学習の理解に役立つ。

問: 正の実数aが与えられたとき, その正の平方根を計算する方法を述べよ。その方法を, pythonで実装せよ。


!! scikit-learnのインストール
$ pip3 install --user scipy sklearn # インストール
$ ipython3
[ipython3の中で] import sklearn # インスールできたか確認

!! notebookのインストール
notebookを使うと実行結果やコードをまとめて保存できるので便利!

詳しくはJupyter notebook(旧名:ipython notebook)でググってみよう。

$ pip3 install --user notebook # ノートブックのインストール
$ ipython3 notebook # ノートブックを立ち上げる

!! matplotlibのインストール
$ pip3 install --user matplotlib

! 2018/05/07
宿題:上記「Linuxの最小限の機能をマスターしよう」の4-15。次回テスト。

!2018/05/14
小テスト:
# 右記のファイルをホームディレクトリにダウンロードせよ: http://pen.agbi.tsukuba.ac.jp/~nishida/mon.tar.gzhttp://pen.envr.tsukuba.ac.jp/~nishida/mon.tar.gz
# mon.tar.gzを解凍せよ。その中のどこかに, aとbという2つのファイルがある。
# aとbのそれぞれに含まれる語数を数えよ(コマンドを使うこと)。
# aとbを連結して, cという名前のひとつのファイルにしてホームディレクトリに置け(コピペは使っては駄目)。

!2018/05/21
小テスト:
pythonを使って, 以下のような2x2行列のクラスを作れ:
* クラスの名前はmatrix22
* コンストラクタにはa11, a12, a21, a22という4つの成分を与える。
* 行列そのものをnp.ndarray形式で返すメソッドmatrix22.bodyを持つ。
* 行列式の値を返すメソッドmatrix22.detを持つ。

!2018/05/28
小テスト:
pytonを使って, 以下の関数を作れ:
* 関数名はpercep
* 引数はw, x, b
* wとxは同じ形(サイズ)の数ベクトルを表すリスト。bはスカラー。
* ベクトルwとベクトルxの各成分どうしの積を足し, それにスカラーbを足したものを返す。要するに, w・x + bを返す(w・xはwとxの内積)。
* 関数は2018_0528_test.pyというテキストファイルに実装する。
* それをipython3のコマンドラインから読み出す。

宿題
* 図3.6と図3.9を画面に描け。次回授業冒頭。

!2018/06/11
!!第3章の実行
$ mkdir ~/work_DL
$ cp deep-learning-from-scratch-master.zip ~/work_DL/
$ cd ~/work_DL
$ ls -l
(ここで, deep-learning-from-scratch-master.zipというファイルがあるか確認! 無かったらおかしい。人に聞いたり工夫したりしてなんとかしよう)
$ unzip deep-learning-from-scratch-master.zip
$ cd deep-learning-from-scratch-master/
$ cd ch03
$ ipython3
>> run neuralnet_mnist.py

!!自分たちの手書き文字を認識させてみよう!
まずmanabaの「奈佐原手書きの5の写真」をダウンロードしてカレントディレクトリ(ch03)に入れる。
from PIL import Image
import numpy as np
img = Image.open('CIMG6718.JPG')
img = np.array(img)
r=img[404:1300:32,604:1500:32,0]
rs=(np.max(r)-r)/np.max(r)
predict(network, rs.reshape(784))

!!宿題:
#
0から9までの各数字を紙に書いて画像データに加工し, 認識させてみよ
# 第4章のコードをすべて実行してみよ。
それぞれにおいて, 学んだことと, 困ったことを述べよ


! リンク
* [[scikit-learn Tutorials|http://scikit-learn.org/stable/tutorial/index.html]]
* [[Scipy Lecture Notes|https://www.scipy-lectures.org/]]
* [[AIZU ONLINE JUDGE|http://judge.u-aizu.ac.jp/onlinejudge/]]
* [[Kaggle|https://www.kaggle.com/]]
* [[言語処理100本ノック|http://www.cl.ecei.tohoku.ac.jp/nlp100/]]