您當前的位置:首頁 > 歷史

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

作者:由 工人階級碼農 發表于 歷史時間:2021-05-29

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?劉聰NLP2021-06-30 10:15:53

以前在做腦電、心電訊號(EEG、ECG)的時候,用過EEMD,經驗模式分解,將訊號進行不用頻域的分解,然後用mean、std、max、min等值作為特徵。

研究生髮的論文:

https://www。

sciencedirect。com/scien

ce/article/abs/pii/S0378437120309833

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?wangyang2021-06-30 10:42:45

直接卷積或者rnn。

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?劉鋒2021-07-05 21:05:26

從訊號處理的角度來講,常用的特徵提取手段有三類:

第一類是時域提取方法,比如均值、方差、有效值、陡度、峭度等

第二類是頻率域指標,比如頻譜、三分之一倍頻程等

第三類是時頻域特徵提取,比如短時傅立葉變換、小波變化和希爾伯特黃變換等

前兩類特徵提取的結果是一維資料,第三類特徵提取結果是二維資料,可以做成圖片訓練網路。

如果是機械行業訊號處理可以關注我下面回答。

故障診斷入門級選手提個問題,振動訊號分析直接做頻譜分析就好了,為啥需要人工智慧?

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?aresmiki2021-07-24 17:08:33

先佔坑,後回答。

佔坑兩天了,今天總算抽出時間來回答這個問題了。直接進入主題,我想先把作者這個問題分解一下。

我的理解,作者問了這兩個問題:

(1)機器學習做訊號分析,常用的提取手段有哪些?(2)哪些訊號特徵可以用來識別訊號?

針對第一個問題,其實問的我很懵,不太理解樓主是想知道

常用的訊號特徵有哪些?

還是真的問

常用的“特徵”提取手段?

這本身就是兩個問題。為了另樓主滿意,我想這兩個問題我還是都回答一下。

首先,針對常用的

訊號特徵

這個問題,一樓@劉鋒博士已經回答的很好了,同時他還給特徵分了三類,非常用心。這些特徵非常有用,且在教科書上都能夠找到相關的定義。我想我就不用在這裡重複了,樓主應該可以查查文章,翻一翻書就能找到這部分知識。而我想從一個“更本質的角度”出發回答這個問題。

任何能區分目標訊號和其他訊號的“描述”都能當作目標訊號的特徵

。特徵本質就是對一類訊號“樣貌”的“描述”。舉一個例子,我們平時如何區分我們周圍的人?我們一般從“身高”、“胖瘦”、“臉型”、“聲音”等角度出發去辨別,這些就是我們對一個人“樣貌”的定義和描述。訊號一樣我們可以從“均值”、“方差”、“有效值”、“頻率”的角度描述訊號的“樣貌”。但是,特徵的定義是什麼呢?我們先看看百度詞典的定義:

特徵,漢語詞語,讀音為tè zhēng,意思是一事物異於其他事物的特點。人或事物可供識別的特殊的象徵或標誌。

我們可以看到“特徵”本身最重要的含義是“事物異於其他事物的特點”。一個事物(這裡可以直接認為是訊號)的描述有很多,但是真正能稱得上特徵還必須具備一定的條件,那就是“差異性”。比如描述直流訊號(方差都為0、均值為0)時,顯然“有效值”能區分兩種直流訊號,而“均值”和“方差”無法區分兩個直流訊號。所以,此時我們認為“有效值”才是區分不同直流訊號的特徵,而不是“均值”和“方差”這樣的描述。這充分體現的區分事物的“差異性”。再比如,兩個正弦訊號(注意幅度都為1、相位都為0)的特徵應該是什麼?很明顯“均值”、“方差”、“有效值”都不適合了,因為你始終能構造出兩個具有相同“方差”或“有效值”的兩個正弦訊號。而學過傅立葉變換的同學知道,區分兩個正弦訊號最有用的描述就是“頻率”。這也就是傅立葉變換的核心“一個訊號可以被分解為多個頻率不同的正餘弦訊號的組合”。顯然這個任務中“頻率”才能稱為訊號的“特徵”。試想一下,如果我要你區分直流和正弦訊號呢?這時候你選擇“有效值”顯然就不合適了。我們可以構造出“有效值”完全相同的直流和正弦訊號。而這說明了一個道理,真實情況中特徵明顯是和“要進行的任務”掛鉤的。比如現實生活中區分“梨”和“蘋果”,我們可以用“顏色”作為特徵,而如果任務變為區分“櫻桃”和“蘋果”,顯然此時“顏色”不再是“特徵”,“大小”可能是這個任務應該考慮的特徵。

因此特徵是“考慮任務場景,且具有事物區分度的描述

”。這裡我引用機械故障診斷領域先驅Simon Braun教授關於“機械特徵分析”的定義來說明這個問題:

“機械特徵分析”—機械裝置異常狀態導致的振動特徵能很容易地同健康狀態下的參考特徵區分開來

上面這句話考慮的場景是“基於振動的機械裝置異常分析”,“健康狀態下的參考特徵區分開來”是對“事物區分度”的表述。如果你真的需要一些即插即用的“描述”(注意我這裡用的是描述,不是特徵),我還是給你一個我曾經回答這個問題的連結。機械故障診斷及壽命預測中,通俗的講特徵提取是什麼意思? - aresmiki的回答 - 知乎。

接下來另一個問題,特徵提取手段。其實樓主的問題已經回答了這個問題的一小部分。“機器學習”本身就是一種特徵提取手段。這裡我給樓主一個例子:如何讓一個不知道“蘋果”和“梨”是什麼的人能認識“蘋果”呢?有一種方法就是“機器學習”。當他拿一個水果(樣本)過來,我們只需要告訴他是不是“蘋果”(這就是標籤)。第一次他拿了一個大的“梨”過來,我們告訴他不是“蘋果”,第二次他拿了一個小的“梨”過來,我們還是告訴他不是“蘋果”。透過兩次學習他知道了大小不是區分“蘋果”和“梨”的關鍵,第三次他拿了一個帶把的“蘋果”過來,我們告訴他是“蘋果”,第四次他拿了帶把的“梨”過來,我們還是告訴他不是“蘋果”。這兩次他知道帶不帶把也不是區分兩個水果的關鍵。。。。就這樣不斷的累積經驗最終他會學習到“顏色”是區分他們的關鍵,他也就總結了“顏色”是這個任務的特徵。很顯然,這個特徵的提取是透過學習。另一種呢就是直接專家經驗呢,讓一些已經知道的人直接根據經驗去總結。回到訊號特徵的提取手段上面來,第一種就是“用機器學習”來提取特徵,典型的就是“神經網路”和“機器學習”,這類方法學習到的特徵具有很強的針對性,特定適用於這個任務。第二種就是經驗的總結,數學上經驗的總結一般用數學公式來描述,如“均值”,“方差”等等,可以看到一般都是基於一些統計手段進行描述。現實中,這些統計的描述太過寬泛,因此我們並不知道這些描述能不能用於我們特定的任務。比如前面“顏色”這個特徵是人們在處理“蘋果”和“梨”的任務中總結出的一種描述,但是如果換做“櫻桃”和“蘋果”的案例中就可能不適用。所以我們在使用現成總結好的特徵時往往需要有一個過程“特徵篩選”,人為的篩選出一些適用的“描述”作為特徵。回到主題,第二種特徵提取方法本質上人為經驗的數學總結(主要適用統計手段)。另一類看是文字描述,本質還是適用數學手段描述的人工經驗指標。比如,EMD(經驗模態分解)對它想要得到的訊號的“特徵”描述是:

IMF(固有模態函式)的定義

⑴函式在整個時間範圍內,區域性極值點和過零點的數目必須相等,或最多相差一個;

⑵在任意時刻點,區域性最大值的包絡(上包絡線)和區域性最小值的包絡(下包絡線) 平均必須為零

很顯然這兩句話依然是對要區分的訊號的特徵描述。在實際操作過程中,EMD透過“EMD迭代篩分步驟”實現這個特徵的數學話,最終從一個複雜訊號中提取出所有和定義“特徵”相符的訊號。

上面這個例子實際表述了一個現實,

所有的訊號分析和處理都是在做“特徵”分析

。不僅僅是“故障診斷”、“語音識別”等耳熟能詳的任務。舉例:小波分析將訊號分解為和小波基相似的訊號,因此給定的這個小波基函式就是一個“特徵”的描述,要求分解的訊號要和給定的這個基函式一樣。傅立葉分析定義的訊號的特徵就是“頻率”,他將訊號分解為“頻率”不一樣的組合。PCA(主成分分析)使用“方差”作為區分訊號特徵,將訊號分解為多個“方差”不同的訊號。所以所有訊號分析方法背後的本質都有一個“特徵”作為目標的指導。就像我們找東西,都需要知道東西是什麼,這裡的“是什麼”就是透過“特徵”來描述。

先回答這麼多吧。。。。有時間再回答最後這個問題“

哪些訊號特徵可以用來識別訊號?

OK~~本來想出去,遇到下雨了!還是回來把這個問題回答完吧。

實際上,上面我已經回答了這個問題,那些特徵可用主要取決於你的任務。應為即使你直接使用現成總結好的特徵,你依然面臨一個問題“特徵篩選”。這個問題非常常見。以機械故障診斷為例,我們經常能看到很多這種文章:

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

特徵+機器學習

最簡單就是根本不對特徵進行選擇,讓神經網路自己去挑選有用的特徵(透過網路權重大小決定特徵的重要性)。這中策略“非常簡單”,缺陷就是無用特徵太多,網路結構太大,難以訓練,最後“機器學習”的結果可能不是很滿意。如果你想看看第一種技術的一個具體實現案例(包含大量特徵計算),可以在這裡下載到:

https://

github。com/aresmiki/A-c

ase-of-the-intelligent-bearing-fault-diagnosis

另一種就是使用一些技術對選擇的特徵進行“壓縮和篩選”,得到最有差異和富有“資訊”的特徵,再用這些特徵進行學習,這樣網路較小,訓練相對容易,可以提高“機器學習”的效能。但是這些壓縮技術或篩選技術依然是人為經驗的參與,比如基於距離資訊的篩選原則,就是利用了認為經驗“距離是評估特徵好壞的判斷準則”。如果我們能很好好解決大型神經網路的訓練問題,實際上第一種策略是一種萬能方法,因為所謂的壓縮和特徵篩選可以用前幾層神經網路訓練(這裡解釋一下,神經網路本身能逼近任何函式對映,而人為選擇的流行學習或PCA等方法本身就是可以用神經網路等效實現的。這點可以從稀疏自編碼網路等效實現PCA方法看出)。

當然另一種技術就是完全使用機器學習技術,將特徵層也用神經網路實現,最終生成一種端到端的模型,這個網路要完成的功能非常多,特徵表示、特徵篩選壓縮、分類和迴歸等,這樣的網路會非常深,簡稱為“深度神經網路”。這種方法的流程如下:

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

深度學習,不需要認為設計特徵,特徵好壞完全有網路決定,實際是有資料集決定

是不是深度學習技術最簡單,但是本質上網路將特徵表示、特徵壓縮篩選、分類迴歸都用神經網路實現了,而你需要解決的就是準備足夠好的“資料集”、好的“計算平臺”、期待能調到好的引數。

因此你問“

哪些訊號特徵可以用來識別訊號?

”,我的回答是“

不知道

”,因為你沒有給出一個具體的任務。但是我給你回答了一個“

通用公式

”。你遇到實際問題後,我相信你按照我給的三個思路,一定會找到“

好的訊號特徵

”。俗話說“授之以魚,不如授之以漁”。好了,就這麼多吧,夜已深,希望我一晚的“工作”,能幫助到你。不求回報,只求“點贊”,“關注”,“評論指正”。

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?知乎使用者2021-10-14 19:18:25

創造新的特徵是一件十分困難的事情,需要豐富的專業知識和大量的時間。機器學習應用的本質基本上就是特徵工程。 ——Andrew Ng

業內常說資料決定了模型效果上限,而機器學習演算法是透過資料特徵做出預測的,好的特徵可以顯著地提升模型效果。這意味著透過特徵生成(即從資料設計加工出模型可用特徵),是特徵工程相當關鍵的一步。 本文從特徵生成作用、特徵生成(提取)的方法(人工設計、自動化特徵生成)展開闡述並附上程式碼。

1 特徵生成的作用

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

特徵生成是特徵提取中的重要一步,作用在於:

增加特徵的表達能力,提升模型效果;(如體重除以身高就是表達健康情況的重要特徵,而單純看身高或體重對健康情況表達就有限。)

可以融入業務上的理解設計特徵,增加模型的可解釋性;

2 資料情況分析

本文示例的資料集是客戶的資金變動情況,如下資料字典:

cust_no:客戶編號;I1 :性別;I2:年齡 ;E1:開戶日期;

B6 :近期轉賬日期;C1 (字尾_fir表示上個月):存款;C2:存款產品數;

X1:理財存款; X2:結構性存款; label:資金情況上升下降情況。

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

這裡安利一個超實用Python庫,可以一鍵資料分析(資料概況、缺失、相關性、異常值等等),方便結合資料分析報告做特徵生成。

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

# 一鍵資料分析

import pandas_profiling

pandas_profiling。ProfileReport(df)

3 特徵生成的方法

特徵生成方法可以分為兩類:聚合方式、轉換方式。

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

3.1 聚合方式

聚合方式

是指對存在一對多的欄位,將其對應多條記錄分組聚合後統計平均值、計數、最大值等資料特徵。 如以上述資料集,同一cust_no對應多條記錄,透過對cust_no(客戶編號)做分組聚合,統計C1欄位個數、唯一數、平均值、中位數、標準差、總和、最大、最小值,最終得到按每個cust_no統計的C1平均值、最大值等特徵。

# 以cust_no做聚合,C1欄位統計個數、唯一數、平均值、中位數、標準差、總和、最大、最小值

df。groupby(‘cust_no’)。C1。agg([‘count’,‘nunique’,‘mean’,‘median’,‘std’,‘sum’,‘max’,‘min’])

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

此外還可以pandas自定義聚合函式生成特徵,比如加工聚合元素的平方和:

# 自定義分組聚合統計函式

def x2_sum(group):

return sum(group**2)

df。groupby(‘cust_no’)。C1。apply(x2_sum)

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

3.2 轉換方式

轉換方式

是指對欄位間做加減乘除等運算生成資料特徵的過程,對不同欄位型別有不同轉換方式。

3.2.1 數值型別

加減乘除 多個欄位做運算生成新的特徵,這通常需要結合業務層面的理解以及資料分佈的情況,以生成較優的特徵集。

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

import numpy as np

# 前後兩個月資金和

df[‘C1+C1_fir’] = df[‘C1’]+df[‘C1_fir’]

# 前後兩個月資金差異

df[‘C1-C1_fir’] = df[‘C1’]-df[‘C1_fir’]

# 產品數*資金

df[‘C1*C2’] = df[‘C1’]*df[‘C2’]

# 前後兩個月資金變化率

df[‘C1/C1_fir’] = df[‘C1’]/df[‘C1_fir’] - 1

df。head()

多個列統計 直接用聚合函式統計多列的方差、均值等

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

import numpy as np

df[‘C1_sum’] = np。sum(df[[‘C1_fir’,‘C1’]], axis = 1)

df[‘C1_var’] = np。var(df[[‘C1_fir’,‘C1’]], axis = 1)

df[‘C1_max’] = np。max(df[[‘C1_fir’,‘C1’]], axis = 1)

df[‘C1_min’] = np。min(df[[‘C1_fir’,‘C1’]], axis = 1)

df[‘C1-C1_fir_abs’] = np。abs(df[‘C1-C1_fir’])

df。head()

排名編碼特徵 按特徵值對全體樣本進行排序,以排序序號作為特徵值。這種特徵對異常點不敏感,也不容易導致特徵值衝突。

# 排序特徵

df[‘C1_rank’] = df[‘C1’]。rank(ascending=0, method=‘dense’)

df。head()

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

3.2.2 字元型別

擷取 當字元型別的值過多,通常可對字元型別變數做擷取,以減少模型過擬合。如具體的家庭住址,可以擷取字串到城市級的粒度。

字元長度 統計字串長度。如轉賬場景中,轉賬留言的字數某些程度可以刻畫這筆轉賬的型別。

頻次 透過統計字元出現頻次。如欺詐場景中地址出現次數越多,越有可能是團伙欺詐。

# 字元特徵

# 由於沒有合適的例子,這邊只是用程式碼實現邏輯,加工的欄位並無含義。

#擷取第一位字串

df[‘I1_0’] = df[‘I1’]。map(lambda x:str(x)[:1])

# 字元長度

df[‘I1_len’] = df[‘I1’]。apply(lambda x:len(str(x)))

display(df。head())

# 字串頻次

df[‘I1’]。value_counts()

3.2.3 日期型別

常用的有計算日期間隔、周幾、幾點等等。

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

# 日期型別

df[‘E1_B6_interval’] = (df。E1。astype(‘datetime64[ns]’) - df。B6。astype(‘datetime64[ns]’))。map(lambda x:x。days)

df[‘E1_is_month_end’] = pd。to_datetime(df。E1)。map(lambda x :x。is_month_end)

df[‘E1_dayofweek’] = df。E1。astype(‘datetime64[ns]’)。dt。dayofweek

df[‘B6_hour’] = df。B6。astype(‘datetime64[ns]’)。dt。hour

df。head()

4 自動化特徵生成

傳統的特徵工程方法透過人工構建特徵,這是一個繁瑣、耗時且容易出錯的過程。自動化特徵工程是透過Fearturetools等工具,從一組相關資料表中自動生成有用的特徵的過程。對比人工生成特徵會更為高效,可重複性更高,能夠更快地構建模型。

4.1 FeatureTools上手

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

Featuretools是一個用於執行自動化特徵工程的開源庫,它有基本的3個概念: 1)

Feature Primitives(特徵基元)

:生成特徵的常用方法,分為聚合(agg_primitives)、轉換(trans_primitives)的方式。可透過如下程式碼列出featuretools的特徵加工方法及簡介。

import featuretools as ft

ft。list_primitives()

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

2)

Entity(實體)

可以被看作類似Pandas DataFrame, 多個實體的集合稱為

Entityset

。實體間可以根據關聯鍵新增關聯關係

Relationship

# df1為原始的特徵資料

df1 = df。drop(‘label’,axis=1)

# df2為客戶清單(cust_no唯一值)

df2 = df[[‘cust_no’]]。drop_duplicates()

df2。head()

# 定義資料集

es = ft。EntitySet(id=‘dfs’)

# 增加一個df1資料框實體

es。entity_from_dataframe(entity_id=‘df1’,

dataframe=df1,

index=‘id’,

make_index=True)

# 增加一個df2資料實體

es。entity_from_dataframe(entity_id=‘df2’,

dataframe=df2,

index=‘cust_no’)

# 新增實體間關係:透過 cust_no鍵關聯 df_1 和 df 2實體

relation1 = ft。Relationship(es[‘df2’][‘cust_no’], es[‘df1’][‘cust_no’])

es = es。add_relationship(relation1)

3)

dfs(深度特徵合成)

: 是從多個數據集建立新特徵的過程,可以透過設定搜尋的最大深度(max_depth)來控制所特徵生成的複雜性

## 執行DFS特徵衍生

features_matrix,feature_names = ft。dfs(entityset=es,

target_entity=‘df2’,

relationships = [relation1],

trans_primitives=[‘divide_numeric’,‘multiply_numeric’,‘subtract_numeric’],

agg_primitives=[‘sum’],

max_depth=2,n_jobs=1,verbose=-1)

想用機器學習做訊號分析,常用的特徵提取手段有哪些,哪些訊號特徵是可以用來提取識別的?

4.2 FeatureTools問題點

4。2。1 記憶體溢位問題 Fearturetools是透過工程層面暴力生成所有特徵的過程,當資料量大的時候,容易造成記憶體溢位。解決這個問題除了升級伺服器記憶體,減少njobs,還有一個常用的是透過只選擇重要的特徵進行暴力衍生特徵。

4。2。2 特徵維度爆炸 當原始特徵數量多,或max_depth、特徵基元的種類設定較大,Fearturetools生成的特徵數量巨大,容易維度爆炸。這是就需要考慮到特徵選擇、特徵降維,常用的特徵選擇方法可以參考上一篇文章:

Python特徵選擇

注:本文原始碼連結:

【Github】

標簽: 特徵  df  C1  訊號  cust