此 GitHub 存储库包含我的 Udacity 机器学习工程师纳米学位的最终项目。
这是股票价格预测器。它使用亚马逊的 DeepAR 算法创建模型并预测未来的股票价格。该存储库包含一个 Jupiter Notebook,用于收集数据、训练模型并对其进行评估。该笔记本还包含一个 Web 应用程序,可以部署该应用程序来预测未来最多 30 个交易日的股票价格。
要运行此 Web 应用程序,您必须首先创建并部署模型。开始之前有一些要求。
您必须注册 RapidAPI。创建帐户并订阅雅虎财经 API。您将需要 Jupiter Notebook 中的RAPIDAPI-HOST
和RAPIDAPI-KEY
来训练您的模型。
您还必须拥有 Amazon Web Services (AWS) 帐户。创建账户并从 AWS 控制台导航到 Amazon SageMaker。创建一个笔记本实例。在创建笔记本实例页面上,单击Git 存储库并选择仅将公共 Git 存储库克隆到此笔记本实例。在Git 存储库 URL中,输入https://github.com/scliff108/Udacity-ML-Capstone-Project.git
。最后,创建笔记本实例。
设置笔记本实例后,打开stock-forecasting-deepar
笔记本。请务必在标题“加载和浏览数据”下的load_historical_data
函数中输入您的RAPIDAPI-HOST
和RAPIDAPI-KEY
。
之后,您可以运行 Notebook 中的所有单元格。大约 15 分钟后,您应该生成并评估模型。
现在您已经训练了模型,您将需要创建一个 Lambda 函数以将数据发送到 SageMaker 端点并返回结果。将以下代码复制并粘贴到 AWS 上的 Lambda 函数中。您需要在提供的代码中输入您的S3 存储桶和预测器端点名称。
import boto3
import os
import sys
import json
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucket = ''# YOUR BUCKET HERE
key = 'lambda-deepar-stock-forecasting/test/test.json'
obj = s3.Object(bucket, key)
file_content = obj.get()['Body'].read().decode('utf-8')
instances = file_content.splitlines()
instances = [json.loads(i) for i in instances]
for i in instances:
for _ in range(30):
i['dynamic_feat'][0].append(i['dynamic_feat'][0][-1])
configuration = {'num_samples': 30,
'output_types': ['mean'],
}
request_data = {'instances': instances,
'configuration': configuration
}
payload = json.dumps(request_data).encode('utf-8')
runtime = boto3.Session().client('sagemaker-runtime')
response = runtime.invoke_endpoint(EndpointName = '', # YOUR ENDPOINT NAME HERE
ContentType = 'application/json',
Body = payload
)
result = response['Body'].read().decode('utf-8')
return {
'statusCode': 200,
'body': result
}
不幸的是,Lambda 只能处理这么多数据,因此我们必须向 DeepAR 预测器提供比 S3 上更少的数据。为此,请打开lambda-data
笔记本。再次输入您的 RapidAPI 信息并运行所有单元。这将上传足够小的数据供 Lambda 处理。
最后,我们可以设置 API Gateway 来触发我们创建的 Lambda 函数并获取股票价格预测。为此,请创建一个新的 POST 方法并确保选择 Lambda 函数。然后,在文本框中输入 Lambda 函数的名称并单击保存。最后,单击操作下拉列表以部署 API。
您将需要调用 URL来部署您的 Web 应用程序。
现在您已经有了可用的 API,您可以开始在 Web 应用程序中使用它。我制作了一个非常简单的 HTML 和 JavaScript 文件来与 API 交互。从此 GitHub 存储库下载网站文件夹,在文件中指定的位置添加您的公共 API URL 并打开它。当您单击“获取数据”按钮时,您应该会在手风琴中看到 20 只股票。单击股票即可查看预测价格。
您的网络应用程序启动时将如下所示。
单击“获取数据”按钮后,您的网络应用程序将如下所示。
单击股票后,您的网络应用程序将如下所示。