参考了统计学习方法,概率论与数理统计,工程线性代数,西瓜书,Machine Learnig with python做的总结,所以不能作为教程,还包含自己用sklearn做的一些对比实验,原文是写在jupyter上的,这里是直接转为.md导过来的,所以格式有些问题,有些东西还待完善…
(一)machine learning terminology
分类器(Classifier)
一段程序或一个函数将无标签实例映射到类别,则成称这段程序或这个函数为分类器
混淆矩阵(Confusion Matrix)
用来观察分类器的性能,其中矩阵列标表示实例的预测类别,行标表示实例的真是类别.下图就是一个二分类(binary classification)的混淆矩阵.表示正确预测男性42人,正确预测女性32人,18人被误分类为男性,8人被误分类为女性.
准确率 (accuracy(error rate))
准确率表示为: 正 确 预 测 实 例 数 / 实 例 总 数 正确预测实例数/实例总数正确预测实例数/实例总数.上例中准确率是 ( 42 + 32 ) / ( 42 + 32 + 8 + 18 ) = 0.72 (42+32)/(42+32+8+18)=0.72(42+32)/(42+32+8+18)=0.72
准确性悖论(Accuracy paradox)
我们假设有如下一个混淆矩阵,它只会预测female,我们可以计算其准确率 ( 50 + 0 ) / ( 0 + 50 + 50 + 0 ) = 0.5 (50+0)/(0+50+50+0)=0.5(50+0)/(0+50+50+0)=0.5
又比如我们有一个垃圾邮件识别分类器,其混淆矩阵如下,所示,其准确率为
(
91
+
4
)
/
(
91
+
4
+
1
+
4
)
=
0.95
(91+4)/(91+4+1+4)=0.95(91+4)/(91+4+1+4)=0.95:
然后我们有另一个垃圾邮件识别分类器,其混淆矩阵如下所示,其准确率也是 ( 95 + 0 ) / ( 95 + 0 + 0 + 5 ) = 0.95 (95+0)/(95+0+0+5)=0.95(95+0)/(95+0+0+5)=0.95。(两者用同样的实例数据)
虽然准确率都是0.95但是后者没有分类垃圾邮件的能力,因此分类器的好坏单看准确率是不够的,这就是准确性驳论。
精确率(Precision)和召回率(Recall)
TP:True Positive TN:True Negative FP:False Positive FN:False Negtive(翻译过来就是真阳性,真阴性,假阳性,假阴性)还是英文好记
A
c
c
u
r
a
c
y
:
(
T
N
+
T
P
)
/
(
T
N
+
T
P
+
F
N
+
F
P
)
Accuracy:(TN+TP)/(TN+TP+FN+FP)Accuracy:(TN+TP)/(TN+TP+FN+FP)
P
r
e
c
i
s
i
o
n
:
(
T
P
)
/
(
T
P
+
F
P
)
Precision:(TP)/(TP+FP)Precision:(TP)/(TP+FP)
R
e
c
a
l
l
:
(
T
P
)
/
(
T
P
+
F
N
)
(
也
是
T
r
u
e
p
o
s
i
t
i
v
e
r
a
t
e
)
Recall:(TP)/(TP+FN)(也是True\quad positive\quad rate)Recall:(TP)/(TP+FN)(也是Truepositiverate)
T
r
u
e
n
e
g
t
i
v
e
r
a
t
e
:
(
T
N
)
/
(
T
N
+
F
P
)
True\quad negtive\quad rate:(TN)/(TN+FP)Truenegtiverate:(TN)/(TN+FP)
多分类的混淆矩阵和准确率,精确率,召回率
A c u r r a c y : Acurracy:Acurracy: ∑ i M i i ∑ i j M i j \frac{\sum_i M_{ii}}{\sum_{ij} Mij}∑ijMij∑iMii
P e r c i s i o n i : Percision_i:Percisioni: M i i ∑ j M j i \frac{M_{ii}}{\sum_j M_{ji}}∑jMjiMii
R e c a l l i : Recall_i:Recalli: M i i ∑ j M i j \frac{M_{ii}}{\sum_j M_{ij}}∑jMijMii
上面这个例子中:
A
c
c
u
r
a
c
y
=
(
6
+
6
+
8
)
/
(
6
+
2
+
1
+
6
+
1
+
1
+
8
)
=
0.8
Accuracy=(6+6+8)/(6+2+1+6+1+1+8)=0.8Accuracy=(6+6+8)/(6+2+1+6+1+1+8)=0.8
p
e
r
c
i
s
i
o
n
d
o
g
=
6
/
(
6
+
1
+
1
)
=
0.75
percision_{dog}=6/(6+1+1)=0.75percisiondog=6/(6+1+1)=0.75
p
e
r
c
i
s
i
o
n
c
a
t
=
6
/
(
6
+
1
+
2
)
=
0.67
percision_{cat}=6/(6+1+2)=0.67percisioncat=6/(6+1+2)=0.67
p
e
r
c
i
s
i
o
n
s
n
a
k
e
=
8
/
(
0
+
0
+
8
)
=
1
percision_{snake}=8/(0+0+8)=1percisionsnake=8/(0+0+8)=1
r e c a l l d o g = 6 / ( 6 + 2 + 0 ) = 0.75 recall_{dog}=6/(6+2+0)=0.75recalldog=6/(6+2+0)=0.75 r e c a l l c a t = 6 / ( 6 + 1 + 0 ) = 0.86 recall_{cat}=6/(6+1+0)=0.86recallcat=6/(6+1+0)=0.86 r e c a l l s n a k e = 8 / ( 1 + 1 + 8 ) = 0.8 recall_{snake}=8/(1+1+8)=0.8