python访问elasticsearch_如何⽤ElasticSearch进⾏机器学习前⾔
机器学习已经在现在的⼯业实践中得到了⼴泛的应⽤。作为强⼤搜索引擎的ElasticSearch也在6.3开始内置了对机器学习的⽀持。
ElasticSearch也在6.3开始内置了对机器学习的⽀持
概述
从应⽤⾓度来看,如果你有异常侦测和数据回归⽅⾯的需求,并且数据不需要特别处理,直接从es⾥就可以接⼊,可以选择Es内置的机器学习功能,这样⼜快⼜迅速。但是如果要借助更多的机器学习算法来进⾏建模,选择python的Eland模块进⾏机器学习就⽐较合适。下⾯会就这2种机器学习⽅式,从安装到应⽤进⾏⼀⼀介绍。
Es内置的机器学习功能
elasticsearch内置的机器学习
Kibana主页上加载样本Web⽇志数据集后,点击 查看数据> ML作业。
在机器学习应⽤程序中,当您kibana_sample_data_logs 在"数据可视化⼯具"或"异常检测"作业向导中选择索引模式时,使⽤其已知配置创建作业。选择 Kibana⽰例数据Web⽇志配置。
Kibana⽀持四种类型的机器学习作业
1. 在Kibana中,Single-metric jobs:数据分析仅在⼀个索引字段上执⾏
2. Multi-metric jobs:可以对多个索引字段执⾏数据分析; 但是,每个字段都分别进⾏分析
3. Advanced jobs:可以对多个索引字段执⾏数据分析。提供检测器和影响者的完整配置设置
4. Population jobs:对不常见数据(例如检测总体中的异常值)的分布⾏为的数据分析
现在以Single-metric jobs为例,学习如何使⽤Elasticsearch内建机器学习功能。
样本作业(low_request_rate)之⼀是单个度量异常检测作业。它具有使⽤该low_count功能和有限⼯作属性的单个检测器。如果要确定⽹站上的请求率何时显着下降,则可以使⽤这样的⼯作。
让我们从在Single Metric Viewer中查看这个简单的⼯作开始 :
该视图包含⼀个图表,该图表表⽰⼀段时间内的实际值和期望值。仅当作业已model_plot_config启⽤时才可⽤。它只能显⽰⼀个时间序列。
图表中的蓝线代表实际数据值。蓝⾊阴影区域表⽰期望值的界限。上限和下限之间的区域是模型最可能的值。如果某个值不在该区域内,则可以说它是异常的。
将时间选择器滑动到时间序列中包含红⾊异常数据点的部分。如果将⿏标悬停在该点上,则可以查看更多信息。除了异常侦测,es还可以⽅便的做数值回归预测。
python的eland模块
如果需要引⼊更多的机器学习模型训练⽅式,可以使⽤eland模块来和ElasticSearch协作。
为什么会有eland?
数据科学家通常不习惯NoSQL数据库引擎执⾏常见任务,甚⾄不依赖复杂的REST API进⾏分析。例如,使⽤Elasticsearch的低级python 客户端处理⼤量数据也不是那么直观,并且对于来⾃SWE以外领域的⼈来说,学习曲线有些陡峭。
尽管Elastic为增强⽤于分析和数据科学⽤例的ELK堆栈做出了巨⼤的努⼒,但它仍然缺乏与现有数据科学⽣态系统
(pandas,numpy,scikit-learn,PyTorch和其他流⾏的库)的便捷接⼝。
的推出是⼀个全新的Python Elasticsearch客户端和⼯具包,具有强⼤(且熟悉)的类似于pandas的API,⽤于分析,ETL和机器学习。
Eland在可能的情况下使⽤现有的Python API和数据结构来简化在numpy,pandas,scikit-learn和其Elasticsearch⽀持的等效项之间的切换。通常,数据驻留在Elasticsearch中,⽽不是内存中,这使Eland可以访问Elasticsearch中存储的⼤型数据集。Eland还提供了⼀些⼯具,可以从,和等通⽤库经过训练的机器学习模型上传到Elasticsearch中。
Eland使数据科学家可以有效地使⽤已经强⼤的Elasticsearch分析和ML功能,⽽⽆需对Elasticsearch及其许多复杂知识有深⼊的了解。
Elasticsearch的功能和概念被转换为更易于识别的设置。例如,Elasticsearch索引及其⽂档,映射和字段成为具有⾏和列的数据框,就像
我们以前在使⽤pandas时所看到的那样。
Eland的安装
可以使⽤Pip从安装Eland :
$ python -m pip安装eland
也可以使⽤Conda从安装Eland :快速排序python实现
$ conda安装-c conda-forge eland
Eland链接Es
Eland使⽤连接到Elasticsearch。该客户端⽀持⼀系列。可以将实例传递elasticsearch.Elasticsearch给Eland API,也可以将包含主机的字符串传递给以下对象:
import eland as ed# Connecting to an Elasticsearch instance running on 'localhost:9200'df = ed.DataFrame("localhost:9200", es_index_pattern="flights")# ⽤eland进⾏机器学习
eland.DataFrame在类似于Pandas的API中包装Elasticsearch索引,并将所有对数据的处理和过滤推迟到Elasticsearch⽽不是本地计算
机上进⾏。这意味着您可以从Jupyter Notebook中在Elasticsearch中处理⼤量数据,⽽不会导致计算机过载。
现在可以对xboost框架进⾏模型训练后,将模型部署到Elasticsearch,就可以直接实现对数据的预测了。⼀切很简单。
>>> from xgboost import XGBClassifier>>> from eland.ml import ImportedMLModel# Train and exercise an XGBoost ML model locally>>> xgb_model = XG 结束语
es作为搜索引擎,赋能了快速排序,搜索的场景。现在内置的机器学习模块为借助es搜索的场景⼜增加了异常侦测,回归预测等强⼤的ai能⼒,⽆疑为es在和其他搜索引擎竞争中增加了强⼤助⼒。对这⽅⾯有兴趣的读者,可以关注我们,持续获取这⽅⾯资讯。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。