題目2.1
數據集包含1000個樣本,其中500個正例、500個反例,將其劃分爲包含70%樣本的訓練集和30%樣本的測試集用於留出法評估,試估算公有多少種劃分方式。
訓練集和測試集的劃分要儘可能保持數據分佈的一致性,按題目要求,需要抽700個訓練樣本,300個測試樣本,正例與反例的比例爲,即抽350個正例和350個反例組成700個訓練樣本,共有種劃分方法。
題目若改成600個正例、400個反例,其比例爲,則抽個正例和個反例組成700個訓練樣本,剩下180個正例和120個反例組成300個測試贗本,比例同樣是。
題目2.2
數據集包含100個樣本,其中正、反例各一半,假定學習算法所產生的模型是將新樣本預測爲訓練樣本較多的類別(訓練樣本數相同時進行隨機猜測),試給出用10折交叉驗證法和留一法分別對錯誤率進行評估所得的結果。
- 10折交叉驗證法:每次驗證,訓練樣本中的正例和反例都各佔一半,此時模型對新樣本的預測爲隨機猜測,期望錯誤率爲0.5
- 留一法:若取1個正例作爲測試樣本,則訓練樣本中正例與反例的比例爲,此時模型對測試樣本的預測結果爲反例,錯誤率爲1;若取1個反例作爲測試樣本,則訓練樣本中正例與反例的比例爲,此時模型對測試樣本的預測結果爲正例,錯誤率爲1。綜上所述,期望錯誤率爲1。
題目2.3
若學習器A的值比學習器B高,試析A的BEP值是否也比B高。
直接上代碼跑數據,假定有5個樣本,類別標籤分別爲:反例、正例、正例、反例、正例,
def perm(array):
if(len(array)<=1):
return [array]
r=[]
for i in range(len(array)):
s=array[:i] + array[i+1:]
p=perm(s)
for x in p:
r.append(array[i:i+1] + x)
return r
array = [0, 1, 2, 3, 4]
label = [0, 1, 1, 0, 1]
# machines = perm(array)
machines = [[4, 3, 2, 0, 1],
[4, 3, 2, 1, 0]]
# mlist是一個學習器
for mlist in machines:
# 依次將學習器mlist中的前i個結果預測爲正例
for i in range(len(mlist)):
tempLabel = [0] * len(label)
for j in range(0, i + 1):
tempLabel[mlist[j]] = 1
TP = 0
FN = 0
FP = 0
for m in mlist:
if label[m] == tempLabel[m] and label[m] == 1:
TP = TP + 1
if label[m] == 1 and tempLabel[m] == 0:
FN = FN + 1
if label[m] == 0 and tempLabel[m] == 1:
FP = FP + 1
P = 1.0 * TP / (TP + FP)
R = 1.0 * TP / (TP + FN)
F1 = 0
if P + R != 0:
F1 = 2 * P * R / (P + R)
print(P, '\t', R, '\t', F1)
print('\n')
觀測數據,取最後2個學習器記爲B、A,可以看到,A的P-R曲線“包住”B的P-R曲線,兩個學習器的BEP值相同,但A的某個值高於B的某個值,
從而得知,若學習器A的值比學習器B高,A的BEP值不一定比B高。
題目2.4
試述真正例率(TPR)、假正例率(FPR)與查準率(P)、查全率(R)之間的聯繫。
若認真實踐了題目2.3,接下來做題目2.4會比較有感覺。現根據學習器的預測結果對樣例進行排序,排在前面的是學習器認爲“最可能”是正例的樣本,排在最後面的則是學習器認爲“最不可能”是正例的樣本。
觀察P-R圖,查全率和查準率是一對“矛盾”的度量。爲了提升查準率,就必須把篩選條件設置得更加嚴格以儘量排除反例(即把閾值調小),那麼排序排在反例後面的正例就會被pass,此時查全率下降;相反,爲了提升查全率,就必須放鬆篩選條件(即把閾值調大),那麼排序排在閾值前面的反例就會被預測爲正例,此時查準率下降。
觀察查全率與真正例率,可知兩者相等。
觀察ROC曲線圖,真正例率與假正例率呈現“單調遞增”關係。當調大閾值時,有可能使得FP增大且TN減小,假正例率變大,而此時,亦有可能TP增大且FN減小,真正例率變大。
題目2.5
試證明式(2.22)。
先不考慮的情況,觀察式(2.20),可簡寫爲
接着將ROC曲線圖橫軸、縱軸各乘以、,發現,仔細觀察ROC曲線圖,當時,點恰巧是一個反例樣本,排序排在它前面的共有個正例樣本。舉一個例子,
共有10個樣本,根據學習器的預測結果對樣本進行排序,得到,其ROC曲線圖如下,
紅色點前面有3個正例樣本,藍色點前面有4個正例樣本,綠色點前面有5個正例樣本(後面的點依次類推)。
那麼,式(2.20)可改寫成
注意兩個求和符號的順序,求和符號部分就是統計有顏色的點前面的正例樣本個數,個數乘以1就是那一列的面積,而
則是做歸一化處理。
同樣,計算時不考慮的情況,有顏色的點的“損失”爲排序排在該點後面正例樣本個數,有
易推。
接下來考慮的情況,
假設紅色點與藍色點的預測值相等,我們記0.5個“罰分”,
剛好就是上圖綠色區域的面積,在式(2.20)的原本形式中,就是求梯形面積。
也可以換一個角度思考,由於值相等,學習器進行隨機預測,藍色點以0.5概率落在紅色點上方(此時排在前面),以0.5概率落在紅色點右方(此時排在前面),期望之下則是直接畫一條斜線,在計算式(2.21)時就直接添加0.5個“罰分”,注意斜線(折線)都代表了+、-兩個樣例,所以不妨礙藍色點之後排在反例之前的正例點個數的統計。
證畢。
題目2.6
試述錯誤率與ROC曲線的聯繫。
Acknowledge
題目2.1、題目2.2和題目2.6參考自:https://blog.csdn.net/icefire_tyh/article/details/52065867
感謝@四去六進一
題目2.3的ROC曲線形狀理解參考自:
https://www.cnblogs.com/gczr/p/10137063.html
感謝@光彩照人
(曲線不一定經過和)
題目2.4參考自:
https://www.jianshu.com/p/66ab21e08dd0
感謝@AI和金融模型
題目2.5的理解參考自:
https://blog.csdn.net/cherrylvlei/article/details/52958720
感謝@對半獨白