主成分分析

我正在学习主成分分析,我刚刚了解到在对数据样本应用PCA之前,我们必须进行两个预处理步骤,即均值归一化特征缩放。然而,我对均值归一化是什么以及如何实现它一无所知。

起初我搜索了它;然而,我找不到一个有指导性的解释。是否有人可以解释什么是均值归一化以及如何实现它?


回答:

假设有一个数据集,包含’d’个特征(列)和’n’个观测值(行)。为了简单起见,我们考虑d=2和n=100。这意味着你的数据集现在有2个特征和100个观测值。换句话说,你的数据集现在是一个有100行和2列的二维数组 – (100×2)。最初,当你可视化它时,你可以看到点在二维空间中散布。

当你对数据集进行标准化,并且当你可视化它时,你实际上可以看到所有点都向原点移动。换句话说,所有观测点的值均值为0,标准差为1。这个过程称为标准化。

样本数据可视化

如何标准化..?这很简单。公式非常直接。

z = (X - u) / s其中,X - 特征列中的一个观测值u - 特征列的均值s - 特征列的标准差

注意:你必须针对数据集中的所有特征进行标准化

参考资料:

https://machinelearningmastery.com/normalize-standardize-machine-learning-data-weka/

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

主成分分析

我需要编写一个用于人类动作识别的分类器(高斯混合模型)。我有四个视频数据集。我选择了其中的三个作为训练集,一个作为测试集。在将高斯混合模型应用于训练集之前,我先对其进行了主成分分析(PCA)。

pca_coeff=princomp(trainig_data);score = training_data * pca_coeff;training_data = score(:,1:min(size(score,2),numDimension));

在测试步骤中我应该怎么做?我应该对测试数据执行新的主成分分析吗?

new_pca_coeff=princomp(testing_data);score = testing_data * new_pca_coeff;testing_data = score(:,1:min(size(score,2),numDimension));

还是我应该使用为训练数据计算的pca_coeff

score = testing_data * pca_coeff;testing_data = score(:,1:min(size(score,2),numDimension));

回答:

分类器是在由训练数据的主成分定义的空间中进行训练的。在不同的空间中评估它是没有意义的——因此,你应该对测试数据应用与训练数据相同的变换,所以不要计算不同的pca_coef

顺便说一下,如果你的测试数据是从与训练数据相同的分布中独立抽取的,那么对于足够大的训练和测试集,主成分应该大致相同。

选择使用多少个主成分的一种方法是检查PCA分解的特征值。你可以从princomp函数中获取这些特征值,如下所示:

[pca_coeff score eigenvalues] = princomp(data);

eigenvalues变量将是一个数组,其中每个元素描述了相应主成分所解释的方差量。如果你执行:

plot(eigenvalues);

你应该会看到第一个特征值最大,并且它们会迅速减少(这被称为“碎石图”,应该看起来像这样:http://www.ats.ucla.edu/stat/SPSS/output/spss_output_pca_5.gif,虽然你的图可能有高达800个点而不是12个)。

对应特征值较小的主成分不太可能有用,因为在这些维度上的数据方差非常小。许多人选择一个阈值,然后选择所有特征值高于该阈值的主成分。选择阈值的一个非正式方法是查看碎石图,并选择阈值为线“变平”之后的点——在之前我链接的图像中,一个好的值可能是~0.8,选择3或4个主成分。

如果我没记错,你可以这样做:

proportion_of_variance = sum(eigenvalues(1:k)) ./ sum(eigenvalues);

来计算“低维数据所描述的方差比例”。

然而,由于你使用主成分进行分类任务,你无法确定任何特定数量的主成分是最优的;一个特征的方差并不一定能告诉你它对分类有多有用。选择主成分的另一种方法是使用碎石图之外的方法,即尝试用不同数量的主成分进行分类,并通过经验确定最佳数量。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注