本文作者:bright,物聯網公司大資料架構師。曾就職于暴風科技,金山雲等企業。對大資料架構和機器學習有濃厚興趣。
如果你想一站式快速體驗 Elasticsearch 所有功能(免費提供機器學習、 X-pack 能力),開通
阿裡雲 Elasticsearch 1核2G,即可首月免費試用。
前言
機器學習已經在現在的工業實踐中得到了廣泛的應用。作為強大搜尋引擎的ElasticSearch也在6.3開始内置了對機器學習的支援。

概述
從應用角度來看,如果你有異常偵測和資料回歸方面的需求,并且資料不需要特别處理,直接從es裡就可以接入,可以選擇Es内置的機器學習功能,這樣又快又迅速。但是如果要借助更多的機器學習算法來進行模組化,選擇python的Eland子產品進行機器學習就比較合适。下面會就這2種機器學習方式,從安裝到應用進行一一介紹。
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 :
$ conda安裝-c conda-forge eland
Eland連結Elasticsearch
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")
# Connecting to an Elastic Cloud instance
from elasticsearch import Elasticsearch
es = Elasticsearch(
cloud_id="cluster-name:...",
http_auth=("elastic", "<password>")
)
df = ed.DataFrame(es, 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 = XGBClassifier(booster="gbtree")
>>> xgb_model.fit(training_data[0], training_data[1])
>>> xgb_model.predict(training_data[0])
[0 1 1 0 1 0 0 0 1 0]
# Import the model into Elasticsearch
>>> es_model = ImportedMLModel(
es_client="localhost:9200",
model_id="xgb-classifier",
model=xgb_model,
feature_names=["f0", "f1", "f2", "f3", "f4"],
)
# Exercise the ML model in Elasticsearch with the training data
>>> es_model.predict(training_data[0])
[0 1 1 0 1 0 0 0 1 0]
結束語
Elasticsearch 作為搜尋引擎,賦能了快速排序,搜尋的場景。現在内置的機器學習子產品為借助es搜尋的場景又增加了異常偵測,回歸預測等強大的ai能力,無疑為es在和其他搜尋引擎競争中增加了強大助力。對這方面有興趣的讀者,可以關注我們,持續擷取這方面資訊。
聲明:
本文版權歸作者所有,未經許可不得擅自轉載或引用。
【
阿裡雲Elastic Stack】100%相容開源ES,獨有9大能力,提供免費 X-pack服務(單節點價值$6000)
相關活動
更多折扣活動,請
通路阿裡雲 Elasticsearch 官網 阿裡雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費 阿裡雲 Logstash 2核4G首月免費 下載下傳白皮書:Elasticsearch 八大經典場景應用