建立机器学习系统举例(垃圾邮件分类):
从邮件的训练集中,为每个邮件建立一个向量,每个元素代表一个单词,一般从训练集中找到最常用的
10000
10000
到
50000
50000
个单词组成向量,如果在邮件中找到该单词,向量对应位置用
1
1
表示,否则用表示,构建完所有的向量,使用监督学习的逻辑回归模型训练。
常用的提高分类精度的方法:
- 收集大量的数据;
- 设计复杂的特征值(例如使用邮件名);
- 设计算法改变输入形式(例如识别邮件中的错误拼写)。
但很难说哪个方法一定有效。
构建机器学习系统的建议方法:
- 从一个可以快速实现的简单算法开始,实现后在交叉验证集上测试;
- 画出学习曲线,看是高偏差还是高方差来决定是增加样本数还是增加特征值;
- 误差分析,手动检查被算法分错的交叉验证集中的样本,查看出现了哪些系统性错误。
误差分析可能无法帮你决定是否可以提高性能,唯一的方法是去试试,然后看是否有效果。
在交叉验证集上做误差分析,而不是测试集。
用一个具体数值来评价算法错误率很有必要,作为算法度量值。
偏斜类:正样本和负样本数量相差悬殊。
对于偏斜类,用分类精确度评价并不准确。
查准率/召回率:
查准率:对于预测
y=1
y
=
1
的,有多大比例真的为1.
召回率:对于实际
y=1
y
=
1
的,有多大比例预测为1
一般,我们将实际发生次数较少的类定义为 y=1 y = 1 。
实际设计机器学习系统时,应平衡查准率和召回率:
以癌症预测为例:
逻辑回归模型:
0⩽hθ(x)⩽1
0
⩽
h
θ
(
x
)
⩽
1
如果
hθ(x)⩾0.5
h
θ
(
x
)
⩾
0.5
,则预测为1;
如果
hθ(x)<0.5
h
θ
(
x
)
<
0.5
,则预测为0。
y=1
y
=
1
时,预测有癌症。
若将阈值从
0.5
0.5
调高至
0.7
0.7
,在交叉验证集上测试,查准率提升,但召回率下降;
若将阈值从
0.5
0.5
调低至
0.3
0.3
,在交叉验证集上测试,召回率提升,但查准率下降。
如果
hθ(x)⩾threshold
h
θ
(
x
)
⩾
t
h
r
e
s
h
o
l
d
,则预测为1,设
Precision(P)
P
r
e
c
i
s
i
o
n
(
P
)
为查准率,
Recall(R)
R
e
c
a
l
l
(
R
)
为召回率,则:
F1 score
F
1
s
c
o
r
e
:
2PRP+R
2
P
R
P
+
R
该值越大越好。
完美的算法:
P=1R=1F1 score=1
P
=
1
R
=
1
F
1
s
c
o
r
e
=
1
具备以下条件时,增加训练样本数有助于提高算法精度:
- 特征值 x x 包含足够的信息来准确预测;
- 假设函数包含很多参数。