Aidemy 2020/9/30
#はじめに
こんにちは、んがょぺです!文系大学生ですが、AI分野に興味が湧いたのでAI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます!
今回は機械学習概論について、重要なところのメモ書きを行なって行こうと思います。
#機械学習概論1 要点
・機械学習には__「教師あり学習」「教師なし学習」「強化学習」__がある。
・教師あり学習は学習データと正解(教師)データを与えて正解するまで思考する方法。最頻。
・教師なし学習は学習データのみを与え、コンピュータ自身が規則性を見つける方法。
・強化学習は、行動主体が得られる利益(報酬)を最大化するよう思考し続ける方法。
#機械学習概論2 要点
・教師あり学習の手順:データ収集→データクレンジング→学習→テストデータでチェック→実装
・教師あり学習の実践1:ホールドアウト法:データを学習データとテストデータに分けて使用。train_test_split()関数を使う。
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=テストデータの割合,random_state=0)
*Xは正解ラベル以外、yは正解ラベル。trainが学習データ、testがテストデータ。random_stateはテストデータを選ぶseed。
・教師あり学習の実践2:k-分割交差検証:データをk分割しそのうち1つをテストデータとして使用。テストデータを毎回変えて計k回検証してその平均性能を算出する。(ex 20個のデータなら、19個を学習データ、1個をテストデータとし、計20回検証する)
・過学習:学習の精度が高すぎて適切に抽象化できず、未知のデータに対応できない状態。
・ドロップアウト:過学習回避の手段。明らかな例外を無視する。
・アンサンブル学習:複数のモデルに学習させ、結果の平均を取ることで精度を高める。
#機械学習概論3 要点
・混同行列:モデルの精度を評価する際に使われる表。結果を__「真陽性」「偽陽性」「真陰性」「偽陰性」__に分類する。「真偽」は正解したかどうか、「陽陰」はモデルの解答を示す。(つまり「偽陽性」なら、モデルはTrueと解答したが、答えはFalseだったということ)
・混同行列の実装:以下のように記述(「y_true」には[正解のリスト]を、「y_pred」には[モデルの解答のリスト]を与える。)
from sklearn.metrics import confusion_matrix
#「正解」と「解答」をリストで定義(0が陽性、1が陰性)
y_true=[1,1,1,1,1,1]
y_pred=[1,1,1,0,0,0]
confmat = confusion_matrix(y_true, y_pred)
#[[0 0] #[[真陽性 偽陰性]
# [3 3]] # [偽陽性 真陰性]]
・正解率:全解答のなかで、「真」だった割合。(真陽性+真陰性/全体)
・適合率/精度:「陽」と解答したもののうち、「真」だった割合。(真陽性/真陽性+偽陽性)
・再現率:「実際の陽」のうち、「真」だった割合。(真陽性/真陽性+偽陰性)
・F値:適合率と再現率の調和平均(2*適合率*再現率/適合率+再現率)
*これらは全て0〜1で表され、1に近い方が性能が良いと言える。
・上記評価指標を実装:関数をインポートして、それぞれ「y_true」と「y_pred」を引数として与えることで計算してくれる。
#precision_score:適合率, recall_score:再現率, f1_score:F値 のインポート
from sklearn.metrics import precision_score,recall_score,f1_score
y_true=[0,0,1,1]
y_pred=[0,1,1,1]
#F値の出力
print("F1".format(f1_score(y_true,y_pred)))
# 0.666666
・PR曲線:縦軸に適合率(Precision)、横軸に再現率(Recall)をとったグラフ。
・__適合率と再現率はトレードオフの関係__であり、場合によってどちらに重きを置くかを考える必要がある。特にこだわりがない時は、F値や、PR曲線においてPとRが一致する点(ブレークイーブンポイント(BEP))を用いると良い。