在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]
但我确信有更好的方法。
答案 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)