Я следую примеру k_nearest_neighbors_covtype
Sagemaker и у меня возникли вопросы о том, как они передают свои тренировочные данные в модель.
Для тех, кто их не видел, они загружают данные из inte rnet, запустите некоторую предварительную обработку, затем сохраните ее в корзину S3 в некотором двоичном формате (protobuf / recordIO). Их код выглядит следующим образом:
import numpy as np
import boto3
import os
import sagemaker
import io
import sagemaker.amazon.common as smac
# preprocess
raw_data_file = os.path.join(data_dir, "raw", "covtype.data.gz")
raw = np.loadtxt(raw_data_file, delimiter=',')
# split into train/test with a 90/10 split
np.random.seed(0)
np.random.shuffle(raw)
train_size = int(0.9 * raw.shape[0])
train_features = raw[:train_size, :-1]
train_labels = raw[:train_size, -1]
test_features = raw[train_size:, :-1]
test_labels = raw[train_size:, -1]
# write to buffer
buf = io.BytesIO()
smac.write_numpy_to_dense_tensor(buf, train_features, train_labels)
buf.seek(0)
# upload to s3
bucket = sagemaker.Session().default_bucket()
prefix = 'knn-blog-2018-04-17'
key = 'recordio-pb-data'
boto3.resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'train', key)).upload_fileobj(buf)
s3_train_data = 's3://{}/{}/train/{}'.format(bucket, prefix, key)
print('uploaded training data location: {}'.format(s3_train_data))
Позже, при вызове model.fit()
, они передают путь сегмента S3 в качестве набора обучающих данных.
У меня проблемы с пониманием того, как нужны данные быть структурированным из этого примера, и мне также интересно, если есть более простой способ загрузки данных непосредственно с pandas dataframe.
Мой вопрос:
Давайте скажем, после предварительной обработки у меня есть pandas фрейм данных в следующем формате (~ 10 тыс. записей):
type brown green red yellow
NAME
awfulbrown 0.00 33.33 33.33 33.33
candyapple 0.00 0.00 100.00 0.00
grannysmith 2.96 95.19 0.00 0.72
Я хочу передать это ближайшим соседям и получить карту / кластер на основе type
(цвет ) веса, с каждой точкой, помеченной NAME
. Например, точка candyapple
будет расположена на 100 на оси red
, на 0,00 на green
и yellow
. Намерение затем передать новый набор цветовых координат (например, red: 90.09, yellow: 0.33, green: 9.58
вернет candyapple
) и вернуть единственного ближайшего соседа к этой точке (самое близкое приближение тех значений, которые мы сохранили в наших записях).
Какую дополнительную предварительную обработку мне нужно выполнить на этом фрейме данных, прежде чем передать его в модель KNN Sagemaker?
Что самый простой способ передачи данных? Есть ли способ передать его непосредственно на модель?