1.假设我们有m维的样本
x1,x2,...,xN
x
1
,
x
2
,
.
.
.
,
x
N
,
N1
N
1
属于
ω1
ω
1
,
N2
N
2
属于
ω2
ω
2
2.我们需要寻找一个标量
y
y
,将样本投影到一条线上(C-1空间,C=2)。
3.这些条线需要满足投影后类间的差距必须最大。
类间差距太小,这不是需要的直线
类间差距足够大,这就是我们要找的直线
为了寻找这样的直线,我们必须设定一个测度。
样本x和投影y的均值是:
是不是两个类别均值距离越大,效果就越好呢?
然而并不是,均值距离并不是一个很好的测度,因为它们有考虑类别的标准差。如下图,如果投影在x轴上,均值距离很大,但是分类效果不好(投影后重叠比较多)。如果投影在y轴上,均值距离虽然小,但是分类效果要比投影在x轴上的好。
解决办法是将举止距离通过类内方差标准化,也称为散布矩阵(scatter)。每一个份额里我们都定义一个散布矩阵。
S2iˇ
S
i
2
ˇ
描述了
ωi
ω
i
类投影后的方差。
S21ˇ
S
1
2
ˇ
+
S22ˇ
S
2
2
ˇ
描述了两个类别的标准差,这个也被称为类内离散度(within-class scatter)
所以LDA算法要寻找的直线就是投影后均值距离足够大,类内方差足够小。就是最大化下面的函数:
通过这个公式我们就可以找到最优的直线:
Si
S
i
是类别
wi
w
i
的协方差矩阵,
Sw
S
w
是类内离散矩阵
下图是投影后对应的各类别协方差矩阵,以及类内离散矩阵
同样均值距离可以表示为下图:
矩阵
SB
S
B
被称为类间散布(between_class scatter),
SˇB
S
ˇ
B
是投影后的类间散布。
所以最后的公式可以简化为:
既
J(w)
J
(
w
)
通过不同类别的均值(类间散布)被不同类别方差(类内散布)标准化之后的值来测量的。
求最佳的直线,就是让
j(w)
j
(
w
)
的导数为0:
广义本征值( generalized eigen value)
参考文献:
https://blog.csdn.net/G090909/article/details/50197331
https://www.cnblogs.com/pinard/p/6244265.html
http://sklearn.apachecn.org/cn/0.19.0/modules/lda_qda.html
https://blog.csdn.net/u010016927/article/details/75094715
https://blog.csdn.net/g090909/article/details/50198615
https://zhuanlan.zhihu.com/p/23965433
https://blog.csdn.net/daunxx/article/details/51881956
https://blog.csdn.net/u014664226/article/details/52199892
https://www.cnblogs.com/pangxiaodong/archive/2011/10/21/2218484.html
http://sebastianraschka.com/Articles/2014_python_lda.html
https://blog.csdn.net/leayc/article/details/76299694
http://www.php.cn/python-tutorials-391013.html
https://blog.csdn.net/brucewong0516/article/details/78684005
https://blog.csdn.net/jnulzl/article/details/49894041