Получение ошибки на StandardScalar Fit_Transform

 import numpy as np
 import matplotlib.pyplot as plt
 import pandas as pd

 dataset = pd.read_csv('Position_Salaries.csv')
 X = dataset.iloc[:, 1:2].values
 y = dataset.iloc[:, 2].values

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X)
y = sc_y.fit_transform(y)

Хорошо, вот в чем проблема. как X, так и y - одноэлементные и имеют один столбец. Как видите, X - это матрица. а y - вектор X = dataset.iloc [:, 1: 2] .values ​​y = dataset.iloc [:, 2] .values

Теперь, когда я запускаю y = sc_y.fit_transform(y), я получаю сообщение об ошибке, что это одномерный массив. И если я изменю y = dataset.iloc[:, 2:3].values, сделав его 2D-массивом. Но я хочу, чтобы он оставался 1D-массивом, поскольку он является зависимой переменной, и хочу, чтобы он оставался таким. Также я решил ранее различные примеры, в которых мне приходилось масштабировать аналогичные данные, и это не дало мне такой ошибки. Не знаю, почему это дает мне сейчас. Более того, я смотрю видео во время кодирования, и в видео все то же самое, но он не получает никаких ошибок.


person Vikas Kyatannawar    schedule 06.12.2017    source источник


Ответы (3)


StandardScaler предназначен для работы с функциями, а не с метками или целевыми данными. Следовательно, работает только с 2-мерными данными. Пожалуйста, смотрите здесь документацию:

Что вы можете сделать, так это использовать функцию масштабирования. StandardScaler - это просто оболочка над этой функцией.

from sklearn.preprocessing import scale
y = scale(y)

Или, если вы хотите использовать StandarScaler, вам нужно преобразовать ваш y в двумерный массив следующим образом:

import numpy as np
y = np.array(y).reshape(-1,1)
y = sc_y.fit_transform(y)
person Vivek Kumar    schedule 06.12.2017

StandardScaler используется для работы с 1d-массивами, но с DeprecationWarning: передача 1d-массивов в качестве данных устарела в версии 0.17 и вызовет ValueError в 0.19. Измените форму данных с помощью X.reshape (-1,1), если ваши данные имеют одну функцию, или X.reshape (1, -1), если они содержат один образец.

Итак, следуя решению, которое вы ищете:

sc_y = StandardScaler()
y = np.array(y).reshape(-1,1)
y = sc_y.fit_transform(y)
y = y.flatten()
person Isaac Dm    schedule 03.10.2019
comment
Не нужно указывать или автора вопроса, ваш ответ уже к нему. - person Edvaldo Silva; 03.10.2019

Вы можете использовать flatten, чтобы получить 1D-массив из 2D-массива:

y.flatten()
person O.Suleiman    schedule 06.12.2017