Python 值错误eps=0.100000,因为我尝试减少数据维度。这可能是什么原因?

Python 值错误eps=0.100000,因为我尝试减少数据维度。这可能是什么原因?,python,machine-learning,scikit-learn,dimensionality-reduction,Python,Machine Learning,Scikit Learn,Dimensionality Reduction,我正在尝试将scikit用于我的数据集,其形状为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 a target dimensio

我正在尝试将scikit用于我的数据集,其形状为
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 a
target dimension of 6323 which is larger than the original 
space with n_features=1

我不理解这个错误。这到底是什么意思?我如何使用
GaussianRandomProjection
来降低数据维度?

这里直接引用了官方Scikit学习文档中关于
GaussianRandomProjection
的参数
n_components

目标投影空间的维数

n_组件可根据组件数量自动调整 数据集中的样本和 约翰逊·林登斯特劳斯引理。在这种情况下,嵌入的质量 由eps参数控制

应该注意的是,Johnson-Lindenstrauss引理可以产生 所需部件数量的保守估计 不对数据集的结构进行假设。

在你的例子中,在“减少”维数后,估计量似乎倾向于产生6323维的预测目标。这显然出乎意料,因为您希望减少维度而不是增加维度。我建议您首先假定所需输出的尺寸(即8),然后测试模型是否以预期方式工作

transformer = GaussianRandomProjection(n_components=8) #Set your desired dimension of the output
X_new = transformer.fit_transform(wine_data.values[:, :11])

祝你好运

为什么它不自动降低维度?@SuhailGupta是的,它是自动的,但不降低维度!因为在您的特殊情况下,预计需要的组件数量为6323。但是你只有11个功能!因此,您需要明确地告诉算法您希望剩下多少组件,或者您可以增加您的
eps
。我更喜欢前一种方法,因为它更可靠。@SuhailGupta顺便说一句,如果您想深入了解
n_组件
是如何自动派生的,请访问此。此
sklearn.random\u projection.johnson\u lindenstrauss\u min\u dim
函数用于
n\u组件的计算。