Amazon SageMaker功能商店 提供端到端解决方案来自动化机器学习 (ML) 的特征工程。 对于许多机器学习用例,日志文件、传感器读数或交易记录等原始数据需要转换为有意义的特征,并针对模型训练进行优化。
特征质量对于确保高度准确的 ML 模型至关重要。 通常需要使用聚合、编码、标准化和其他操作将原始数据转换为特征,并且可能需要付出巨大的努力。 工程师必须使用 Python 或 Spark 为每个用例手动编写自定义数据预处理和聚合逻辑。
这种无差别的繁重工作是繁琐、重复且容易出错的。 这 SageMaker 特征存储特征处理器 通过自动将原始数据转换为适合批量训练 ML 模型的聚合特征来减轻这种负担。 它允许工程师提供简单的数据转换功能,然后在 Spark 上大规模运行它们并管理底层基础设施。 这使得数据科学家和数据工程师能够专注于特征工程逻辑而不是实现细节。
在这篇文章中,我们演示了汽车销售公司如何使用特征处理器通过三个步骤将原始销售交易数据转换为特征:
- 数据转换的本地运行。
- 使用 Spark 进行大规模远程运行。
- 通过管道进行操作。
我们展示了 SageMaker Feature Store 如何提取原始数据,使用 Spark 远程运行特征转换,并将生成的聚合特征加载到 功能组。 这些工程特征随后可用于训练机器学习模型。
对于此用例,我们了解 SageMaker Feature Store 如何帮助将原始汽车销售数据转换为结构化特征。 这些功能随后用于获得以下见解:
- 2010年红色敞篷车的平均价格和最高价格
- 具有最佳里程与价格的车型
- 历年来新车与二手车的销售趋势
- 不同地点的平均建议零售价存在差异
我们还了解了 SageMaker 特征存储管道如何随着新数据的出现而保持功能更新,从而使公司能够随着时间的推移不断获得见解。
解决方案概述
我们使用数据集 car_data.csv
,其中包含公司销售的二手车和新车的型号、年份、状态、里程、价格和建议零售价等规格。 以下屏幕截图显示了数据集的示例。
解决方案笔记本 feature_processor.ipynb
包含以下主要步骤,我们将在本文中对此进行解释:
- 创建两个功能组:一个称为
car-data
用于原始汽车销售记录,另一个称为 car-data-aggregated
汇总汽车销售记录。
- 使用
@feature_processor
装饰器将数据加载到汽车数据特征组中 亚马逊简单存储服务 (亚马逊S3)。
- 运行
@feature_processor code
作为 Spark 应用程序远程聚合数据。
- 通过操作特征处理器 SageMaker 管道 并安排运行。
- 探索特征处理管道和 血统 in 亚马逊SageMaker Studio.
- 使用聚合特征来训练 ML 模型。
先决条件
要学习本教程,您需要具备以下条件:
对于这篇文章,我们参考了以下内容 笔记本,演示了如何使用 SageMaker Python SDK 开始使用功能处理器。
创建功能组
要创建功能组,请完成以下步骤:
- 创建功能组定义
car-data
如下:
# Feature Group - Car Sales CAR_SALES_FG_NAME = "car-data"
CAR_SALES_FG_ARN = f"arn:aws:sagemaker:{region}:{aws_account_id}:feature-group/{CAR_SALES_FG_NAME}"
CAR_SALES_FG_ROLE_ARN = offline_store_role
CAR_SALES_FG_OFFLINE_STORE_S3_URI = f"s3://{s3_bucket}/{s3_offline_store_prefix}"
CAR_SALES_FG_FEATURE_DEFINITIONS = [
FeatureDefinition(feature_name="id", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="model", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="model_year", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="status", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="mileage", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="price", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="msrp", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="ingest_time", feature_type=FeatureTypeEnum.FRACTIONAL),
]
这些特征对应于中的每一列 car_data.csv
数据集(Model
, Year
, Status
, Mileage
, Price
及 MSRP
).
- 添加记录标识符
id
和活动时间 ingest_time
到功能组:
CAR_SALES_FG_RECORD_IDENTIFIER_NAME = "id"
CAR_SALES_FG_EVENT_TIME_FEATURE_NAME = "ingest_time"
- 创建功能组定义
car-data-aggregated
如下:
# Feature Group - Aggregated Car SalesAGG_CAR_SALES_FG_NAME = "car-data-aggregated"
AGG_CAR_SALES_FG_ARN = (
f"arn:aws:sagemaker:{region}:{aws_account_id}:feature-group/{AGG_CAR_SALES_FG_NAME}"
)
AGG_CAR_SALES_FG_ROLE_ARN = offline_store_role
AGG_CAR_SALES_FG_OFFLINE_STORE_S3_URI = f"s3://{s3_bucket}/{s3_offline_store_prefix}"
AGG_CAR_SALES_FG_FEATURE_DEFINITIONS = [
FeatureDefinition(feature_name="model_year_status", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="avg_mileage", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="max_mileage", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="avg_price", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="max_price", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="avg_msrp", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="max_msrp", feature_type=FeatureTypeEnum.STRING),
FeatureDefinition(feature_name="ingest_time", feature_type=FeatureTypeEnum.FRACTIONAL),
]
对于聚合功能组,功能包括车型年份状态、平均里程、最大里程、平均价格、最高价格、平均建议零售价、最高建议零售价和摄取时间。 我们添加记录标识符 model_year_status
和活动时间 ingest_time
到这个功能组。
- 现在,创建
car-data
功能组:
# Create Feature Group - Car sale records.
car_sales_fg = FeatureGroup(
name=CAR_SALES_FG_NAME,
feature_definitions=CAR_SALES_FG_FEATURE_DEFINITIONS,
sagemaker_session=sagemaker_session,
) create_car_sales_fg_resp = car_sales_fg.create(
record_identifier_name=CAR_SALES_FG_RECORD_IDENTIFIER_NAME,
event_time_feature_name=CAR_SALES_FG_EVENT_TIME_FEATURE_NAME,
s3_uri=CAR_SALES_FG_OFFLINE_STORE_S3_URI,
enable_online_store=True,
role_arn=CAR_SALES_FG_ROLE_ARN,
)
- 创建
car-data-aggregated
功能组:
# Create Feature Group - Aggregated car sales records.
agg_car_sales_fg = FeatureGroup(
name=AGG_CAR_SALES_FG_NAME,
feature_definitions=AGG_CAR_SALES_FG_FEATURE_DEFINITIONS,
sagemaker_session=sagemaker_session,
) create_agg_car_sales_fg_resp = agg_car_sales_fg.create( record_identifier_name=AGG_CAR_SALES_FG_RECORD_IDENTIFIER_NAME, event_time_feature_name=AGG_CAR_SALES_FG_EVENT_TIME_FEATURE_NAME,
s3_uri=AGG_CAR_SALES_FG_OFFLINE_STORE_S3_URI,
enable_online_store=True,
role_arn=AGG_CAR_SALES_FG_ROLE_ARN,
)
您可以导航到下面的 SageMaker Feature Store 选项 时间 在 SageMaker Studio 上 主页 菜单以查看功能组。
使用@feature_processor装饰器加载数据
在本节中,我们对原始输入数据进行本地转换(car_data.csv
)从 Amazon S3 进入 car-data
使用特征存储特征处理器的特征组。 这种初始本地运行允许我们在远程运行之前进行开发和迭代,并且如果需要更快的迭代,可以在数据样本上完成。
随着 @feature_processor
装饰器,您的转换函数在 Spark 运行时环境中运行,其中提供给函数的输入参数及其返回值是 Spark DataFrame。
- 安装 特征处理器SDK 来自 SageMaker Python 开发工具包 及其附加功能使用以下命令:
pip install sagemaker[feature-processor]
转换函数中输入参数的数量必须与在 @feature_processor
装饰师。 在这种情况下, @feature_processor
装饰者有 car-data.csv
作为输入和 car-data
特征组作为输出,表明这是一个批处理操作 target_store
as OfflineStore
:
from sagemaker.feature_store.feature_processor import (
feature_processor,
FeatureGroupDataSource,
CSVDataSource,
) @feature_processor(
inputs=[CSVDataSource(RAW_CAR_SALES_S3_URI)],
output=CAR_SALES_FG_ARN,
target_stores=["OfflineStore"],
)
- 定义
transform()
函数来转换数据。 该函数执行以下操作:
- 将列名转换为小写。
- 将事件时间添加到
ingest_time
列。
- 删除标点符号并用 NA 替换缺失值。
def transform(raw_s3_data_as_df):
"""Load data from S3, perform basic feature engineering, store it in a Feature Group"""
from pyspark.sql.functions import regexp_replace
from pyspark.sql.functions import lit
import time transformed_df = (
raw_s3_data_as_df.withColumn("Price", regexp_replace("Price", "$", ""))
# Rename Columns
.withColumnRenamed("Id", "id")
.withColumnRenamed("Model", "model")
.withColumnRenamed("Year", "model_year")
.withColumnRenamed("Status", "status")
.withColumnRenamed("Mileage", "mileage")
.withColumnRenamed("Price", "price")
.withColumnRenamed("MSRP", "msrp")
# Add Event Time
.withColumn("ingest_time", lit(int(time.time())))
# Remove punctuation and fluff; replace with NA
.withColumn("mileage", regexp_replace("mileage", "(,)|(mi.)", ""))
.withColumn("mileage", regexp_replace("mileage", "Not available", "NA"))
.withColumn("price", regexp_replace("price", ",", ""))
.withColumn("msrp", regexp_replace("msrp", "(^MSRPs$)|(,)", ""))
.withColumn("msrp", regexp_replace("msrp", "Not specified", "NA"))
.withColumn("msrp", regexp_replace("msrp", "$d+[a-zA-Zs]+", "NA"))
.withColumn("model", regexp_replace("model", "^dddds", ""))
)
- 调用
transform()
函数将数据存储在 car-data
功能组:
# Execute the FeatureProcessor
transform()
输出显示数据已成功摄取到汽车数据特征组中。
输出 transform_df.show()
功能如下:
INFO:sagemaker:Ingesting transformed data to arn:aws:sagemaker:us-west-2:416578662734:feature-group/car-data with target_stores: ['OfflineStore'] +---+--------------------+----------+------+-------+--------+-----+-----------+
| id| model|model_year|status|mileage| price| msrp|ingest_time|
+---+--------------------+----------+------+-------+--------+-----+-----------+
| 0| Acura TLX A-Spec| 2022| New| NA|49445.00|49445| 1686627154|
| 1| Acura RDX A-Spec| 2023| New| NA|50895.00| NA| 1686627154|
| 2| Acura TLX Type S| 2023| New| NA|57745.00| NA| 1686627154|
| 3| Acura TLX Type S| 2023| New| NA|57545.00| NA| 1686627154|
| 4|Acura MDX Sport H...| 2019| Used| 32675 |40990.00| NA| 1686627154|
| 5| Acura TLX A-Spec| 2023| New| NA|50195.00|50195| 1686627154|
| 6| Acura TLX A-Spec| 2023| New| NA|50195.00|50195| 1686627154|
| 7| Acura TLX Type S| 2023| New| NA|57745.00| NA| 1686627154|
| 8| Acura TLX A-Spec| 2023| New| NA|47995.00| NA| 1686627154|
| 9| Acura TLX A-Spec| 2022| New| NA|49545.00| NA| 1686627154|
| 10|Acura Integra w/A...| 2023| New| NA|36895.00|36895| 1686627154|
| 11| Acura TLX A-Spec| 2023| New| NA|48395.00|48395| 1686627154|
| 12|Acura MDX Type S ...| 2023| New| NA|75590.00| NA| 1686627154|
| 13|Acura RDX A-Spec ...| 2023| New| NA|55345.00| NA| 1686627154|
| 14| Acura TLX A-Spec| 2023| New| NA|50195.00|50195| 1686627154|
| 15|Acura RDX A-Spec ...| 2023| New| NA|55045.00| NA| 1686627154|
| 16| Acura TLX Type S| 2023| New| NA|56445.00| NA| 1686627154|
| 17| Acura TLX A-Spec| 2023| New| NA|47495.00|47495| 1686627154|
| 18| Acura TLX Advance| 2023| New| NA|52245.00|52245| 1686627154|
| 19| Acura TLX A-Spec| 2023| New| NA|50595.00|50595| 1686627154|
+---+--------------------+----------+------+-------+--------+-----+-----------+
only showing top 20 rows
我们已经成功地转换了输入数据并将其摄取到 car-data
功能组。
远程运行@feature_processor代码
在本节中,我们将演示使用以下命令作为 Spark 应用程序远程运行特征处理代码: @remote
前面描述过的装饰器。 我们使用 Spark 远程运行特征处理以扩展到大型数据集。 Spark提供集群上的分布式处理来处理对于单机来说太大的数据。 这 @remote
装饰器将本地 Python 代码作为单节点或多节点 SageMaker 训练作业运行。
- 使用
@remote
装饰器以及 @feature_processor
装饰器如下:
@remote(spark_config=SparkConfig(), instance_type = "ml.m5.xlarge", ...)
@feature_processor(inputs=[FeatureGroupDataSource(CAR_SALES_FG_ARN)],
output=AGG_CAR_SALES_FG_ARN, target_stores=["OfflineStore"], enable_ingestion=False )
spark_config
参数表示这是作为 Spark application
。 SparkConfig 实例配置 Spark 配置和依赖项。
- 定义
aggregate()
函数使用 PySpark SQL 和用户定义函数 (UDF) 聚合数据。 该函数执行以下操作:
- CONCATENATE
model
, year
及 status
创建 model_year_status
.
- 取平均值
price
创建 avg_price
.
- 取最大值
price
创建 max_price
.
- 取平均值
mileage
创建 avg_mileage
.
- 取最大值
mileage
创建 max_mileage
.
- 取平均值
msrp
创建 avg_msrp
.
- 取最大值
msrp
创建 max_msrp
.
- 通过...分组
model_year_status
.
def aggregate(source_feature_group, spark):
"""
Aggregate the data using a SQL query and UDF.
"""
import time
from pyspark.sql.types import StringType
from pyspark.sql.functions import udf @udf(returnType=StringType())
def custom_concat(*cols, delimeter: str = ""):
return delimeter.join(cols) spark.udf.register("custom_concat", custom_concat) # Execute SQL string.
source_feature_group.createOrReplaceTempView("car_data")
aggregated_car_data = spark.sql(
f"""
SELECT
custom_concat(model, "_", model_year, "_", status) as model_year_status,
AVG(price) as avg_price,
MAX(price) as max_price,
AVG(mileage) as avg_mileage,
MAX(mileage) as max_mileage,
AVG(msrp) as avg_msrp,
MAX(msrp) as max_msrp,
"{int(time.time())}" as ingest_time
FROM car_data
GROUP BY model_year_status
"""
) aggregated_car_data.show() return aggregated_car_data
- 运行
aggregate()
函数,它创建一个 SageMaker 训练作业来运行 Spark 应用程序:
# Execute the aggregate function
aggregate()
因此,SageMaker 会为之前定义的 Spark 应用程序创建一个训练作业。 它将使用以下命令创建 Spark 运行时环境 sagemaker-spark-processing image
.
我们在这里使用 SageMaker 训练作业来运行 Spark 特征处理应用程序。 借助 SageMaker Training,您可以使用温池将启动时间缩短至 1 分钟或更短,这在 SageMaker Processing 中不可用。 这使得 SageMaker Training 能够更好地针对短批量作业(例如启动时间很重要的特征处理)进行优化。
- 要查看详细信息,请在 SageMaker 控制台上选择 培训工作 下 产品培训 在导航窗格中,然后选择名称为
aggregate-<timestamp>
.
输出 总计的() 函数生成遥测代码。 在输出中,您将看到聚合数据,如下所示:
+--------------------+------------------+---------+------------------+-----------+--------+--------+-----------+
| model_year_status| avg_price|max_price| avg_mileage|max_mileage|avg_msrp|max_msrp|ingest_time|
+--------------------+------------------+---------+------------------+-----------+--------+--------+-----------+
|Acura CL 3.0_1997...| 7950.0| 7950.00| 100934.0| 100934 | null| NA| 1686634807|
|Acura CL 3.2 Type...| 6795.0| 7591.00| 118692.5| 135760 | null| NA| 1686634807|
|Acura CL 3_1998_Used| 9899.0| 9899.00| 63000.0| 63000 | null| NA| 1686634807|
|Acura ILX 2.0L Te...| 14014.125| 18995.00| 95534.875| 89103 | null| NA| 1686634807|
|Acura ILX 2.0L Te...| 15008.2| 16998.00| 94935.0| 88449 | null| NA| 1686634807|
|Acura ILX 2.0L Te...| 16394.6| 19985.00| 97719.4| 80000 | null| NA| 1686634807|
|Acura ILX 2.0L w/...|14567.181818181818| 16999.00| 96624.72727272728| 98919 | null| NA| 1686634807|
|Acura ILX 2.0L w/...| 16673.4| 18995.00| 84848.6| 96637 | null| NA| 1686634807|
|Acura ILX 2.0L w/...|12580.333333333334| 14546.00|100207.33333333333| 95782 | null| NA| 1686634807|
|Acura ILX 2.0L_20...| 14565.375| 17590.00| 92941.125| 81842 | null| NA| 1686634807|
|Acura ILX 2.0L_20...| 14877.9| 9995.00| 99739.5| 89252 | null| NA| 1686634807|
|Acura ILX 2.0L_20...| 15659.5| 15660.00| 82136.0| 89942 | null| NA| 1686634807|
|Acura ILX 2.0L_20...|17121.785714285714| 20990.00| 78278.14285714286| 96067 | null| NA| 1686634807|
|Acura ILX 2.4L (A...| 17846.0| 21995.00| 101558.0| 85974 | null| NA| 1686634807|
|Acura ILX 2.4L Pr...| 16327.0| 16995.00| 85238.0| 95356 | null| NA| 1686634807|
|Acura ILX 2.4L w/...| 12846.0| 12846.00| 75209.0| 75209 | null| NA| 1686634807|
|Acura ILX 2.4L_20...| 18998.0| 18998.00| 51002.0| 51002 | null| NA| 1686634807|
|Acura ILX 2.4L_20...|17908.615384615383| 19316.00| 74325.38461538461| 89116 | null| NA| 1686634807|
|Acura ILX 4DR SDN...| 18995.0| 18995.00| 37017.0| 37017 | null| NA| 1686634807|
|Acura ILX 8-SPD_2...| 24995.0| 24995.00| 22334.0| 22334 | null| NA| 1686634807|
+--------------------+------------------+---------+------------------+-----------+--------+--------+-----------+
only showing top 20 rows
训练作业完成后,您应该看到以下输出:
06-13 05:40 smspark-submit INFO spark submit was successful. primary node exiting.
Training seconds: 153
Billable seconds: 153
通过 SageMaker 管道操作特征处理器
在本节中,我们将演示如何通过将功能处理器提升到 SageMaker 管道并调度运行来操作它。
- 首先,上传 转换代码.py 包含 Amazon S3 的功能处理逻辑的文件:
car_data_s3_uri = s3_path_join("s3://", sagemaker_session.default_bucket(),
'transformation_code', 'car-data-ingestion.py')
S3Uploader.upload(local_path='car-data-ingestion.py', desired_s3_uri=car_data_s3_uri)
print(car_data_s3_uri)
- 接下来,创建一个特征处理器管道 汽车数据管道 使用 .to_pipeline() 功能:
car_data_pipeline_name = f"{CAR_SALES_FG_NAME}-ingestion-pipeline"
car_data_pipeline_arn = fp.to_pipeline(pipeline_name=car_data_pipeline_name,
step=transform,
transformation_code=TransformationCode(s3_uri=car_data_s3_uri) )
print(f"Created SageMaker Pipeline: {car_data_pipeline_arn}.")
- 要运行管道,请使用以下代码:
car_data_pipeline_execution_arn = fp.execute(pipeline_name=car_data_pipeline_name)
print(f"Started an execution with execution arn: {car_data_pipeline_execution_arn}")
- 同样,您可以为聚合功能创建一个管道,称为
car_data_aggregated_pipeline
并开始跑步。
- 安排
car_data_aggregated_pipeline
每 24 小时运行一次:
fp.schedule(pipeline_name=car_data_aggregated_pipeline_name,
schedule_expression="rate(24 hours)", state="ENABLED")
print(f"Created a schedule.")
在输出部分,您将看到管道的 ARN 和管道执行角色以及计划详细信息:
{'pipeline_arn': 'arn:aws:sagemaker:us-west-2:416578662734:pipeline/car-data-aggregated-ingestion-pipeline',
'pipeline_execution_role_arn': 'arn:aws:iam::416578662734:role/service-role/AmazonSageMaker-ExecutionRole-20230612T120731',
'schedule_arn': 'arn:aws:scheduler:us-west-2:416578662734:schedule/default/car-data-aggregated-ingestion-pipeline',
'schedule_expression': 'rate(24 hours)',
'schedule_state': 'ENABLED',
'schedule_start_date': '2023-06-13T06:05:17Z',
'schedule_role': 'arn:aws:iam::416578662734:role/service-role/AmazonSageMaker-ExecutionRole-20230612T120731'}
- 要获取此帐户中的所有功能处理器管道,请使用
list_pipelines()
特征处理器上的功能:
输出将如下所示:
[{'pipeline_name': 'car-data-aggregated-ingestion-pipeline'},
{'pipeline_name': 'car-data-ingestion-pipeline'}]
我们已成功创建 SageMaker 特征处理器管道。
探索特征处理管道和 ML 沿袭
在 SageMaker Studio 中,完成以下步骤:
- 在 SageMaker Studio 控制台上 主页 菜单中选择 管道.
您应该看到创建了两个管道: car-data-ingestion-pipeline
和 car-data-aggregated-ingestion-pipeline
.
- 选择
car-data-ingestion-pipeline
.
它显示了运行详细信息 处决 标签。
- 要查看管道填充的功能组,请选择 功能商店 下 时间 并选择
car-data
.
您将看到我们在前面的步骤中创建的两个功能组。
- 选择
car-data
功能组。
您将在以下位置看到功能详细信息 特征 标签。
查看管道运行情况
要查看管道运行情况,请完成以下步骤:
- 点击 管道执行s 选项卡,选择
car-data-ingestion-pipeline
.
这将显示所有运行。
- 选择其中一个链接可查看运行的详细信息。
- 要查看沿袭,请选择沿袭。
完整的血统 car-data
显示输入数据源 car_data.csv
和上游实体。 血统为 car-data-aggregated
显示输入 car-data
功能组。
- 负载特性 然后选择 查询上游沿袭 on
car-data
和 car-data-ingestion-pipeline
查看所有上游实体。
完整的血统 car-data
功能组应类似于以下屏幕截图。
同样,血统为 car-aggregated-data
功能组应类似于以下屏幕截图。
SageMaker Studio 提供了一个单一环境来跟踪计划的管道、查看运行、探索沿袭以及查看功能处理代码。
平均价格、最高价格、平均里程等聚合特征 car-data-aggregated
特征组提供对数据本质的洞察。 您还可以使用这些功能作为数据集来训练模型来预测汽车价格或进行其他操作。 但是,训练模型超出了本文的范围,本文重点介绍用于特征工程的 SageMaker Feature Store 功能。
清理
不要忘记清理作为本文的一部分创建的资源,以避免产生持续费用。
- 通过以下方式禁用预定的管道
fp.schedule()
状态参数为的方法 Disabled
:
# Disable the scheduled pipeline
fp.schedule(
pipeline_name=car_data_aggregated_pipeline_name,
schedule_expression="rate(24 hours)",
state="DISABLED",
)
- 删除两个功能组:
# Delete feature groups
car_sales_fg.delete()
agg_car_sales_fg.delete()
驻留在 S3 存储桶和离线要素存储中的数据可能会产生费用,因此您应该删除它们以避免产生任何费用。
- 删除 S3 对象.
- 删除记录 从功能商店。
结论
在这篇文章中,我们演示了一家汽车销售公司如何使用 SageMaker 特征库特征处理器通过以下方式从其原始销售数据中获取有价值的见解:
- 使用 Spark 大规模摄取和转换批量数据
- 通过 SageMaker 管道实施特征工程工作流程
- 提供沿袭跟踪和单一环境来监控管道和探索功能
- 准备针对训练 ML 模型而优化的聚合特征
通过遵循这些步骤,该公司能够将以前无法使用的数据转换为结构化特征,然后可用于训练模型来预测汽车价格。 SageMaker Feature Store 使他们能够专注于功能工程而不是底层基础设施。
我们希望这篇文章可以帮助您使用 SageMaker 特征存储特征处理器从您自己的数据中解锁有价值的 ML 见解!
有关这方面的更多信息,请参阅 特征处理 以及 SageMaker 示例 Amazon SageMaker Feature Store:特征处理器简介.
作者简介
达瓦尔沙阿 是 AWS 的高级解决方案架构师,专门从事机器学习。 他非常关注数字原生业务,帮助客户利用 AWS 并推动其业务增长。 作为一名机器学习爱好者,Dhaval 热衷于创建有影响力的解决方案,从而带来积极的变化。 闲暇之余,他热爱旅行,珍惜与家人在一起的美好时光。
尼纳德·乔希 是 AWS 的高级解决方案架构师,帮助全球 AWS 客户在云中设计安全、可扩展且具有成本效益的解决方案,以解决他们复杂的现实业务挑战。 他在机器学习 (ML) 方面的工作涵盖了广泛的 AI/ML 用例,主要关注端到端 ML、自然语言处理和计算机视觉。 在加入 AWS 之前,Ninad 担任软件开发人员超过 12 年。 除了职业生涯之外,尼纳德还喜欢下棋和探索不同的策略。