用MindSDB和MongoDB预测黄金价格
#教程 #ai #mongodb #mindsdb

介绍

本教程将显示如何使用MindSDB根据存储在MongoDB数据库中的历史数据来预测黄金价格。

什么是MindsDB?

MindSDB是一种开源技术,可在数据库中添加机器学习功能,从而通过标准查询对标准数据库进行预测。

什么是mongodb?

MongoDB是一个流行的非关系文档数据库,可为JSON样存储提供支持。

Image showing how MindsDB works. On the left side, an application which queries a traditional database. On the right, an application which queries MindsDB, which consults a traditional database.

通过使用这两个,我们可以在大数据库中预测数据值。在本教程中,我们将使用this Kaggle dataset预测金价。


设置一切

MindSDB都可以使用其云服务(cloud.mindsdb.com)或本地提供,因此MongoDB也是如此,在本地和其托管版本MongoDB Atlas中可用。

在本教程中,我将专注于在本地Docker容器中同时运行MongoDB和MindSDB,尽管它与云版本的工作方式非常相似 - 您可以查看the documentation

要求

  • Docker环境。有关什么是Docker以及如何使用它的介绍,请结帐this tutorial
  • docker-compose,创建和运行多容器Docker应用程序
  • mongosh client,针对MongoDB实例进行查询。

创建Docker容器

首先,我们将创建Docker容器。创建一个文件夹并创建一个名为docker-compose.yml的文件:

这将创建两个容器:MongoDB和MindSDB。第一个使用默认身份验证,每个人都可以访问它。尽管这应该永远不会公开可用,但这只是一种首次方法,暂时会做到。我们还使用两个容器之间的网络桥梁来允许它们之间的连接。

为了使数据持续跨重新启动,在第一个名为database的文件夹中创建一个文件夹,该文件夹将由两个容器安装并保存数据。

到目前为止,我们应该拥有以下目录结构:

.
└── gold-price-estimation/
    ├── docker-compose.yml
    └── database/
        └── ...

要启动容器,打开终端,进入gold-price-estimation文件夹内并运行docker-compose up -d(根据配置,您可能需要具有超级用户特权)。现在,您的系统中有MindSDB和MongoDB运行!

通过去127.0.0.1:47334检查一下。您应该找到MindDB的Web UI。

Screenshot of MindsDB's web UI, featuring a large text box for running SQL queries

如果某事无法解决,请仔细检查以前的步骤,如果它持续下去,请随时在下面发表评论。

导入数据库中的数据

下载the .csv file from Kaggle后,我们需要通过运行docker cp file_name.csv mongodb:/file_name.csv将文件从主机复制到容器。

要导入数据库,我们需要首先使用docker exec -it mongodb bash访问Docker容器,然后我们将使用BASH命令行呈现。然后,运行:

mongoimport --type csv -d golddb -c price --headerline --drop gold.csv

在这里,golddb是数据库的名称,price是表名。

将容器带有exit,并检查数据是否正确导入:

mongosh --host mongodb --port 27017
USE golddb;
db.price.find({}); 

这应该输出数据库中的第一个条目。

创建从MindSDB到MongoDB的连接

我们需要指定MindSDB的数据库。为此,运行:

mongosh --host mindsdb --port 47336

在客户端,执行:

USE mindsdb;
db.databases.insertOne({ name: "mongo_gold", engine: "mongodb", connection_args: { "port": 27017, "host": "mongodb", "database": "golddb" } })

这样,我们首先将客户端连接到MindSDB的数据库。在其中,我们选择数据库mindsdb并插入带有连接参数的条目:

  • mongo_gold:MindSDB识别连接的名称
  • mongodb:主机的URL/IP,在这种情况下,我们的Docker容器的名称。

此命令应返回

{
  acknowledged: true,
  insertedId: ObjectId("635433076e11662dcd20042c")
}

,告诉我们它已保存了配置。运行
db.databases.find()通过返回
来确认

{
    name: 'mongo_gold',
    database_type: 'mongodb',
    host: 'mongodb',
    port: '27017',
    user: null
}

剩下的就是创建预测变量!

创建预测指标

仍然在客户端内部,我们运行:

db.predictors.insert({ name: "mongo_gold_p", predict: "Value", connection: "mongo_gold", "select_data_query": "db.gold.find()" });

这些参数是什么意思?

  • name:MindSDB识别预测变量的名称
  • predict:数据库中的列的名称,我们要预测的值
  • connection:我们先前创建的名称是由MindSDB识别连接
  • 的名称
  • select_data_query:这允许使用标准MongoDB查询在数据库中指定特定行。对于此示例,我们将使用所有行。

我们应该收到一个公认的消息,然后MindSDB将开始致力于创建预测因子。您可以使用以下方式检查模型生成的状态

db.predictors.find({name: "model_name"});

测试!

一旦状态为complete,就可以准备回答查询。

继续预测一个值:

USE mongo_gold; 
db.mongo_gold_p.find({Date: "1975-07-01"})

如果它返回预测(以及一些表达方式,例如信心等 - 完整说明in the documentation),恭喜!

结论

您已经成功创建了一个MongoDB数据库,该数据库由于MindSDB的力量扩展,能够根据所提供的数据生成预测。

有关更多信息,make sure to check out the docs

感谢您阅读我的教程,如果它对您有用,请记住给它类似的话并与您的朋友分享!另外,查看我的Github profile