概要
会社の取り組みにより、機械学習のセミナーを受講することになりました。せっかくなので学びの記録を残し、これから研修を受けようと思っている人たちにもどのような内容だったかを共有する。
今回受けるセミナーは、キカガクさんの「機械学習実践コース」。
料金は¥200,000。(会社経費もち。こういうときは助かる)
(参考)
https://www.kikagaku.co.jp/seminars/machinelearning/
事前学習を行いそこから3日間の本セミナーを受ける流れだ。
この記事では、事前学習の内容について記載する。
事前学習で学べること
事前学習はすべて動画を見る形式で、ものによっては自分の手元の環境で実際にpythonのコードを書いて見るようなものになっている。
- 機械学習ってそもそも何?(イントロ)
- 微分の基本
- 単回帰分析(数学的な理論の説明)
- Pythonの基本
- 単回帰分析(実装)
- 線形代数
- 重回帰分析(数学的な理論の説明)
- 重回帰分析(実装)
- 統計(統計学的な理論の説明)
- 外れ値を考慮した実装(統計を活用した実装)
動画はどれも5分から15分程度で細かく区切られている。
また特徴的なのはPPT等のスライドでの説明は行わず、紙に手書きで数式や図を書いて説明するということ。(ホワイトボードに記載しているようものなので、わかりにくいというようなことはありませんでした)
個人的に重要だなと思ったこと
私の場合は、別のセミナーで機械学習の基本をすでに学んでいたので部分的に思い出したり、「あー、これ知らないなー」とか思いながら見ていた。
中でも重要だなと思ったことを記載する。
なぜ微分を求めることが必要なのか
Q.微分することで何が求まるのか
A.接線の傾き
Q.接線の傾きを何に使うのか
A.傾きが0となる点を求めることで「最小」のYとなるXを求めることができる
これは機械学習においては以下のようなことになる。
機械学習の例として不動産の家賃を予測するというモデルを考える。
このとき最終的には、実際の家賃と予測値との差を限りなく0に近づけたいはず。(つまり誤差を小さくしたい)
このとき、『「実際の値」-「予測値」』という関係を数式に落とし込み、この差を0に近づけるために微分を使う。
単回帰分析と重回帰分析の違いについて
◆単回帰分析
例:「部屋の広さ」というインプットから「家賃」というアウトプットを予測する。
このように1つの変数からアウトプットを予測する分析手法。
◆重回帰分析
例:「部屋の広さ」「犯罪発生率」「駅からの距離」というインプットから「家賃」というアウトプットを予測する。
このように複数の変数からアウトプットを予測する分析手法。
単回帰分析は変数が1つなので数学的にはあまり難しくないが、重回帰分析となると変数の数が一気に多くなる。その計算に耐えるために、ベクトルや行列といった線形台数の基本知識が必要となる。
機械学習のSTEP
以下の3STEPに分けて考えることができる。
-
モデルを決める。
どのような数式で表すことができるかを考える。一次関数なのか二次関数なのか指数関数なのか。
これは「人間がこのモデルで行けるんじゃね?」という感じで決める。(厳密にはいろんな調査・分析があるはずだが、要は自然に決まるものではないという理解) -
評価関数を決める
1で決めたモデルが適切なのかを決める。この適切というのをどう測るかというと、『「実際の値」-「予測値」』を0に近づけるという話に繋がる。実際にはサンプルの数だけ、二乗誤差を足し合わせて関数の形にする(この辺は数学的なテクニック) -
評価関数を最小化する
評価関数を微分した結果0に最も近いパラメータ(インプット)は何かを求める。
数学的には式変形したりいろいろあるが、実際はプログラムに任せる。
この3STEPは単回帰分析だろうと重回帰分析だろうと変わらない。
統計学はどこでどう使うのか
機械学習のSTEPとしては上記の通りだが、実際の予測精度を上げたり、各変数の重要性(重み)を把握するために統計のスキルが必要となる。
特に必要なのは平均、分散、標準偏差の3つ。聞きなれない分散と標準偏差はなんやねんというと、データのばらつきを表すものである。
これらを用いると、例えば3σ法と呼ばれる外れ値を除去の方法を使ったり、スタンダードスケーリングといってデータを標準化することで、各パラメータの重みを同じメジャーで測り、どのパラメータが機械学習において重要かを確認できたりする。
実装上でのTips
numpy、sklearn、pandas、matplotlib、seabornなどの有名ライブラリの基的な使い方も動画の中で教えてくれる。
ググればいくらでも出てくると思うのでTips的なものを備忘として残す。
■相関関係の確認
df = pd.read_csv('housing.csv')
df.corr()
これで相関係数をみることができる。
■相関関係の確認
相関係数を視覚的にわかりやすく見たい場合は、以下のようにすることも可能。
import seaborn as sns
sns.distplot(df['x6'], bins = 30)
sns.pairplot(df)
■指数表現とか小数桁が煩わしいとき
こういうは直感的に分かりづらい。。。
そこで以下のように工夫する。
np.set_printoptions(precision=3,suppress=True)
結果、以下のようなスッキリした表現に¥1
まとめ
事前学習だけでも結構盛りだくさんの内容だと個人的には感じた。
3日間の本講座を受けた後には自分がどうなっているのかが楽しみ。ということで次回をお楽しみに。