为了账号安全,请及时绑定邮箱和手机立即绑定

AWS Sagemaker:传递给 Estimator 的数据格式是什么?

AWS Sagemaker:传递给 Estimator 的数据格式是什么?

墨色风雨 2022-07-05 19:40:59
我正在关注 Sagemaker 的k_nearest_neighbors_covtype示例,并且对他们将训练数据传递给模型的方式有一些疑问。对于那些没有看过的人,他们从互联网加载数据,运行一些预处理,然后以某种二进制格式(protobuf/recordIO)将其保存到 S3 存储桶中。他们的代码如下:import numpy as npimport boto3import osimport sagemakerimport ioimport sagemaker.amazon.common as smac# preprocessraw_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 splitnp.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 bufferbuf = io.BytesIO()smac.write_numpy_to_dense_tensor(buf, train_features, train_labels)buf.seek(0)# upload to s3bucket = 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 数据帧加载数据。我的问题:假设在预处理后我有一个以下格式的熊猫数据框(~10k 条记录):type         brown   green   red     yellowNAME                                       awfulbrown     0.00   33.33   33.33   33.33candyapple     0.00    0.00  100.00    0.00grannysmith    2.96   95.19    0.00    0.72我想将此传递给最近的邻居,并根据type(颜色)权重将其映射/聚类,每个点都用NAME. 例如,点将candyapple位于red轴上的 100 处, 和 上的 0.00green处yellow。然后打算传递一组新的颜色坐标(例如,red: 90.09, yellow: 0.33, green: 9.58将 return candyapple)并将单个最近邻居返回到该点(我们存储在记录中的那些值的最接近的近似值)。在将此数据帧传递给 Sagemaker 的 KNN 模型之前,我需要对其执行哪些进一步的预处理?传递数据框的最简单方法是什么?有没有办法将它直接传递给模型?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

您不能将数据框直接传递给内置的 KNN 算法。它支持两种输入训练格式:CSV 或 RecordIO protobuf:https ://docs.aws.amazon.com/sagemaker/latest/dg/kNN-in-formats.html 。


后者效率更高,因此是我们推荐的。


在您的情况下,您只需使用 to_numpy() 将数据框转换为 numpy 数组,然后您可以重用笔记本中的代码。


import pandas as pd

index = [1, 2, 3, 4]

a = ['a', 'b', 'c', 'd']

b = [1, 2, 3, 4]

df = pd.DataFrame({'A': a, 'B': b}, index=index)

n = df.to_numpy()

print(n)

type(n)

您使用的笔记本实际上是在展示如何使用 KNN 进行分类。这个集群示例可能更容易理解:https ://data.solita.fi/machine-learning-building-blocks-in-aws-sagemaker/


查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信