【问题标题】:How to reduce dimension of the binary data?如何降低二进制数据的维度?
【发布时间】:2017-11-01 05:01:43
【问题描述】:

我有一个包含二进制数据的数据框,并且我知道列之间存在依赖关系。我想删除依赖列,只想保留独立列。示例输入如下:

Test ,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P
test1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1
test2,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1
test3,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1
test4,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1
test5,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1

在这里我们看到,(A,B,C,G,M), (D), (E,F), (H,I,J,K,L,P) and (N, O) 是分组具有相同值或依赖列的列。最后我想得到以下列:

Test,A,D,E,H,N test1,0,0,0,1,1 test2,1,0,1,1,0 test3,1,0,1,1,0 test4,1,1,0,1,0 test5,1,1,0,1,0

我正在尝试在 python 中使用 PCA,但无法实现。有人可以指导我如何实现这一目标吗?

编辑:这是我正在使用的示例代码

import pandas as pd 
import numpy as np 
from sklearn.decomposition import PCA

df = pd.read_csv("TestInput.csv")
print(df)
pca = PCA()

#Remote the header and the row names
numDf = df.iloc[:,1:]
print(pca.fit(numDf))
T=pca.transform(numDf)

print("Number of unique columns are:", T.shape[1])
print(np.cumsum(pca.explained_variance_ratio_))

谢谢。

【问题讨论】:

  • 您不需要为此使用 PCA,因为这些值清楚地表明这些列非常相似。为什么不比较列中的值并删除重复的值?
  • @AnandCU 在此示例中,列数是有限的,但在我原来的问题中,我有 100000 列和 100000 行。因此,对如此大的数据框进行相似性测试需要时间。
  • 您尝试过 PCA 吗?你被困在哪里了?还要检查这个答案 stackoverflow.com/a/14985695/5026636 。试一试。
  • @AnandCU 添加了我正在使用的代码。

标签: python dataframe machine-learning pca


【解决方案1】:

this comment 转换为答案,查找并删除带有drop_duplicates 的重复列。

df = df.set_index('Test')
df.T.drop_duplicates(keep='first').T

       A  D  E  H  N
Test                
test1  0  0  0  1  1
test2  1  0  1  1  0
test3  1  0  1  1  0
test4  1  1  0  1  0
test5  1  1  0  1  0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2015-09-03
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多