Предварительная обработка в scikit learn - отдельная выборка - Предупреждение об износ
В новой установке Anaconda под Ubuntu... Я предварительно обрабатываю свои данные различными способами перед задачей классификации с помощью 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]
Но я уверен, что есть лучшие способы.
Ответы
Ответ 1
Просто послушайте, что говорит вам предупреждение:
Измените ваши данные либо X.reshape(-1, 1), если ваши данные имеют один элемент/столбец, и X.reshape(1, -1), если он содержит один образец.
Для вашего примера типа (если у вас есть более одного объекта/столбца):
temp = temp.reshape(1,-1)
Для одной функции/столбца:
temp = temp.reshape(-1,1)
Ответ 2
Хорошо, похоже, что предупреждение говорит вам, что делать.
Как часть sklearn.pipeline
равномерных интерфейсов этапов, как правило:
-
когда вы видите 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)
Ответ 3
Это может помочь
temp = ([[1,2,3,4,5,6,.....,7]])
Ответ 4
.values.reshape(-1,1)
будет приниматься без предупреждений/предупреждений
.reshape(-1,1)
будет принята, но с дегустацией войны
Ответ 5
Я столкнулся с той же проблемой и получил такое же предупреждение об отказе. Когда я получил сообщение, я использовал массив numpy [23, 276]. Я попробовал переделать его в соответствии с предупреждением и в конечном итоге оказаться в никуда. Затем я выбираю каждую строку из массива numpy (так как я все равно повторяю ее) и назначил ее переменной списка. Он работал без предупреждения.
array = []
array.append(temp[0])
Затем вы можете использовать объект списка python (здесь "array" ) в качестве входа в функции sk-learn. Не самое эффективное решение, но работало для меня.
Ответ 6
Вы всегда можете изменить, как:
temp = [1,2,3,4,5,5,6,7]
temp = temp.reshape(len(temp), 1)
Потому что главная проблема, когда ваш, temp.shape это: (8,)
и вам нужно (8,1)