2017-06-19 64 views
0

我有以下代码如何从sklearn TruncatedSVD对象获取功能名称?

import pandas as pd 
import numpy as np 
from sklearn.decomposition import TruncatedSVD 
df = df = pd.DataFrame(np.random.randn(1000, 25), index=dates, columns=list('ABCDEFGHIJKLMOPQRSTUVWXYZ')) 

def reduce(dim): 
    svd = sklearn.decomposition.TruncatedSVD(n_components=dim, n_iter=7, random_state=42) 
    return svd.fit(df) 

fitted = reduce(5) 

我如何得到fitted列名?

+0

SVD和PCA不会从现有列中选择列。他们使用所有可用的列将数据转换为新的维度。所以没有合适的列。 –

+0

经过一番研究,我意识到我是多么的错误,我问了关于stats.exchange的另一个问题[link](https://stats.stackexchange.com/questions/286335/reduce-dimensions-of-a-highly-dimension-数据)如果您有时间,请考虑回答。 @VivekKumar –

回答

3

fitted列名将是SVD维度。每个维度都是输入要素的线性组合。要理解特定维度的含义,请参阅svd.components_数组 - 它包含输入要素乘以系数的矩阵。

你原来的例子,略有变化:

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

feature_names = list('ABCDEF') 
df = pd.DataFrame(
    np.random.randn(1000, len(feature_names)), 
    columns=feature_names 
) 

def reduce(dim): 
    svd = TruncatedSVD(n_components=dim, n_iter=7, random_state=42) 
    return svd.fit(df) 

svd = reduce(3) 

然后,你可以做这样的事情,以获得更可读的SVD维的名字 - 让我们计算它的第0尺寸:

" ".join([ 
    "%+0.3f*%s" % (coef, feat) 
    for coef, feat in zip(svd.components_[0], feature_names) 
]) 

这表明+0.170*A -0.564*B -0.118*C +0.367*D +0.528*E +0.475*F - 这是在这种情况下可用于第0个SVD维度的“特征名称”(当然,系数取决于数据,因此特征名称也取决于数据)。

如果您有很多输入尺寸,您可以交易一些具有可检测性的“精度”,例如,分类系数并仅使用其中的几个顶部。可以在https://github.com/TeamHG-Memex/eli5/pull/208(免责声明:我是eli5维护者之一;拉请求不是由我)中找到更详细的示例。

+0

我的理解是新名称告诉我新维度是如何从旧维度构建的,我是否正确? –

+0

是的,这是正确的。 –

+0

然后,谢谢你的帮助,我也问了更多关于stats.exchange [link](https://stats.stackexchange.com/questions/286335/reduce-dimensions-of-a-highly-dimension-data)的详细问题。如果你有时间,请考虑回答,再次感谢。 –

0

继续米哈伊尔邮报。

假设你已经有feature_namesvectorizer.get_feature_names()之后,你已经使用下面的代码名为svd.fit(X)

现在你还可以提取排序最好的功能名称:

best_fearures = [feature_names[i] for i in svd.components_[0].argsort()[::-1]] 

上面的代码,尝试返回降序类型svd.components_[0]的争论,并从feature_names(所有功能)中找到相关索引并构造best_features阵列。 然后,您可以看到例如10个最佳功能:

In[21]: best_features[:10] 

Out[21]: 
['manag', 
'develop', 
'busi', 
'solut', 
'initi', 
'enterprise', 
'project', 
'program', 
'process', 
'plan']