scikit learn 中的预处理 - 单个样本 - 折旧警告

Preprocessing in scikit learn - single sample - Depreciation warning

在 Ubuntu 下全新安装 Anaconda...我在使用 Scikit-Learn 进行分类任务之前以各种方式预处理我的数据。

from sklearn import preprocessing

scaler = preprocessing.MinMaxScaler().fit(train)
train = scaler.transform(train)    
test = scaler.transform(test)

这一切都很好,但如果我有一个新样本(下面的温度)我想分类(因此我想以相同的方式预处理然后我得到

temp = [1,2,3,4,5,5,6,....................,7]
temp = scaler.transform(temp)

然后我收到弃用警告...

DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 
and will raise ValueError in 0.19. Reshape your data either using 
X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1)
if it contains a single sample. 

所以问题是我应该如何重新缩放像这样的单个样本?

我想另一种选择(不是很好)是...

temp = [temp, temp]
temp = scaler.transform(temp)
temp = temp[0]

但我相信还有更好的方法。

嗯,看起来警告实际上是在告诉你该怎么做。

作为 sklearn.pipeline stages' uniform interfaces 的一部分,根据经验:

  • 当你看到X时,它应该是一个np.array有两个维度

  • 当你看到y时,它应该是一个单一维度的np.array

因此,您应该考虑以下几点:

temp = [1,2,3,4,5,5,6,....................,7]
# This makes it into a 2d array
temp = np.array(temp).reshape((len(temp), 1))
temp = scaler.transform(temp)

只听警告告诉你什么:

Reshape your data either X.reshape(-1, 1) if your data has a single feature/column and X.reshape(1, -1) if it contains a single sample.

对于您的示例类型(如果您有多个 feature/column):

temp = temp.reshape(1,-1) 

一个 feature/column:

temp = temp.reshape(-1,1)

这可能有帮助

temp = ([[1,2,3,4,5,6,.....,7]])

我遇到了同样的问题并收到了同样的弃用警告。当我收到消息时,我正在使用 [23, 276] 的 numpy 数组。我试着按照警告重塑它,结果一无所获。然后我 select numpy 数组中的每一行(无论如何我都在迭代它)并将它分配给一个列表变量。然后它在没有任何警告的情况下工作。

array = []
array.append(temp[0])

然后你可以使用python列表对象(这里'array')作为sk-learn函数的输入。不是最有效的解决方案,但对我有用。

.values.reshape(-1,1) 将在没有 alerts/warnings

的情况下被接受

.reshape(-1,1) 将被接受,但弃用 war

你总是可以像这样重塑:

temp = [1,2,3,4,5,5,6,7]

temp = temp.reshape(len(temp), 1)

因为,主要问题是当您 temp.shape 是: (8,)

而且你需要 (8,1)

-1 是数组的未知维度。在 numpy.reshape 文档中阅读有关“newshape”参数的更多信息 -

# X is a 1-d ndarray

# If we want a COLUMN vector (many/one/unknown samples, 1 feature)
X = X.reshape(-1, 1)

# you want a ROW vector (one sample, many features/one/unknown)
X = X.reshape(1, -1)