Подтвердить что ты не робот

Предварительная обработка в 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]

Но я уверен, что есть лучшие способы.

4b9b3361

Ответ 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)