日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

这个神奇的库,可以将数据平滑化并找到异常点

發(fā)布時(shí)間:2023/12/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这个神奇的库,可以将数据平滑化并找到异常点 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在處理數(shù)據(jù)的時(shí)候,我們經(jīng)常會(huì)遇到一些非連續(xù)的散點(diǎn)時(shí)間序列數(shù)據(jù):

有些時(shí)候,這樣的散點(diǎn)數(shù)據(jù)是不利于我們進(jìn)行數(shù)據(jù)的聚類(lèi)和預(yù)測(cè)的。因此我們需要把它們平滑化,如下圖所示:

如果我們將散點(diǎn)及其范圍區(qū)間都去除,平滑后的效果如下:

這樣的時(shí)序數(shù)據(jù)是不是看起來(lái)舒服多了?此外,使用平滑后的時(shí)序數(shù)據(jù)去做聚類(lèi)或預(yù)測(cè)或許有令人驚艷的效果,因?yàn)樗コ艘恍┢钪挡⒓?xì)化了數(shù)據(jù)的分布范圍。

如果我們自己開(kāi)發(fā)一個(gè)這樣的平滑工具,會(huì)耗費(fèi)不少的時(shí)間。因?yàn)槠交募夹g(shù)有很多種,你需要一個(gè)個(gè)地去研究,找到最合適的技術(shù)并編寫(xiě)代碼,這是一個(gè)非常耗時(shí)的過(guò)程。平滑技術(shù)包括但不限于:

  • 指數(shù)平滑

  • 具有各種窗口類(lèi)型(常數(shù)、漢寧、漢明、巴特利特、布萊克曼)的卷積平滑

  • 傅立葉變換的頻譜平滑

  • 多項(xiàng)式平滑

  • 各種樣條平滑(線(xiàn)性、三次、自然三次)

  • 高斯平滑

  • 二進(jìn)制平滑

所幸,有大佬已經(jīng)為我們實(shí)現(xiàn)好了時(shí)間序列的這些平滑技術(shù),并在GitHub上開(kāi)源了這份模塊的代碼——它就是 tsmoothie。

下面就讓我們來(lái)試一下 tsmoothie.

1.準(zhǔn)備

開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,需要先進(jìn)行安裝。

如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.

請(qǐng)選擇以下任一種方式輸入命令安裝依賴(lài)

1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install?tsmoothie

(PS) Tsmoothie僅支持Python 3.6 及以上的版本。

2.Tsmoothie 基本使用

為了嘗試Tsmoothie的效果,我們需要生成隨機(jī)數(shù)據(jù):

import?numpy as?np import?matplotlib.pyplot as?plt from?tsmoothie.utils_func import?sim_randomwalk from?tsmoothie.smoother import?LowessSmoother# 生成 3 個(gè)長(zhǎng)度為200的隨機(jī)數(shù)據(jù)組 np.random.seed(123) data = sim_randomwalk(n_series=3, timesteps=200, process_noise=10, measure_noise=30)

然后使用Tsmoothie執(zhí)行平滑化:

# 平滑 smoother = LowessSmoother(smooth_fraction=0.1, iterations=1) smoother.smooth(data)

通過(guò) smoother.smooth_data 你就可以獲取平滑后的數(shù)據(jù):

print(smoother.smooth_data) # [[ 5.21462928 3.07898076 0.93933646 -1.19847767 -3.32294934 # -5.40678762 -7.42425709 -9.36150892 -11.23591897 -13.05271523 # ....... ....... ....... ....... ....... ]]

繪制效果圖:

# 生成范圍區(qū)間 low, up = smoother.get_intervals('prediction_interval')plt.figure(figsize=(18,5))for?i in?range(3):plt.subplot(1,3,i+1)plt.plot(smoother.smooth_data[i], linewidth=3, color='blue')plt.plot(smoother.data[i], '.k')plt.title(f"timeseries {i+1}"); plt.xlabel('time')plt.fill_between(range(len(smoother.data[i])), low[i], up[i], alpha=0.3)

3.基于Tsmoothie的極端異常值檢測(cè)

事實(shí)上,基于smoother生成的范圍區(qū)域,我們可以進(jìn)行異常值的檢測(cè):

可以看到,在藍(lán)色范圍以外的點(diǎn),都屬于異常值。我們可以輕易地將這些異常值標(biāo)紅或記錄,以便后續(xù)的處理。

_low, _up = smoother.get_intervals('sigma_interval', n_sigma=2) series['low'] = np.hstack([series['low'], _low[:,[-1]]]) series['up'] = np.hstack([series['up'], _up[:,[-1]]]) is_anomaly = np.logical_or(series['original'][:,-1] > series['up'][:,-1], series['original'][:,-1] < series['low'][:,-1] ).reshape(-1,1)

假設(shè)藍(lán)色范圍interval的最大值為up、最小值為low,如果存在 data > up 或 data < low 則表明此數(shù)據(jù)是異常點(diǎn)。

這些異常點(diǎn)并非都是負(fù)面作用,在不同的應(yīng)用場(chǎng)景下,它們可能代表了不同的意義。


比如在股票中,它或許可以代表著震蕩行情中某種趨勢(shì)反轉(zhuǎn)的信號(hào)。

或者在家庭用電量分析中,它可能代表著某個(gè)時(shí)刻的用電峰值,根據(jù)這個(gè)峰值我們可以此時(shí)此刻開(kāi)啟了什么樣的電器。

所以異常點(diǎn)的作用需要根據(jù)不同應(yīng)用場(chǎng)景進(jìn)行不同的分析,才能找到它真正的價(jià)值。

總而言之,Tsmoothie 不僅可以使用多種平滑技術(shù)平滑化我們的時(shí)序數(shù)據(jù),讓我們的模型訓(xùn)練更加有效,還可以根據(jù)平滑結(jié)果找出數(shù)據(jù)中的離群點(diǎn),是我們做數(shù)據(jù)分析和研究的一個(gè)好幫手,非常有價(jià)值。

我們的文章到此就結(jié)束啦。

對(duì)比Excel系列圖書(shū)累積銷(xiāo)量達(dá)15w冊(cè),讓你輕松掌握數(shù)據(jù)分析技能,感興趣的同學(xué)可以直接在各大電商平臺(tái)搜索書(shū)名了解:

總結(jié)

以上是生活随笔為你收集整理的这个神奇的库,可以将数据平滑化并找到异常点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。