<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          超級干貨 | 數(shù)據(jù)平滑9大妙招

          共 18650字,需瀏覽 38分鐘

           ·

          2023-10-16 12:18

          作者:Peter       編輯:Peter

          對數(shù)據(jù)進行平滑處理的方法有很多種,具體的選擇取決于數(shù)據(jù)的性質(zhì)和處理的目的。今天給大家分享9大常見數(shù)據(jù)平滑方法:

          1. 移動平均Moving Average
          2. 指數(shù)平滑Exponential Smoothing
          3. 低通濾波器
          4. 多項式擬合
          5. 貝塞爾曲線擬合
          6. 局部加權(quán)散點平滑Loess
          7. Kalman濾波
          8. 小波變換
          9. Savitzky-Golay濾波

          移動平均Moving Average

          移動平均(Moving Average)是一種最簡單的數(shù)據(jù)平滑方法,用于平滑時間序列數(shù)據(jù)。它通過計算一定窗口內(nèi)數(shù)據(jù)點的平均值來減少噪音,同時保留數(shù)據(jù)的趨勢。移動平均可以是簡單移動平均(SMA)或指數(shù)加權(quán)移動平均(EMA)。

          簡單移動平均(SMA): 簡單移動平均是一種通過計算數(shù)據(jù)點在一個固定窗口內(nèi)的平均值來平滑數(shù)據(jù)的方法。窗口的大小決定了平滑程度。較大的窗口將導致更平滑的曲線,但會減緩對趨勢的反應(yīng),而較小的窗口將更敏感地跟隨數(shù)據(jù)的波動。

          import numpy as np
          import matplotlib.pyplot as plt

          # 生成示例數(shù)據(jù)
          data = np.array([10151218201416221925])

          # 定義移動平均窗口大小
          window_size = 3

          # 計算簡單移動平均
          sma = np.convolve(data, np.ones(window_size) / window_size, mode='valid')

          # 繪制原始數(shù)據(jù)和移動平均曲線
          plt.figure(figsize=(106))
          plt.plot(data, label="原始數(shù)據(jù)", marker='o', color='blue')
          plt.plot(np.arange(window_size - 1, len(data)), sma, label="移動平均", color='red')
          plt.legend()
          plt.title("簡單移動平均示例")
          plt.xlabel("數(shù)據(jù)點")
          plt.ylabel("數(shù)值")
          plt.grid(True)
          plt.show()

          指數(shù)加權(quán)移動平均-Exponential Weighted Moving Average,EWMA: 指數(shù)加權(quán)移動平均是一種通過對數(shù)據(jù)點應(yīng)用指數(shù)權(quán)重來平滑數(shù)據(jù)的方法。它對最近的數(shù)據(jù)點給予較高的權(quán)重,而對較早的數(shù)據(jù)點給予較低的權(quán)重。這使得EMA更適合用于追蹤快速變化的數(shù)據(jù)。

          import numpy as np
          import matplotlib.pyplot as plt

          # 生成示例數(shù)據(jù)
          data = np.array([10151218201416221925])

          # 定義平滑參數(shù)(通常稱為平滑因子)
          alpha = 0.2

          # 計算EMA
          ema = [data[0]]  # 初始EMA值等于第一個數(shù)據(jù)點
          for i in range(1, len(data)):
              ema.append(alpha * data[i] + (1 - alpha) * ema[-1])

          # 繪制原始數(shù)據(jù)和EMA曲線
          plt.figure(figsize=(106))
          plt.plot(data, label="原始數(shù)據(jù)", marker='o', color='blue')
          plt.plot(ema, label="EMA", color='red')
          plt.legend()
          plt.title("指數(shù)加權(quán)移動平均(EMA)示例")
          plt.xlabel("數(shù)據(jù)點")
          plt.ylabel("數(shù)值")
          plt.grid(True)
          plt.show()

          指數(shù)平滑Exponential Smoothing

          指數(shù)平滑(Exponential Smoothing)是一種常用的時間序列數(shù)據(jù)平滑和預(yù)測方法,用于處理具有趨勢和季節(jié)性的數(shù)據(jù)。它通過分配不同權(quán)重給歷史數(shù)據(jù)點,將較高權(quán)重分配給較新的數(shù)據(jù),以捕獲數(shù)據(jù)的變化趨勢。指數(shù)平滑通常用于生成預(yù)測,特別是在需要對未來時間點進行預(yù)測的情況下。

          指數(shù)平滑的主要特點包括:

          1. 加權(quán)平滑:指數(shù)平滑使用指數(shù)權(quán)重來平滑數(shù)據(jù)。較新的數(shù)據(jù)點獲得更高的權(quán)重,而較舊的數(shù)據(jù)點獲得較低的權(quán)重。這意味著它對最近的數(shù)據(jù)更為敏感,從而更好地捕獲了數(shù)據(jù)的最新趨勢。

          2. 三種主要形式:指數(shù)平滑有三種主要形式:簡單指數(shù)平滑、雙指數(shù)平滑和三重指數(shù)平滑。每種形式用于不同類型的數(shù)據(jù)和模式。

            • 簡單指數(shù)平滑(Simple Exponential Smoothing)用于平滑具有趨勢和季節(jié)性的數(shù)據(jù)。

            • 雙指數(shù)平滑(Double Exponential Smoothing)用于平滑具有趨勢但無季節(jié)性的數(shù)據(jù)。

            • 三重指數(shù)平滑(Triple Exponential Smoothing)用于平滑同時具有趨勢和季節(jié)性的數(shù)據(jù)。

          3. 遞歸更新:指數(shù)平滑是一種遞歸方法,它將先前的平滑結(jié)果與新數(shù)據(jù)點相結(jié)合,以生成下一個時間點的平滑結(jié)果。

          4. 預(yù)測能力:指數(shù)平滑不僅用于平滑數(shù)據(jù),還可以用于生成未來時間點的預(yù)測。這使得它在需求預(yù)測、股票價格預(yù)測和銷售預(yù)測等領(lǐng)域非常有用。

          5. 適用性:指數(shù)平滑適用于平穩(wěn)或非平穩(wěn)的時間序列數(shù)據(jù),它能夠很好地處理趨勢、季節(jié)性和噪聲。

          pip install statsmodels
          import numpy as np
          import pandas as pd
          import matplotlib.pyplot as plt
          from statsmodels.tsa.holtwinters import ExponentialSmoothing

          # 生成示例時間序列數(shù)據(jù)
          np.random.seed(0)
          n = 100
          index = pd.date_range(start="2022-01-01", periods=n, freq="D")
          data = np.sin(np.linspace(04 * np.pi, n)) + np.random.normal(00.2, n)
          time_series = pd.Series(data, index=index)

          # 執(zhí)行指數(shù)平滑
          model = ExponentialSmoothing(time_series, trend='add', seasonal='add', seasonal_periods=7)
          results = model.fit()

          # 生成平滑后的數(shù)據(jù)和預(yù)測
          smoothed = results.fittedvalues
          forecast = results.forecast(steps=30)  # 預(yù)測未來30個時間點

          # 繪制原始數(shù)據(jù)、平滑后的數(shù)據(jù)和預(yù)測
          plt.figure(figsize=(106))
          plt.plot(time_series, label="原始數(shù)據(jù)", color='blue', alpha=0.6)
          plt.plot(smoothed, label="指數(shù)平滑", color='red')
          plt.plot(forecast, label="未來預(yù)測", color='green')
          plt.legend()
          plt.title("指數(shù)平滑示例")
          plt.xlabel("時間")
          plt.ylabel("數(shù)據(jù)值")
          plt.grid(True)
          plt.show()

          低通濾波器

          低通濾波器是一種信號處理工具,用于去除信號中高頻成分,從而保留低頻成分。在數(shù)據(jù)平滑的上下文中,低通濾波器用于減小或去除數(shù)據(jù)中的高頻噪聲或快速變化,以使數(shù)據(jù)趨于平滑,保留慢變化的趨勢或周期性特征。

          低通濾波器的工作原理是將信號通過一個濾波器,該濾波器允許低頻成分通過,而抑制高頻成分。這通常通過濾波器的頻率響應(yīng)函數(shù)來實現(xiàn),頻率響應(yīng)函數(shù)定義了不同頻率上的濾波器的行為。低通濾波器通常用于以下應(yīng)用:

          • 去除高頻噪聲:在測量、傳感器或通信中,信號通常會受到高頻噪聲的干擾,低通濾波器可用于去除這些噪聲。
          • 數(shù)據(jù)平滑:在時間序列分析中,低通濾波器可以用來平滑數(shù)據(jù),去除短期波動,從而更好地識別趨勢和周期性特征。
          • 圖像處理:在圖像處理中,低通濾波器可用于去除圖像中的高頻噪聲,使圖像更加平滑。
          • 音頻處理:在音頻處理中,低通濾波器可用于去除音頻信號中的高頻噪聲,改善音質(zhì)。

          提供一個Python案例:

          import numpy as np
          import matplotlib.pyplot as plt
          from scipy.signal import butter, lfilter

          # 生成示例數(shù)據(jù)
          fs = 1000  # 采樣頻率
          t = np.linspace(055 * fs, endpoint=False)
          data = 5 * np.sin(2 * np.pi * 3 * t) + 2 * np.sin(2 * np.pi * 50 * t)

          # 設(shè)計巴特沃斯低通濾波器
          cutoff_freq = 10  # 截止頻率(以Hz為單位)
          nyquist_freq = 0.5 * fs
          normal_cutoff = cutoff_freq / nyquist_freq
          b, a = butter(4, normal_cutoff, btype='low', analog=False)

          # 使用濾波器平滑數(shù)據(jù)
          smoothed_data = lfilter(b, a, data)

          # 繪制原始數(shù)據(jù)和平滑后的數(shù)據(jù)
          plt.figure(figsize=(106))
          plt.plot(t, data, label="原始數(shù)據(jù)", color='blue')
          plt.plot(t, smoothed_data, label="低通濾波后的數(shù)據(jù)", color='red')
          plt.legend()
          plt.title("巴特沃斯低通濾波器示例")
          plt.xlabel("時間 (秒)")
          plt.ylabel("數(shù)值")
          plt.grid(True)
          plt.show()

          多項式擬合

          多項式擬合(Polynomial Fitting)是一種數(shù)據(jù)平滑和曲線擬合的方法,它通過使用多項式函數(shù)來逼近或擬合原始數(shù)據(jù),以便更好地描述數(shù)據(jù)的趨勢或模式。多項式擬合的目標是找到一個多項式函數(shù),它在給定的數(shù)據(jù)點上經(jīng)過并能夠很好地擬合這些點。

          多項式擬合的一般形式如下:

          其中, 是自變量, 是依賴于 的因變量, 是多項式系數(shù)。通過調(diào)整這些系數(shù),可以使多項式函數(shù)更好地擬合數(shù)據(jù)。

          多項式擬合常用于以下情況:

          1. 數(shù)據(jù)平滑:多項式擬合可以用來消除數(shù)據(jù)中的噪聲或波動,從而獲得平滑的曲線。

          2. 趨勢分析:多項式擬合可用于識別數(shù)據(jù)中的趨勢,例如線性趨勢(一階多項式)、二次趨勢(二階多項式)或更高階的趨勢。

          3. 曲線擬合:多項式擬合可用于擬合實驗數(shù)據(jù),以獲得與理論模型或理論曲線的最佳擬合。

          4. 數(shù)據(jù)插值:多項式插值是多項式擬合的特殊情況,它通過已知數(shù)據(jù)點之間的多項式來估計中間值。

          多項式擬合的一般原則是選擇合適的多項式階數(shù)。階數(shù)過低可能無法很好地擬合數(shù)據(jù),而階數(shù)過高可能會導致過度擬合,對新數(shù)據(jù)的波動非常敏感。因此,選擇適當?shù)亩囗検诫A數(shù)是關(guān)鍵。

          提供一個3階多項式擬合的案例:

          import numpy as np
          import matplotlib.pyplot as plt

          # 示例數(shù)據(jù)
          x = np.array([123456789])
          y = np.array([1087654321])

          # 三階多項式擬合
          degree = 3
          coefficients = np.polyfit(x, y, degree)

          # 構(gòu)建多項式函數(shù)
          poly = np.poly1d(coefficients)

          # 生成用于繪圖的新X值
          x_new = np.linspace(min(x), max(x), 100)

          # 計算擬合后的Y值
          y_new = poly(x_new)

          # 繪制原始數(shù)據(jù)和三階多項式擬合曲線
          plt.figure(figsize=(106))
          plt.scatter(x, y, label="原始數(shù)據(jù)", color='blue')
          plt.plot(x_new, y_new, label="三階多項式擬合", color='red')
          plt.legend()
          plt.title("三階多項式擬合示例")
          plt.xlabel("X軸")
          plt.ylabel("Y軸")
          plt.grid(True)
          plt.show()

          貝塞爾曲線

          貝塞爾曲線(Bézier Curve)是一種數(shù)學曲線,常用于計算機圖形和數(shù)據(jù)可視化領(lǐng)域。它的特點是平滑、連續(xù),由控制點(Control Points)定義,可以用于創(chuàng)建平滑曲線或路徑。貝塞爾曲線最常見的形式是二次貝塞爾曲線和三次貝塞爾曲線,分別由2個和3個控制點定義。

          以下是二次和三次貝塞爾曲線的簡要介紹:

          1. 二次貝塞爾曲線:二次貝塞爾曲線由三個點定義,分別是起始點(P0)、控制點(P1),和結(jié)束點(P2)。曲線從起始點出發(fā),經(jīng)過控制點,最終到達結(jié)束點。曲線的形狀由控制點的位置決定,控制點引導了曲線的彎曲和走勢。
          2. 三次貝塞爾曲線:三次貝塞爾曲線由四個點定義,分別是起始點(P0)、兩個控制點(P1和P2),和結(jié)束點(P3)。曲線從起始點出發(fā),經(jīng)過兩個控制點,最終到達結(jié)束點。與二次貝塞爾曲線相比,三次貝塞爾曲線具有更高的靈活性,可以描述更復(fù)雜的曲線形狀。
          import numpy as np
          import matplotlib.pyplot as plt
          from scipy.interpolate import make_interp_spline

          # 生成示例數(shù)據(jù)
          x = np.linspace(01020)  # X坐標
          y = np.random.rand(20) * 10  # 隨機生成Y坐標

          # 創(chuàng)建貝塞爾曲線插值器
          tck = make_interp_spline(x, y, k=3)

          # 生成平滑后的數(shù)據(jù)點
          x_new = np.linspace(min(x), max(x), 200)  # 新的X坐標范圍
          y_smooth = tck(x_new)

          # 繪制原始數(shù)據(jù)和平滑后的貝塞爾曲線
          plt.figure(figsize=(106))
          plt.scatter(x, y, label="原始數(shù)據(jù)", color='blue')
          plt.plot(x_new, y_smooth, label="平滑后的貝塞爾曲線", color='red')
          plt.legend()
          plt.title("貝塞爾曲線數(shù)據(jù)平滑示例")
          plt.xlabel("X坐標")
          plt.ylabel("Y坐標")
          plt.grid(True)
          plt.show()

          局部加權(quán)散點平滑(Loess平滑)

          Loess(局部加權(quán)散點平滑,Locally Weighted Scatterplot Smoothing)是一種非參數(shù)的數(shù)據(jù)平滑方法,通常用于擬合或平滑散點數(shù)據(jù),以捕獲數(shù)據(jù)的局部趨勢和模式。Loess平滑是一種局部回歸方法,它對于不同區(qū)域的數(shù)據(jù)采用不同的權(quán)重,以確保在數(shù)據(jù)的每個局部區(qū)域上都能獲得較好的擬合。

          Loess平滑的核心思想是在每個數(shù)據(jù)點附近擬合一個局部多項式模型,然后使用這些局部模型的加權(quán)平均來獲得平滑曲線。在每個局部區(qū)域,距離某個數(shù)據(jù)點越近的數(shù)據(jù)點將獲得更大的權(quán)重,而距離較遠的數(shù)據(jù)點將獲得較小的權(quán)重。這樣,Loess能夠更好地擬合數(shù)據(jù)的局部特性,同時降低了全局模型的過擬合風險。

          Loess平滑的主要特點包括:

          1. 非參數(shù)性:Loess不需要假設(shè)數(shù)據(jù)的特定分布或形式,因此適用于各種類型的數(shù)據(jù)。
          2. 局部性:Loess平滑主要關(guān)注數(shù)據(jù)的局部趨勢,而不是全局趨勢,這使它特別適用于具有復(fù)雜、非線性趨勢的數(shù)據(jù)。
          3. 可調(diào)參數(shù):Loess允許用戶指定平滑窗口的大小或帶寬,以控制局部模型的擬合程度。較小的帶寬會導致更強的局部適應(yīng),而較大的帶寬會導致更平滑的曲線。

          Loess平滑通常用于探索性數(shù)據(jù)分析、數(shù)據(jù)可視化、時間序列分析和回歸建模的預(yù)處理步驟。它可以幫助用戶識別數(shù)據(jù)中的局部特性、趨勢和周期性,從而更好地理解數(shù)據(jù)的結(jié)構(gòu)。在統(tǒng)計學和數(shù)據(jù)科學中,Loess平滑是一種有用的工具,用于減少噪聲并提取數(shù)據(jù)中的信號。

          提供一個Python案例:

          import numpy as np
          import matplotlib.pyplot as plt
          import statsmodels.api as sm

          # 生成示例數(shù)據(jù)
          x = np.linspace(010100)
          y = np.sin(x) + np.random.normal(00.2100)

          # 執(zhí)行Loess平滑
          lowess = sm.nonparametric.lowess(y, x, frac=0.3)  # frac參數(shù)控制平滑帶寬,可以調(diào)整以獲得不同的平滑度

          # 獲取平滑后的數(shù)據(jù)
          x_smooth, y_smooth = lowess.T

          # 繪制原始數(shù)據(jù)和Loess平滑曲線
          plt.figure(figsize=(106))
          plt.scatter(x, y, label="原始數(shù)據(jù)", color='blue', alpha=0.6)
          plt.plot(x_smooth, y_smooth, label="Loess平滑", color='red')
          plt.legend()
          plt.title("Loess平滑示例")
          plt.xlabel("X軸")
          plt.ylabel("Y軸")
          plt.grid(True)
          plt.show()

          Kalman濾波

          卡爾曼濾波(Kalman Filter)是一種用于狀態(tài)估計和數(shù)據(jù)融合的強大數(shù)學和統(tǒng)計工具,最初由R.E. Kalman于1960年開發(fā)。卡爾曼濾波是一種遞歸的、最優(yōu)的狀態(tài)估計方法,通常用于處理含有噪聲的時間序列數(shù)據(jù),以估計系統(tǒng)的狀態(tài),同時提供估計的不確定性。

          卡爾曼濾波的主要用途包括:

          1. 狀態(tài)估計:卡爾曼濾波可以用于估計線性或非線性動態(tài)系統(tǒng)的狀態(tài)變量,尤其是在系統(tǒng)中存在不完全或噪聲觀測的情況下。這對于跟蹤運動物體、導航、定位以及環(huán)境感知等應(yīng)用非常有用。
          2. 數(shù)據(jù)融合:卡爾曼濾波可以將多個傳感器提供的信息融合在一起,以提供更準確的估計,降低估計誤差。
          3. 控制系統(tǒng):卡爾曼濾波還用于控制系統(tǒng),以估計系統(tǒng)狀態(tài)并制定控制策略,從而實現(xiàn)系統(tǒng)的自動控制。

          卡爾曼濾波基于狀態(tài)空間模型,其中系統(tǒng)狀態(tài)通過線性或非線性動態(tài)模型演化,并且由觀測模型通過傳感器觀測進行測量??柭鼮V波使用貝葉斯估計方法來不斷更新系統(tǒng)狀態(tài)的估計,考慮了過去的狀態(tài)估計和新的觀測數(shù)據(jù),以提供最優(yōu)的狀態(tài)估計結(jié)果??柭鼮V波的主要目標是最小化估計誤差的方差,從而提供最優(yōu)的狀態(tài)估計結(jié)果。

          卡爾曼濾波有多個變種,包括擴展卡爾曼濾波(Extended Kalman Filter,EKF)和無跡卡爾曼濾波(Unscented Kalman Filter,UKF),用于處理非線性系統(tǒng)。這些濾波器的應(yīng)用范圍廣泛,包括航空航天、自動駕駛汽車、機器人技術(shù)、金融建模和天氣預(yù)測等領(lǐng)域。它們在數(shù)據(jù)平滑和狀態(tài)估計方面提供了強大的工具。

          先安裝:

          pip install pykalman
          import numpy as np
          import matplotlib.pyplot as plt
          from pykalman import KalmanFilter

          # 生成示例數(shù)據(jù)
          np.random.seed(0)
          n = 100
          x = np.linspace(010, n)
          y = 0.1 * x + np.random.normal(00.5, n)

          # 創(chuàng)建卡爾曼濾波器
          kf = KalmanFilter(initial_state_mean=0, n_dim_obs=1)
          kf = kf.em(y, n_iter=10)

          # 獲取平滑后的數(shù)據(jù)
          (filtered_state_means, _) = kf.filter(y)

          # 繪制原始數(shù)據(jù)和卡爾曼濾波后的數(shù)據(jù)
          plt.figure(figsize=(106))
          plt.plot(x, y, label="原始數(shù)據(jù)", color='blue', alpha=0.6)
          plt.plot(x, filtered_state_means, label="卡爾曼濾波", color='red')
          plt.legend()
          plt.title("卡爾曼濾波數(shù)據(jù)平滑示例")
          plt.xlabel("X軸")
          plt.ylabel("Y軸")
          plt.grid(True)
          plt.show()

          小波變換

          小波變換(Wavelet Transform)是一種用于信號處理和數(shù)據(jù)分析的數(shù)學方法。它是一種多尺度分析技術(shù),可以將信號分解成不同尺度和頻率的分量,以便更好地理解信號的局部特征和結(jié)構(gòu)。小波變換在許多領(lǐng)域,包括信號處理、圖像處理、數(shù)據(jù)壓縮和模式識別等方面都有廣泛的應(yīng)用。

          小波變換的主要特點包括:

          1. 多尺度分析:小波變換能夠在不同尺度上分解信號,因此可以檢測信號中的局部特征,從高頻細節(jié)到低頻整體。
          2. 時頻局部性:與傅立葉變換不同,小波變換具有時頻局部性,可以在時間和頻率上同時分析信號。這使得它在分析非平穩(wěn)信號和非線性信號時非常有用。
          3. 數(shù)據(jù)壓縮:小波變換可以用于數(shù)據(jù)壓縮,通過保留主要的小波系數(shù),可以減小數(shù)據(jù)的存儲空間和傳輸帶寬。
          4. 特征提取:小波變換可以用于從信號中提取特征,用于模式識別、分類和檢測任務(wù)。

          小波變換有兩種主要類型:連續(xù)小波變換(Continuous Wavelet Transform,CWT)和離散小波變換(Discrete Wavelet Transform,DWT)。

          • 連續(xù)小波變換(CWT)是一種在不同尺度上滑動小波函數(shù),對信號進行連續(xù)分解的方法。CWT的主要特點是它提供了連續(xù)的尺度信息,但計算成本較高。
          • 離散小波變換(DWT)是一種通過濾波和下采樣操作將信號分解成不同尺度的方法。DWT通過將信號分解成高頻和低頻部分,然后繼續(xù)對低頻部分進行分解,從而實現(xiàn)多尺度分析。DWT的計算效率高,適用于實際工程應(yīng)用。

          先安裝:

          pip install PyWavelets

          Python案例:

          import numpy as np
          import matplotlib.pyplot as plt
          import pywt

          # 生成示例數(shù)據(jù)
          x = np.linspace(02 * np.pi, 400)
          y = np.sin(x) + np.random.normal(00.1, len(x))

          # 執(zhí)行小波變換
          wavelet = 'db4'  # 選擇小波基函數(shù)
          level = 3  # 分解的級數(shù)
          coeffs = pywt.wavedec(y, wavelet, level=level)

          # 將高頻部分系數(shù)置零,以實現(xiàn)平滑
          coeffs_smoothed = [coeffs[0]] + [np.zeros_like(coeffs[i]) for i in range(1, len(coeffs))]

          # 重構(gòu)平滑后的信號
          y_smoothed = pywt.waverec(coeffs_smoothed, wavelet)

          # 繪制原始數(shù)據(jù)和平滑后的數(shù)據(jù)
          plt.figure(figsize=(106))
          plt.plot(x, y, label="原始數(shù)據(jù)", color='blue', alpha=0.6)
          plt.plot(x, y_smoothed, label="小波平滑", color='red')
          plt.legend()
          plt.title("小波變換數(shù)據(jù)平滑示例")
          plt.xlabel("X軸")
          plt.ylabel("Y軸")
          plt.grid(True)
          plt.show()

          Savitzky-Golay濾波器

          Savitzky-Golay濾波是一種信號處理技術(shù),用于對離散數(shù)據(jù)序列進行平滑和去噪。它是一種線性平滑濾波器,通過擬合多項式來估計數(shù)據(jù)點的平均值,以減小噪聲和突發(fā)波動。Savitzky-Golay濾波器的主要思想是在局部窗口內(nèi)對數(shù)據(jù)進行多項式擬合,從而獲得平滑后的估計值。

          Savitzky-Golay濾波的主要特點包括:

          1. 局部擬合:Savitzky-Golay濾波器使用一個固定大小的局部窗口來擬合多項式,通常窗口大小為奇數(shù)。對于每個數(shù)據(jù)點,它使用窗口內(nèi)的數(shù)據(jù)點來執(zhí)行多項式擬合,以獲得該點的平滑估計值。

          2. 多項式擬合:濾波器使用多項式來擬合窗口內(nèi)的數(shù)據(jù)點。常用的多項式階數(shù)是2(二次多項式)或4(四次多項式),但可以根據(jù)需要選擇不同的階數(shù)。

          3. 數(shù)據(jù)平滑:Savitzky-Golay濾波器旨在平滑數(shù)據(jù),減小數(shù)據(jù)中的高頻噪聲和突發(fā)波動。它保留了數(shù)據(jù)中的趨勢和主要特征,同時去除了噪聲。

          4. 適用性:Savitzky-Golay濾波器適用于各種領(lǐng)域,包括信號處理、光譜分析、化學分析、生物醫(yī)學數(shù)據(jù)處理和圖像處理等。它特別適用于光譜數(shù)據(jù),因為它可以去除儀器噪聲和光譜線的窄化。

          5. 平滑度可調(diào):通過調(diào)整窗口大小和多項式階數(shù),可以控制濾波器的平滑度。較大的窗口和較高的多項式階數(shù)可以提供更平滑的結(jié)果,而較小的窗口和較低的多項式階數(shù)可以更好地保留數(shù)據(jù)的細節(jié)。

          Savitzky-Golay濾波器是一種有效的數(shù)據(jù)平滑和去噪技術(shù),它可以在許多領(lǐng)域用于處理具有噪聲的數(shù)據(jù),以提高數(shù)據(jù)的可解釋性和分析能力。在Python中,你可以使用scipy.signal.savgol_filter函數(shù)來執(zhí)行Savitzky-Golay濾波。

          # pip install scipy

          import numpy as np
          import matplotlib.pyplot as plt
          from scipy.signal import savgol_filter

          # 生成示例數(shù)據(jù)
          x = np.linspace(02 * np.pi, 100)
          y = np.sin(x) + np.random.normal(00.2, len(x))

          # 執(zhí)行Savitzky-Golay濾波
          window_length = 11  # 窗口長度(奇數(shù))
          polyorder = 2  # 多項式階數(shù)
          y_smoothed = savgol_filter(y, window_length, polyorder)

          # 繪制原始數(shù)據(jù)和平滑后的數(shù)據(jù)
          plt.figure(figsize=(106))
          plt.plot(x, y, label="原始數(shù)據(jù)", color='blue', alpha=0.6)
          plt.plot(x, y_smoothed, label="Savitzky-Golay濾波", color='red')
          plt.legend()
          plt.title("Savitzky-Golay濾波器數(shù)據(jù)平滑示例")
          plt.xlabel("X軸")
          plt.ylabel("Y軸")
          plt.grid(True)
          plt.show()
                
                
                      
                      
                         
                         
          往期精彩回顧




          • 交流群

          歡迎加入機器學習愛好者微信群一起和同行交流,目前有機器學習交流群、博士群、博士申報交流、CV、NLP等微信群,請掃描下面的微信號加群,備注:”昵稱-學校/公司-研究方向“,例如:”張小明-浙大-CV“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~(也可以加入機器學習交流qq群772479961

          瀏覽 165
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产日韩一级片 | 成人在线看网站 | 777奇米在线视频 | 蜜桃视频精品 | 欧美爱爱试看 |