学習入門の監督


1>理解監督学習
監督学習の目標は、いくつかのデータのラベルまたは目標値を予測することであるため、監督学習は2つの形式に分けることができる.
  • 分類:データを用いてカテゴリを予測するこれらの監督学習を分類と呼ぶ.たとえば、1枚の画像に犬や猫が含まれているかどうかを予測します.ここで、データのラベルはカテゴリであり、そのうちの1つまたは別のクラスのみであり、2つのクラスの混合結果ではありません.2つの選択しかない場合を二分類または二値分類と呼ぶ.2種類以上の場合、例えば翌日の天気を予測することを多種類分類と呼ぶ.
  • 回帰:データを用いて真実値を予測するこれらの監督学習を回帰と呼ぶ.例えば、私たちが株価を予測するとき、株価を予測するカテゴリのように、回帰の目標はできるだけ正確に目標値を予測することではありません.

  • 2>OpenCVでの監督学習
    OpenCVでマシン学習モデルを構築するには、常に次の論理に従います.
  • 初期化:名前でモデルを呼び出してモデルの空のインスタンスを作成します.
  • パラメータの設定:モデルにいくつかのパラメータが必要な場合は、値関数を設定して設定できます.
  • トレーニングモデル:各モデルはtrainというクラス関数を提供し、モデルにいくつかのデータをフィットさせる必要があります.
  • は、新しいラベルを予測します.各モデルには、新しいデータを予測するためのpredictというクラス関数を提供する必要があります.
  • 評価モデル:各モデルは、モデルのパフォーマンスを評価するためにcalcErrorというクラス関数を提供する必要があります.

  • 3>評価関数を使用してモデルのパフォーマンスを評価
    二値分類のタスクでは、分類の効果を評価するいくつかの異なる方法があります.いくつかの一般的な指標は以下の通りです.
  • 精度(accuracy_score):正と負の例で予測される正確な数が総数に占める割合.例えば、画像を猫または犬のカテゴリに分ける場合、正確率は猫または犬を含む画像に正確に分けられる割合を表す.
  • 精確率(precision_score):正例として予測されるサンプルにおいて正しい割合を予測する.例えば、すべての予測が猫を含むピクチャにおいて、本当に猫を含むピクチャの割合.
  • リコール率(recall_score):実際に正例のサンプルで正しい割合を予測します.たとえば、実際に猫が含まれているすべての画像のうち、猫として正しく認識されている画像の割合.
  • 0または1のみを含むクラスラベルでシミュレーションします.まず、乱数ジェネレータのシードを固定値に設定します.
    import numpy as np
    np.random.seed(42)

    0~(2-1)の範囲で整数をランダムにとることにより、0ではなく1のランダムラベルを5つ生成する.
    y_truly=np.random.randint(0,2,size=5)
    y_truly
    #  :array([0, 1, 0, 0, 0])

    クラスラベルを予測しようとする分類器があると仮定し、説明を容易にするために、この分類器は正確ではなく、常にラベル1を予測していると仮定します.
    y_pred=np.ones(5,dtype=np.int32)
    y_pred
    #  :array([1, 1, 1, 1, 1])

    計算精度(2つの方法):
    np.sum(y_truly==y_pred)/len(y_truly)
    #  :0.2
    
    from sklearn import metrics
    metrics.accuracy_score(y_truly,y_pred)
    #  :0.2

    混同行列:
    予測結果(True/False)
    真実
    正例(Positive)
    負の例(Negative)
    正例
    TP(真例)
    FN(仮負例)
    負の例
    FP(仮正例)
    TN(真負例)
    TPを計算します(本当の例、つまり私たちは1を予測して、ラベルも1です):
    truly_a_positive=(y_truly==1)
    predicted_a_positive=(y_pred==1)
    true_positive=np.sum(predicted_a_positive*truly_a_positive)
    true_positive
    #  :1

    計算FP(仮正例、すなわち1と予測したが、ラベルは0):
    false_positive=np.sum((y_pred==1)*(y_truly==0))
    false_positive
    #  :4

    計算FN(疑似負の例、すなわち0と予測されるが、ラベルは1):
    false_negative=np.sum((y_pred==0)*(y_truly==1))
    false_negative
    #  :0

    計算TN(真の負の例、すなわち我々は0と予測し、ラベルも0と予測する):
    true_negative=np.sum((y_pred==0)*(y_truly==0))
    true_negative
    #  :0