Source: Python Machine Learning 3rd
什么是LDA
面对有蓝黄两类标签的监督学习问题时:
- 使用PCA:PCA曲线(红线)从两个椭圆之间穿过(最大方差正交分量),投影分布呈LD2维度的正态分布,根据这个正态分布的PCA坐标投影,我们无法分别这两类
- 使用LDA:LDA曲线(蓝线)会从两个椭圆中间穿过,投影后的数据分布同LD1维度的两个正态分布,由此我们有效进行分类
由此可见,面对监督学习问题时,PCA的表现大大下降了。为此我们使用PCA来寻找并确定不同类的子空间在某一维度上差别最大的分布情况,帮助我们对监督学习数据实现降维
LDA与PCA
相同
- LDA和PCA都用于数据维度降低
不同
- PCA不适用于监督学习分类问题
- LDA可以视为比PCA高级的分类技巧,但在实践情况下,使用PCA比使用LDA在图像识别等领域表现更好
- LDA用于监督学习,而PCA用于非监督学习(也可以用于监督学习。。。)
- PCA寻找最大方差的正交分量轴,LDA寻找最优化分类的特征子空间,或者说投影后类内方差最小,类间方差最大
LDA python实现
使用LDA前我们需要注意以下条件:
- 数据正态分布
- 样本彼此独立
- 即使不满足以上两点,LDA还是能有较好的表现
使用sklearn实现LDA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
# 标准化数据输入集
...
# LDA实现监督学习数据降维
lda = LDA(n_components=2)
X_train_lda = lda.fit_transform(X_train_std, y_train)
# 逻辑回归实现预测
lr = LogisticRegression(multi_class='ovr', random_state=1, solver='lbfgs')
lr = lr.fit(X_train_lda, y_train)
# 可视化
plot_decision_regions(X_train_lda, y_train, classifier=lr)
plt.xlabel('LD 1')
plt.ylabel('LD 2')
plt.legend(loc='best')
plt.tight_layout()
plt.show()
很明显,当我们使用LDA来降低数据维度时,fit训练函数需要y_train,而这在PCA中是不需要的
plot_decision_regions是python machine learning 3rd中的可视化方程,可以很好地实现二维数据的可视化
链接:二维数据可视化模型
结果:
使用LDA降至只有二维仍然能够近乎完美地预测出监督学习分类结果
再进一步QDA
通过之前的比较,我们可以发现LDA相比PCA在监督学习分类问题中巨大的优势,然后LDA正如其名,只能够进行线性分析,看看scikit learn上的一个例子:
面对交叉分布的两组样本点,LDA无法地很好地对两类进行区分,这种情况下如果使用(QDA):
QDA在关键的地方可以通过曲线进行过渡,分类表现优异许多。
QDA数学原理
总的来说,QDA和LDA一样,都假设样本是呈正态分布的,但是QDA不会像LDA一样假设所有类的协方差相同。具体而言: