我在尝试使用scikit的GaussianRandomProjection来处理我的数据集,数据集的形状为1599 x 11
,如下所示:
transformer = random_projection.GaussianRandomProjection()X_new = transformer.fit_transform(wine_data.values[:, :11])
在执行上述操作时,我遇到了以下错误:
ValueError: eps=0.100000 and n_samples=1599 lead to atarget dimension of 6323 which is larger than the original space with n_features=1
我不理解这个错误。它具体是什么意思?我如何使用GaussianRandomProjection
来降低数据维度呢?
回答:
以下是来自Scikit-Learn官方文档关于GaussianRandomProjection
中参数n_components
的直接引用:
目标投影空间的维度。
n_components可以根据数据集中样本数量和Johnson-Lindenstrauss引理给出的界限自动调整。在这种情况下,嵌入的质量由eps参数控制。
需要注意的是,Johnson-Lindenstrauss引理对数据集的结构不作任何假设,因此可能会给出对所需组件数量的非常保守的估计。
在你的情况下,看起来估计器在“降低”维度后倾向于生成一个6323维的目标投影。这显然是出乎意料的,因为你希望降低维度而不是增加它。我建议你首先假设你期望的输出维度(例如8),然后测试模型是否按预期工作。
transformer = GaussianRandomProjection(n_components=8) #设置你期望的输出维度X_new = transformer.fit_transform(wine_data.values[:, :11])
祝你好运