深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读!
机器学习分为监督学习、无监督学习和半监督学习(强化学习)。无监督学习最常应用的场景是聚类(clustering)和降维(dimension reduction)。聚类算法包括:K均值聚类(K-Means)、层次聚类(Hierarchical Clustering)和混合高斯模型(Gaussian Mixture Model)。降维算法包括:主成因分析(Principal Component Analysis)和线性判别分析(Linear Discriminant Analysis)。
线性判别分析(Linear Discriminant Analysis-LDA)是一种监督学习的降维技术, 即他要求训练数据是有标签信息的数据集。主成因分析(Principal Component Analysis-PCA)是一种无监督学习的降维技术。
线性判别分析(Linear Discriminant Analysis-LDA)的核心思想是:投影后类内方差最小,类间方差最大。LDA要将数据在低维度上进行投影,投影后希望每一种类别数## 1 算法原理
线性判别分析(Linear Discriminant Analysis-LDA)基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。
线性判别分析(Linear Discriminant Analysis-LDA)降维算法的核心步骤如下:
线性判别分析(Linear Discriminant Analysis-LDA)降维算法的核心优势如下:
注意:本文中使用sklearn中的鸢尾花(yuānwěi)数据集来对特征处理功能进行说明。如果不熟悉该数据集请阅读sklearn的数据集(含python源码)并先了解一下鸢尾花(yuānwěi)数据集。
https://blog.csdn.net/shareviews/article/details/82848530
部分机器学习项目,由于数据集特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法包括:基于L1惩罚项的模型、主成分分析法(PCA)和线性判别分析(LDA)。降维的本质就是将原始的样本映射到维度更低的样本空间中。PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。
使用sklearn.lda库的LDA类进行数据降维的代码如下:
#
# Python 3.6
#
from sklearn.datasets import load_iris
from matplotlib import pyplot as plt
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
iris = load_iris()
print(iris.keys())
print("iris.keys() = {0}".format(iris.keys()))
raw_data = iris['data']
print("iris.data.shape = {0}".format(raw_data.shape))
feature_names = iris['feature_names']
print("data.feature_names = {0}".format(feature_names))
raw_target = iris['target']
print("data.target.shape = {0}".format(raw_target.shape))
def plot_iris_projection(x_index, y_index):
# plt.scatter one type of iris flower with one color.
types_count = 3
for t,marker,c in zip(range(types_count),'>ox', 'rgb'):
plt.scatter(dst_data[dst_target==t,x_index],
dst_data[dst_target==t,y_index],
marker=marker,c=c)
if(dst_data.shape[1] == 4):
plt.xlabel(feature_names[x_index])
plt.ylabel(feature_names[y_index])
plt.figure(figsize=(16, 9))
dst_data = raw_data
dst_target = raw_target
plt.subplot(2, 2, 1)
plot_iris_projection(x_index=0, y_index=1)
plt.subplot(2, 2, 2)
plot_iris_projection(x_index=0, y_index=2)
# supervised dimensionality reduction
dst_data = LinearDiscriminantAnalysis(n_components=2).fit_transform(raw_data, raw_target)
ax = plt.subplot(2, 2, 3)
ax.set_title('LDA(n_components=2)')
plot_iris_projection(x_index=0, y_index=1)
print(dst_data.shape)
# supervised dimensionality reduction
dst_data = LinearDiscriminantAnalysis(n_components=3).fit_transform(raw_data, raw_target)
ax = plt.subplot(2, 2, 4)
ax.set_title('LDA(n_components=3)')
plot_iris_projection(x_index=0, y_index=1)
print(dst_data.shape)
#Adjust subgraph spacing
plt.subplots_adjust(wspace =0.3, hspace =0.4)
plt.show()
由上图可以看出,sklearn.lda库的LDA类仅需要配置维度数量n_components即可,不需要额外的调参。原始数据维度print(raw_data.shape)为(150,4)。处理后为数据维度print(dst_data.shape)为(150, 2)和(150, 2)得到了降维的目的。线性可分只能2维,纯的线性函数无法分开3维数据。所以这只n_components=2或者n_components=3,最终输出都是2维的。
线性判别分析(LDA)是最著名的有监督线性降维方法,主成因分析(PCA)是无监督线性降维方法。他们也存在核函数版本,用以支持非线性降维场景。
线性判别分析(LDA)在模式识别领域应用非常广泛。线性判别分析在人脸识别、舰艇识别、行人识别、车辆识别等领域等表现良好。