algorithm - 使用 PCA 和 K-MEANS 选择相关特征
问题描述
我试图了解PCA和K-Means算法,以便从一组特征中提取一些相关特征。
我不知道计算机科学的哪个分支研究这些主题,在互联网上似乎没有很好的资源,只是一些我不太了解的论文。论文示例http://www.ifp.illinois.edu/~qitian/e_paper/icip02/icip02.pdf
我有如下组成的人行道的 csv 文件:
- TIME , X , Y , Z,这些值由加速度计记录
我做了什么
- 我将数据集转换为 Python 中的表
- 我使用 tsfresh,一个 Python 库,从每个 walk 中提取一个特征向量,这些特征很多,每次 walk有 2k+ 个特征。
- 我必须使用PFA(主要特征分析)从向量特征集中选择相关特征
为了做到最后一点,我必须减少使用PCA行走的特征集的维度(PCA将使数据与原始数据不同,因为它使用原始协方差矩阵的特征向量和特征值修改数据数据)。这里我有第一个问题:
- PCA 的输入应该是什么样子?行是步行数,列是特征,反之亦然,所以行是特征数,列是人的步行数?
在我减少了这些数据之后,我应该对减少的“特征”数据使用K-Means算法。输入在 K-Means 中的外观应该如何?使用这种算法的目的是什么?我所知道的这个算法是用来“聚类”一些数据的,所以在每个聚类中都有一些基于某些规则的“点”。我所做的和想的是:
- 如果我在 PCA 中使用看起来像这样的输入:行是行走的数量,列是特征的数量,那么对于 K-Means,我应该用行更改列,因为这样每个点都是一个特征(但是这不是具有特征的原始数据,只是简化后的数据,所以我不知道)。因此,对于每个集群,我看到的欧几里得距离与质心的距离较小,并选择该特征。那么我应该声明多少个集群?如果我声明集群与特征数量相同,我将始终提取相同数量的特征。我怎么能说缩减数据中的一个点对应于原始特征集中的这个特征呢?
我知道我所说的可能不正确,但我正在努力理解它,你们中的一些人可以帮助我吗?如果我是在正确的方式?谢谢!
解决方案
对于PCA,请确保将算法使用的方法(特征向量等)和结果的理解分开。结果是一个线性映射,将原始空间映射A
到A'
,在可能的情况下,维度(在您的情况下为特征数)小于原始空间A
。
所以空间中的第一个特征/元素A'
是 的特征的线性组合A
。
行/列取决于实现,但如果您使用scikit PCA,则列是特征。
您可以将PCA输出(A'
空间)提供给K-means,它会根据通常降维的空间对它们进行聚类。
每个点都将是一个集群的一部分,其想法是,如果您在 上计算 K-Means A
,您最终可能会得到与 相同/相似的集群A'
。计算A'
上要便宜很多。您现在有一个聚类,在A'
和上A
。正如我们同意在 中相似的点在A'
中也相似A
。
集群的数量很难回答,如果你什么都不知道,请搜索肘部方法。但是说你想感受things
一下你拥有的不同类型,我建议去3~8而不是太多,比较离每个中心最近的2-3个点,你就有了消耗品。特征的数量可以大于集群的数量。例如,如果我们想知道某个区域(2D)中最密集的区域,您可以轻松拥有 50 个集群,以了解 50 个城市可能在哪里。这里我们有比空间维度更高的集群方式,这是有道理的。
推荐阅读
- html - 将 C++ 字符串放入 HTML 代码中以在网络服务器上显示值
- flutter - 将默认构建目标从 Flutter for web 更改为 flutter for Android
- python - 在主线程中启用事件循环的情况下使用子进程调用时的文件描述符错误
- visual-studio-mac - Visual Studio Mac 扩展 mpack 失败
- tsql - 如何生成报告以显示员工缺勤的次数
- c# - 当我绘制图表时,ChartPlotter 内存增加并且从不减少
- odata - DPC_EXT 中的变更集开始/结束方法,但 GCS_METHODS-CHANGESET_BEGIN 未知
- javascript - 如何解决 couchbase 5.1.0 中的文档修订冲突?
- django - 在多对一关系下,pizzas.html 上不显示比萨饼的名称 [Python 速成课程练习 18-8]
- c# - 我正在模拟请求但它显示为空?