1>理解監督學習
監督學習的目標是要預測一些資料的標簽或者目標值,故監督學習可以劃分為兩種形式:
- 分類:使用資料來預測類別的這些監督學習就叫做分類,比如:預測一張影像中是否包含一只狗或一只貓,在這里,資料的標簽就是類別,只能是其中一類或者是另一類,而不可能是兩類的混合結果,當只有兩種選擇時,就叫做二分類或者二值分類,當多于兩類時,比如:預測第二天的天氣,就叫做多類分類,
- 回歸:使用資料預測真實值的這些監督學習就叫做回歸,比如:當我們預測股票價值的時候,并不像預測股票的類別那樣,回歸的目標是盡可能準確地去預測目標值,
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)的范圍內隨機取整數的方式,生成5個不是0就是1的隨機標簽:
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])
計算準確率(兩種方法):
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/247759.html
標籤:AI
上一篇:安裝linux中遇到的問題二進制/無法安裝tools/共享檔案不出現/檔案不能拖拽
下一篇:匯編語言基礎
