- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Facebook开源一站式服务python时序利器Kats详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
转自微信公众号:机器学习社区,经作者授权转载 。
时间序列分析是数据科学中一个非常重要的领域,它主要包含统计分析、检测变化点、异常检测和预测未来趋势。然而,这些时间序列技术通常由不同的库实现。有没有一种方法可以让你在一个库中获得所有这些技术?
答案是肯定的,本文中我将分享一个非常棒的工具包 Kats,它可以完美解决上述问题.
。
目前时间序列分析以及建模的技术非常多,但相对散乱,本次 FaceBook 开源了 Kats,它是一款轻量级的、易于使用的、通用的时间序列分析框架,包括:预测、异常检测、多元分析和特征提取嵌入。你可以将 Kats 视为 Python 中时间序列分析的一站式工具包.
。
pip install --upgrade pippip install kats
为了了解 Kats 的功能,我们将使用这个框架来分析 Kaggle 上的 StackOverflow问题计数问题。数据链接为:https://www.kaggle.com/aishu200023/stackindex 。
首先我们从读取数据开始.
import pandas as pddf = pd.read_csv("MLTollsStackOverflow.csv")# Turn the month column into datetimedf["month"] = pd.to_datetime(df["month"], format="%y-%b")df = df.set_index("month")
现在让我们分析一下与 Python 相关的 StackOverflow 问题计数。数据被分成一列和一个测试集来评估预测.
python = df["python"].to_frame()# Split data into train and test settrain_len = 102train = python.iloc[:train_len]test = python.iloc[train_len:]
。
首先构造一个时间序列对象。我们使用time_col_name="month"指定时间列.
from kats.consts import TimeSeriesData# Construct TimeSeriesData objectts = TimeSeriesData(train.reset_index(), time_col_name="month")
要绘制数据,调用plot方法:
ts.plot(cols=["python"])
酷!看起来关于 Python 的问题的数量随着时间的推移而增加。我们能预测未来30天的趋势吗?是的,我们可以和 Kats 一起做.
。
Kats目前支持以下10种预测模型:
Linear 。
Quadratic 。
ARIMA 。
SARIMA 。
Holt-Winters 。
Prophet 。
AR-Net 。
LSTM 。
Theta 。
VAR 。
上述模型较多,让我们试一下其中两种类型吧! 。
。
from kats.models.prophet import ProphetModel, ProphetParams# Specify parametersparams = ProphetParams(seasonality_mode="multiplicative")# Create a model instancem = ProphetModel(ts, params)# Fit modem.fit()# Forecastfcst = m.predict(steps=30, freq="MS")fcst
。
m.plot()
酷!让我们通过与测试数据的比较来评估预测.
import matplotlib.pyplot as pltfig, ax = plt.subplots(figsize=(12, 7))train.plot(ax=ax, label="train", color="black")test.plot(ax=ax, color="black")fcst.plot(x="time", y="fcst", ax=ax, color="blue")ax.fill_between(test.index, fcst["fcst_lower"], fcst["fcst_upper"], alpha=0.5)ax.get_legend().remove()
预报似乎很好地符合观察结果! 。
。
我们将尝试的下一个模式是Holt-Winters。它是一种捕捉季节性的方法。下面是如何在 Kats 中使用 Holt-Winters 方法.
from kats.models.holtwinters import HoltWintersParams, HoltWintersModelimport warningswarnings.simplefilter(action="ignore")params = HoltWintersParams( trend="add", seasonal="mul", seasonal_periods=12, )m = HoltWintersModel( data=ts, params=params)m.fit()fcst = m.predict(steps=30, alpha = 0.1)m.plot()
。
你有没有想过在你的时间序列中发生统计上显著的均值变化的时间?
Kats 允许使用 CUSUM 算法检测变化点。Cusum 是一种检测时间序列中均值上下移动的方法.
让我们看看如何检测 Kats 中的变化点.
from kats.consts import TimeSeriesData, TimeSeriesIteratorfrom kats.detectors.cusum_detection import CUSUMDetectorimport matplotlib.pyplot as pltdetector = CUSUMDetector(ts)change_points = detector.detector(change_directions=["increase", "decrease"])print("The change point is on", change_points[0][0].start_time)# plot the resultsplt.xticks(rotation=45)detector.plot(change_points)plt.show()
酷!让我们尝试检测 StackOverflow 问题计数的其他类别的变化点.
首先创建一个函数来检测主题提供的更改点.
def get_ts(topic: str): return TimeSeriesData(df[topic].to_frame().reset_index(), time_col_name="month")def detect_change_point(topic: str): ts = get_ts(topic) detector = CUSUMDetector(ts) change_points = detector.detector() for change_point in change_points: print("The change point is on", change_point[0].start_time) # plot the results plt.xticks(rotation=45) detector.plot(change_points) plt.show()
。
detect_change_point("machine-learning")
。
detect_change_point("deep-learning")
。
你在看NLP的时间序列时看到了什么?
df["nlp"].plot()
从2018年到2019年,NLP的问题数量有所下降.
问题数量的下降是一个异常值。检测异常值很重要,因为它们可能会在下游处理中造成问题.
然而,通过查看数据来发现异常值并不总是高效和容易的。幸运的是,Kats还允许您检测时间序列中的异常值! 。
用kat检测异常值只需要几行行代码.
from kats.detectors.outlier import OutlierDetector# Get time series objectts = get_ts("nlp")# Detect outliersts_outlierDetection = OutlierDetector(ts, "additive")ts_outlierDetection.detector()# Print outliersoutlier_range1 = ts_outlierDetection.outliers[0]print(f"The outliers range from {outlier_range1[0]} to {outlier_range1[1]}")
The outliers range from 2018-01-01 00:00:00 to 2019-03-01 00:00:00 。
酷!结果证实了我们从上图中看到的情况.
。
除了统计数据外,时间序列中还有其他一些特性,如线性、趋势强度、季节性强度、季节性参数等,您可能会感兴趣.
Kats 允许通过 TsFeatures 查找有关时间序列特征的重要信息:
from kats.tsfeatures.tsfeatures import TsFeaturesmodel = TsFeatures()output_features = model.transform(ts)output_features
。
我们刚刚学习了如何使用 Kats 来预测、检测变化点、检测异常值和提取时间序列特征。我希望这篇文章能帮助到大家解决工作中的时间序列问题,并从数据中提取有价值的信息.
以上就是Facebook开源一站式服务python时序利器Kats详解的详细内容,更多关于Facebook开源时序利器Kats的资料请关注我其它相关文章! 。
原文链接:https://blog.csdn.net/weixin_38037405/article/details/120122477 。
最后此篇关于Facebook开源一站式服务python时序利器Kats详解的文章就讲到这里了,如果你想了解更多关于Facebook开源一站式服务python时序利器Kats详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想选择一个类的所有元素。然后将该类更改为另一个类。 0.5 秒后,我想将元素恢复到原来的类。我必须连续这样做 8 次。即使我的代码实现了(以某种方式),我也看不到按钮的颜色变化。谁能帮我 ?我猜这是
我目前正在尝试用 C++ 编写一个 NES 模拟器,作为一个夏季编程项目,为下一学年的秋季学期做准备(我已经有一段时间没有编码了)。我已经编写了一个 Chip8 模拟器,所以我认为下一步是尝试编写一个
我有 2 个函数依次调用,x 和 y 是全局变量。 function setVariables() { x = 2; y = 10; }; function useVaria
我正在尝试以重复的方式播放 1000 毫秒的 wav 文件。因此,播放 1000 毫秒,然后播放 1000 毫秒的静音,然后再次播放 1000 毫秒的音频,... 但是当我在此过程中打印计时时,我注意
我正在为一个特殊的相机编写一个内核模块,通过 V4L2 处理帧到用户空间代码的传输。然后我在应用程序中做很多用户空间的事情。 时间在这里非常关键,所以我一直在做大量的性能分析和普通的旧 std::ch
据我了解,awakeFromNib 始终会在 viewDidLoad 之前调用。 所以我有一个 UITableViewController 的子类,它是从 xib 文件中取消存档的。 我在里面定义了这
我的powershell脚本运行缓慢,有什么办法可以分析powershell脚本吗? 最佳答案 在这里发布您的脚本真的有助于给出准确的答案。 您可以使用 Measure-Command 来查看脚本中每
我的CQRS / ES设计中有时间问题。为了便于讨论,让我们基于Microsoft的 有关此主题的示例, session 管理(https://msdn.microsoft.com/en-us/lib
我正在使用 RX 进行一些(非常基本的)事件订阅:- public void StartListening(IObservable observable) { subscription = ob
我会试着问我的问题,这样它就不会以一个简单的争论话题结束。 我最近进入了一个用 C# 编码的应用程序,我正在发现异常机制。我和他们有过一些不好的经历,比如以下 // _sValue is a stri
我正在阅读 Cortex M4 TRM 以了解指令执行周期。但是,那里有一些令人困惑的描述 在 Table of Processor Instuctions , STR需要 2 个周期 . 稍后在 L
我需要在 GPU 端处理一组绘图调用所需的时间跨度。 OpenGL 3.2+ 具有“GL_ARB_timer_query”扩展名。不幸的是,MacOSX 仍然不支持该扩展。 你如何能够在 gpu 端测
我正在 try catch 屏幕而不包括我的应用程序窗口。为此,我首先调用 setVisible(false),然后调用 createScreenCapture 方法,最后调用 setVisible(
我们试图实现的功能的简短描述:我们在左边有一个源对象列表,一个人可以将新项目从列表拖到右边的列表中,项目因此被添加到列表中在右侧;他们还可以从右侧的列表中删除项目。右侧的列表在更改时会被保存。 (我认
我是一名优秀的程序员,十分优秀!