У меня возникла проблема при попытке пройти курс Deep Learning AZ по Удеми. Следуя указаниям инструктора, мы создали нейронную сеть, которая предсказывает, собирается ли клиент покинуть банк на основе данных, найденных в CSV.
Поставляемый код работает нормально, здесь он извлекает данные из CSV с последующим применением LabelEncoder и ColumnTransformer для получения данных в правильной форме. Ниже приведена строка, которая появляется в CSV
RowNumber,CustomerId,Surname,CreditScore,Geography,Gender,Age,Tenure,Balance,NumOfProducts,HasCrCard,IsActiveMember,EstimatedSalary,Exited
1, 15634602, Hargrave, 619, France, Female, 42, 2, 0, 1, 1, 1, 101348.88, 1
, которая выборочно читается с использованием следующего
dataset = pd.read_csv('Churn_Modelling.csv')
X = dataset.iloc[:, 3:13].values # from column 3 to 12
X теперь является массивом объектов 10000 x 10. Вот как выглядит строка 0
In [206]:X[0]
Out[206]:
array([619, 'France', 'Female', 42, 2, 0.0, 1, 1, 1, 101348.88],
dtype=object)
Теперь она закодирована
# Encoding categorical data
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [1])], remainder='passthrough')
X = np.array(columnTransformer.fit_transform(X), dtype = np.str)
X = X[:, 1:]
Теперь у нас есть массив 10000 x 11 numpy, где каждая запись имеет следующий вид
array(['0.0', '0.0', '619', '0', '42', '2', '0.0', '1', '1', '1',
'101348.88'], dtype='<U9')
все это хорошо, и работает с классификатором, который мы построим позже в коде. Как в качестве задания, мы должны были выяснить, как запустить модель на новой единой строке входных данных. Преподаватель курса использует массив, который уже прошел процесс форматирования / кодирования / преобразования, описанный выше. Но я пытаюсь понять, как это сделать, следуя той же процедуре, что и остальные данные, но все становится странно.
Когда я впервые загружаю в одну строку данных, у меня есть то же число столбцов, что и X после чтения из CSV, которое составляет 10 столбцов, и тот же тип, который является объектом numpy массив
single = np.array([[600, 'France', 'Male', 40, 3, 60000, 2, 1, 1, 50000]], dtype=np.object)
Теперь я go выполнил те же шаги, что и при подготовке X
single[:, 2] = labelencoder_X_2.fit_transform(single[:, 2])
single = np.array(columnTransformer.fit_transform(single), dtype = np.str)
single = single[:, 1:]
Теперь у меня остался массив, который составляет всего 1x9, см. здесь
In [208]: single[0]
Out[208]:
array(['600', '0', '40', '3', '60000', '2', '1', '1', '50000'],
dtype='<U5')
Как видите, это короткие две записи в начале, которые были у данных X. Удаление single = single[:, 1:]
делает так, что у меня всего один столбец меньше X, но все же я не уверен, почему я должен сделать это для single
, когда число столбцов, с которых мы начинаем, одинаково. Я не понимаю, как это происходит. Та же самая процедура на X дает мне строки размером 1x11. Я часами смотрю на это и не могу понять, в чем разница между двумя наборами данных (single
и X
), кроме количества строк, поэтому я не понять, почему у меня остались массивы с совершенно другим количеством столбцов.
Я уверен, что здесь есть что-то, чего я не вижу или не замечаю, но у меня нет идей по этому поводу. Что я делаю не так при подготовке этих данных? Любая помощь будет принята с благодарностью, заранее спасибо