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

时间:2016-01-29 10:25:54

标签: python scikit-learn deprecation-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]

但我确信有更好的方法。

6 个答案:

答案 0 :(得分:32)

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

作为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)

答案 1 :(得分:29)

只需听听警告告诉你的内容:

  

如果您的数据具有单个要素/列,则将数据重塑为X.reshape(-1,1)       和X.reshape(1,-1)如果它包含单个样本。

对于您的示例类型(如果您有多个要素/列):

temp = temp.reshape(1,-1) 

对于一个功能/列:

temp = temp.reshape(-1,1)

答案 2 :(得分:5)

这可能会有所帮助

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

答案 3 :(得分:1)

.values.reshape(-1,1)将在没有警告/警告的情况下被接受

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

答案 4 :(得分:0)

我遇到了同样的问题并得到了相同的弃用警告。当我得到消息时,我正在使用[23,276]的numpy数组。我按照警告尝试重塑它并最终无处可去。然后我从numpy数组中选择每一行(因为我无论如何迭代它)并将其分配给列表变量。它没有任何警告就行了。

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

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

答案 5 :(得分:0)

您总是可以像这样重塑:

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

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

因为,主要的问题是你的临时体形何时: (8,)

,您需要 (8,1)