Upgrade to Pro — share decks privately, control downloads, hide ads and more …

雰囲気な機械学習

 雰囲気な機械学習

FANCOMI

May 22, 2020
Tweet

More Decks by FANCOMI

Other Decks in Technology

Transcript

  1. 雰囲気な機械学習
    初心者が知っておくとうれしいこと
    Service Dev. dept. / Shinichi Takenaka
    2020-05-22 FANCOMI エンジニア勉強会
    1

    View full-size slide

  2. 初心者の、初心者による、機械学習
    つまり、なんとなく分かった気になるためのあれ
    初心者の私曰く。
    機会学習や分析方面は難しい話が多いように思いますが、なんとなくわかるところまでなら、
    あんまり難しくない(ほんとかよ
    本日の目標
    あんまり難しくなさそう、やってみようかな
    ※ 今日の範囲は「教師あり機械学習」のみです。
    ※ 書籍「オライリー Pythonではじめる機械学習」の前半にだいたい出てます。
    2020-05-22 FANCOMI エンジニア勉強会
    2

    View full-size slide

  3. 誰?
    サービス開発部 戦略企画チーム 竹中真一
    採用、組織面の課題解決
    2018年12月までは、開発やマネジメント
    学生時代に多少この方面をかじったが、残念ながらほぼ忘れている
    2020-05-22 FANCOMI エンジニア勉強会
    3

    View full-size slide

  4. 機械学習って何をやっているの?
    雰囲気を知ろう
    1. それが何であるか分かっているデータ
    2. データが与えられた場合に、それが何であるか・どのくらいの量であるか、ある程度判断できるプログラム
    より高精度に データを判別できる プログラムとチューニングされたパラメタのセット
    を準備する
    2020-05-22 FANCOMI エンジニア勉強会
    4

    View full-size slide

  5. だいたいこんな感じ
    1. 分析対象のデータを用意する
    勉強中の身なので、既にいい感じに用意されているテスト用のデータを使います。
    from sklearn.datasets import load_iris
    2. データを、訓練セット・テストセットの二つに分ける
    train, test 分けてます。train_test_split とかそのままですね。
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(
    iris_dataset['data'], iris_dataset['target'], random_state=0 )
    2020-05-22 FANCOMI エンジニア勉強会
    5

    View full-size slide

  6. だいたいこんな感じ
    3. データを分類、判別するアルゴリズムを用意
    通常は過去の偉い人が作ってくれているアルゴリズムを使うことになります。
    # 例えば、クラス分類のアルゴリズム k-最近傍法のアルゴリズムを使った分類器をロード
    from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors=1)
    4. 訓練セットを使って、モデルの訓練
    Classifierのfitを呼び出す。
    knn.fit(X_train, y_train)
    2020-05-22 FANCOMI エンジニア勉強会
    6

    View full-size slide

  7. だいたいこんな感じ
    5. 訓練したモデルをつかってみる
    訓練したデータ使ったら意味はないので、まだ使っていないテストセットで試す。
    # そのデータが何を示しているかというラベル、y_predictを予測。
    y_predict = knn.predict(X_test)
    # 予測してみたんだから、どのくらいの精度で予測できているのかは知りたい
    print("Test set score(Accuracy) : {:.2f}".format(knn.score(X_test, y_test)))
    >> Test set score(Accuracy) : 0.97
    97%のテストセットは正確に予測できているということ。なるほど。
    2020-05-22 FANCOMI エンジニア勉強会
    7

    View full-size slide

  8. ここまでのまとめ
    だいたいの場合こんな感じ。
    今のところ、難しいことは一つもない。
    scikit-learnをベースで話を進めていますが、
    他のものだったとしてもそんなに大きく変わりませんので、もうプログラムは読めます。
    (多分ね。Pythonならね。)
    2020-05-22 FANCOMI エンジニア勉強会
    8

    View full-size slide

  9. いろんなアルゴリズム
    1. それが何であるか分かっているデータ
    2. データが与えられた場合に、それが何であるか・どのくらいの量であるか、ある程度判断できるプログラム
    先程、機械学習でやってることについて上のように伝えていますが、大きく二つの種類があります。
    1. クラス分類: いくつかある選択肢の中からそれが何であるかを判別する
    2. 回帰: それがどのくらいの量になるかを予測する
    ここからは、こういった問題に対応できるアルゴリズムをゆるく紹介します。
    2020-05-22 FANCOMI エンジニア勉強会
    9

    View full-size slide

  10. k-最近傍法(k-NN) / クラス分類
    # 特徴量を二つ持つデータポイント
    X: array([[ 9.96346605, 4.59676542],
    [11.0329545 , -0.16816717], ...)]
    # 各々のデータポイントは、0,1でラベリングされ、2クラスに分かれている。
    y: array([1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0,
    0, 0, 1, 0])
    一番近い点と同じクラスに分類してるだけ
    2020-05-22 FANCOMI エンジニア勉強会
    10

    View full-size slide

  11. 線形回帰(通常最小二乗法)
    特徴量が一つの場合を例にすると、このモデルは簡単な数式で表せる。
    x: データポイントの特徴量
    w, b: 学習されたモデルのパラメタ w(eight), b(ias)
    このように、単一の特徴量ならば予測は一次元の直線になる。特徴量が二つなら平面となる。
    赤線の長さの平均、 が最小になるように、w, b を求めているだけ
    2020-05-22 FANCOMI エンジニア勉強会
    =
    y
    ^ w[0] × x[0] + b
    (y −
    n
    1 ∑i=1
    n
    i
    )
    yi
    ^ 2
    11

    View full-size slide

  12. 線形回帰、その他
    線形回帰には、さきほどの通常最小二乗法の拡張版といったモデルがあります。
    本日は初心者たるために、全力で詳細は避けますが、超ざっくり言うと、
    いかにしてもっといいかんじにするか をがんばった手法と言えそうです。
    ここから文字ばかりになっちゃいます。この辺からはざっくり雰囲気で伝えるのは難しそうな。。。
    リッジ回帰
    ラッソ回帰
    名前が出てきても、線形回帰の強いやつらだなと思っておけばとりあえずは話はわかります。
    いろんなところに説明は出ていますので参照してみてください。
    機械学習では常に意識しなければならない、過剰適合を防ぐための手法、正則化を実装しているのが
    リッジ回帰やラッソ回帰です。
    2020-05-22 FANCOMI エンジニア勉強会
    12

    View full-size slide

  13. 線形モデルはクラス分類にも使える
    この前のページ数枚で紹介しているのは線形回帰で、ある連続値の予測を行っている。
    ですが、そこで使用しているモデル自体は回帰だけではなくクラス分類にも使えます。
    これまた超ざっくり言うと、 直線の上と下、右と左でもいいんですが、分けられるよね という話です。
    ここでも、名前だけ紹介しておきます。
    ロジスティック回帰 (回帰アルゴリズムじゃない、クラス分類アルゴリズム)
    線形サポートベクタマシン (SVM)
    よく聞かれるアルゴリズム名ですが、これらが出てきたら、データポイントを線形に分けて分類してるんだなと
    いうことはわかりますね。
    2020-05-22 FANCOMI エンジニア勉強会
    13

    View full-size slide

  14. あとは、、
    決定木とアンサンブル法
    カーネル法とSVM
    ニューラルネットワークとディープラーニング
    この辺をふんわり説明できたら、とりあえずなんとなく雰囲気をお伝えした感じになりそうですが、そろそろ
    軽く説明しづらくなってきてしまったので終わりにします。
    次また発表するようなら、続きをやってみようかとは思いますが、軽い雰囲気をどれだけ保てるかは不安です(汗
    2020-05-22 FANCOMI エンジニア勉強会
    14

    View full-size slide

  15. 最後に
    雰囲気つたわりましたでしょうか。
    ざっくりと理解して誰かの話を聞いたりする分には、 実はそんなに難しくなさそう!
    と感じてもらえれば、うれしいです。
    数式や概念部分で難しい所は多々ありますが、本筋は直感的でわかりやすい所が多いのではないかと。
    初心者の私は思っておりました。
    この方面あまり知らない方も、趣味として機械学習をはじめてみると、面白いかもしれませんよ。
    2020-05-22 FANCOMI エンジニア勉強会
    15

    View full-size slide