數(shù)據(jù)變換
數(shù)據(jù)變換主要是對數(shù)據(jù)進行規(guī)范化處理,將數(shù)據(jù)轉(zhuǎn)換成“適當(dāng)?shù)摹毙问剑赃m用于挖掘任務(wù)及算法的需要。
簡單函數(shù)變換
簡單函數(shù)變換是對原始數(shù)據(jù)進行某些數(shù)學(xué)函數(shù)變換,常用的變換包括平方缘揪、開方耍群、取對數(shù)义桂、差分運算等,即:
簡單的函數(shù)變換常用來將不具有正態(tài)分布的數(shù)據(jù)變換成具有正態(tài)分布的數(shù)據(jù)蹈垢。
在時間序列分析中慷吊,有時簡單的對數(shù)變換或者差分運算就可以將非平穩(wěn)序列轉(zhuǎn)換成平穩(wěn)序列。
規(guī)范化
數(shù)據(jù)規(guī)范化(歸一化)處理是數(shù)據(jù)挖掘的一項基礎(chǔ)工作曹抬。不同評價指標(biāo)往往具有不同的量綱溉瓶,數(shù)值間的差別可能很大,不進行處理可能會影響到數(shù)據(jù)分析的結(jié)果谤民。為了消除指標(biāo)之間的量綱和取值范圍差異的影響堰酿,需要進行標(biāo)準(zhǔn)化處理,將數(shù)據(jù)按照比例進行縮放张足,使之落入一個特定的區(qū)域触创,便于進行綜合分析。
數(shù)據(jù)規(guī)范化對于基于距離的挖掘算法尤為重要为牍。
(1)最小-最大規(guī)范化
最小-最大規(guī)范化也稱為離差標(biāo)準(zhǔn)化哼绑,是對原始數(shù)據(jù)的線性變換,將數(shù)值值映射到[0,1]之間碉咆。轉(zhuǎn)換公式如下:
其中抖韩,max為樣本數(shù)據(jù)的最大值,淅沅為樣本數(shù)據(jù)的最小值疫铜。min為極差茂浮。離差標(biāo)準(zhǔn)化保留了原來數(shù)據(jù)中存在的關(guān)系,是消除量綱和數(shù)據(jù)取值范圍影響的最簡單方法块攒。這種處理方法的缺點是若數(shù)值集中且某個數(shù)值很大励稳,則規(guī)范化后各值會接近于0,并且將會相差不大。若將來遇到超過目前屬性[min,max]范圍的時候囱井,會引起系統(tǒng)出錯驹尼,需要重新確定min和max。
(2)零-均值規(guī)范化
零-均值規(guī)范化也稱標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化庞呕,經(jīng)過處理的數(shù)據(jù)的均值為0,標(biāo)準(zhǔn)差為1新翎。轉(zhuǎn)化公式為:
其中為原始數(shù)據(jù)的均值,
為原始數(shù)據(jù)的標(biāo)準(zhǔn)差住练,是當(dāng)前用得最多的數(shù)據(jù)標(biāo)準(zhǔn)化方法地啰。
(3)小數(shù)定標(biāo)規(guī)范化
通過移動屬性值的小數(shù)位數(shù),將屬性值映射到[-1,1]之間讲逛,移動的小數(shù)位數(shù)取決于屬性值絕對值的最大值亏吝。轉(zhuǎn)化公式為:
# 數(shù)據(jù)規(guī)范化代碼
import pandas as pd
import numpy as np
datafile = '../data/normalization_data.xls' #參數(shù)初始化
data = pd.read_excel(datafile, header = None) #讀取數(shù)據(jù)
print('最小-最大規(guī)范化')
print((data - data.min())/(data.max() - data.min())) #最小-最大規(guī)范化
print('零-均值規(guī)范化')
print((data - data.mean())/data.std()) #零-均值規(guī)范化
print('小數(shù)定標(biāo)規(guī)范化')
print(data/10**np.ceil(np.log10(data.abs().max()))) #小數(shù)定標(biāo)規(guī)范化
連續(xù)屬性離散化
一些數(shù)據(jù)挖掘算法,特別是某些分類算法(如ID3算法盏混、Apriori算法等)蔚鸥,要求數(shù)據(jù)是分類屬性形式惜论。這樣,常常需要將連續(xù)屬性變換成分類屬性止喷,即連續(xù)屬性離散化馆类。
1.離散化的過程
連續(xù)屬性的離散化就是在數(shù)據(jù)的取值范圍內(nèi)設(shè)定若干個離散的劃分點,將取值范圍劃分為一些離散化的區(qū)間弹谁,最后用不同的符號或整數(shù)值代表落在每個子區(qū)間中的數(shù)據(jù)值乾巧。所以,離散化涉及兩個子任務(wù):確定分類數(shù)以及如何將連續(xù)屬性值映射到這些分類值预愤。
2.常用的離散化方法
常用的離散化方法有等寬法沟于、等頻法和(一維)聚類。
(1)等寬法
將屬性的值域分成具有相同寬度的區(qū)間鳖粟,區(qū)間的個數(shù)由數(shù)據(jù)本身的特點決定社裆,或者由用戶指定,類似于制作頻率分布表向图。
(2)等頻法
將相同數(shù)量的記錄放進每個區(qū)間泳秀。
這兩種方法簡單,易于操作榄攀,但都需要人為地規(guī)定劃分區(qū)間的個數(shù)嗜傅。同時,等寬法的缺點在于它對離群點比較敏感檩赢,傾向于不均勻地把屬性值分布到各個區(qū)間吕嘀。有些區(qū)間包含許多數(shù)據(jù),而另外一些區(qū)間的數(shù)據(jù)極少贞瞒,這樣會嚴(yán)重?fù)p壞建立的決策模型偶房。等頻法雖然避免了上述問題的
產(chǎn)生,卻可能將相同的數(shù)據(jù)值分到不同的區(qū)間以滿足每個區(qū)間中固定的數(shù)據(jù)個數(shù)军浆。
(3)基于聚類分析的方法
一維聚類的方法包括兩個步驟棕洋,首先將連續(xù)屬性的值用聚類算法(如 K-Means 算法)進行聚類,然后再將聚類得到的簇進行處理乒融,合并到一個簇的連續(xù)屬性值并做同一標(biāo)記掰盘。聚類分析的離散化方法也需要用戶指定簇的個數(shù),從而決定產(chǎn)生的區(qū)間數(shù)赞季。
中醫(yī)證型連續(xù)屬性離散化數(shù)據(jù)
肝氣郁結(jié)證型系數(shù) | 0.056 | 0.488 | 0.107 | 0.322 | 0.242 | 0.389 |
---|
# 數(shù)據(jù)規(guī)范化
import pandas as pd
from sklearn.cluster import KMeans # 引入KMeans
import matplotlib.pyplot as plt
%matplotlib inline
datafile = '../data/discretization_data.xls' # 參數(shù)初始化
data = pd.read_excel(datafile) # 讀取數(shù)據(jù)
data = data[u'肝氣郁結(jié)證型系數(shù)'].copy()
k = 4
d1 = pd.cut(data, k, labels=range(k)) # 等寬離散化愧捕,各個類比依次命名為0,1,2,3
# 等頻率離散化
w = [1.0*i/k for i in range(k+1)]
w = data.describe(percentiles=w)[4:4+k+1] # 使用describe函數(shù)自動計算分位數(shù)
w[0] = w[0]*(1-1e-10)
d2 = pd.cut(data, w, labels=range(k))
kmodel = KMeans(n_clusters=k, n_jobs=4) # 建立模型,n_jobs是并行數(shù)申钩,一般等于CPU數(shù)較好
kmodel.fit(data.values.reshape((len(data), 1))) # 訓(xùn)練模型
c = pd.DataFrame(kmodel.cluster_centers_).sort_values(0) # 輸出聚類中心次绘,并且排序(默認(rèn)是隨機序的)
w = c.rolling(2).mean().iloc[1:] # 相鄰兩項求中點,作為邊界點
w = [0] + list(w[0]) + [data.max()] # 把首末邊界點加上
d3 = pd.cut(data, w, labels=range(k))
def cluster_plot(d, k): # 自定義作圖函數(shù)來顯示聚類結(jié)果
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負(fù)號
plt.figure(figsize=(8, 3))
for j in range(0, k):
plt.plot(data[d == j], [j for i in d[d == j]], 'o')
plt.ylim(-0.5, k-0.5)
return plt
cluster_plot(d1, k).show()
cluster_plot(d2, k).show()
cluster_plot(d3, k).show()
分別用等寬法、等頻法和(一維)聚類對數(shù)據(jù)進行離散化邮偎,將數(shù)據(jù)分成4類罗洗,然后將每一類記為同一個標(biāo)識,如分別記為Al钢猛、A2、A3轩缤、A4,再進行建模命迈。
屬性構(gòu)造
在數(shù)據(jù)挖掘的過程中,為了提取更有用的信息火的,挖掘更深層次的模式壶愤,提高挖掘結(jié)果的精度,我們需要利用已有的屬性集構(gòu)造出新的屬性馏鹤,并加入到現(xiàn)有的屬性集合中征椒。
- 防竊漏電診斷建模時
已有的屬性包括供入電量、供出電量(線路上各大用戶用電量之和)湃累。理論上供入電量和供出電量應(yīng)該是相等的勃救,但是由于在傳輸過程中存在電能損耗,使得供入電量略大于供出電量治力,如果該條線路上的一個或多個大用戶存在竊漏電行為蒙秒,會使得供入電量明顯大于供出電量。反過來宵统,為了判斷是否有大用戶存在竊漏電行為晕讲,可以構(gòu)造出一個新的指標(biāo)一線損率,該過程就是構(gòu)造屬性马澈。新構(gòu)造的屬性線損率按如下公式計算瓢省。
線損率的正常范圍一般在 3%?15%,如果遠遠超過該范圍,就可以認(rèn)為該條線路的大用戶很可能存在竊漏電等用電異常行為痊班。
#線損率屬性構(gòu)造
import pandas as pd
#參數(shù)初始化
inputfile= '../data/electricity_data.xls' #供入供出電量數(shù)據(jù)
outputfile = '../tmp/electricity_data.xls' #屬性構(gòu)造后數(shù)據(jù)文件
data = pd.read_excel(inputfile) #讀入數(shù)據(jù)
data[u'線損率'] = (data[u'供入電量'] - data[u'供出電量'])/data[u'供入電量']
# data.to_excel(outputfile, index = False) #保存結(jié)果
data
小波變換
小波變換的同是一種新型的數(shù)據(jù)分析工具勤婚,是近年來興起的信號分析手段。小波分析的理論和方法在信號處理辩块、圖像處理蛔六、語音處理、模式識別废亭、量子物理等領(lǐng)域得到越來越廣泛的應(yīng)用国章,它被認(rèn)為是近年來在工具及方法上的重大突破。小波變換具有多分辨率的特點豆村,在時域和頻域都具有表征信號局部特征的能力液兽,通過伸縮和平移等運算過程對信號進行多尺度聚焦分析,提供了一種非平穩(wěn)信號的時頻分析手段,可以由粗及細地逐步觀察信號四啰,從中提取有用信息宁玫。
能夠刻畫某個問題的特征量往往是隱含在一個信號中的某個或者某些分量中,小波變換可以把非平穩(wěn)信號分解為表達不同層次柑晒、不同頻帶信息的數(shù)據(jù)序列欧瘪,即小波系數(shù)。選取適當(dāng)?shù)男〔ㄏ禂?shù),即完成了信號的特征提取。下面將介紹基于小波變換的信號特征提取方法番枚。
(1)基于小波變換的特征提取方法
基于小波變換的特征提取方法主要有:基于小波變換的多尺度空間能量分布特征提取、基于小波變換的多尺度空間的模極大值特征提取芥被、基于小波包變換的特征提取、基于適應(yīng)性小波神經(jīng)網(wǎng)絡(luò)的特征提取坐榆。
- 基于小波變換的特征提取方法
基于小波變換的特征提取方法 | 基于小波變換的特征提取方法 |
---|---|
基于小波變換的多尺度空間能量分布特征提取方法 | 各尺度空間內(nèi)的平滑信號和細節(jié)信號能提供原始信號的時頻局域信息拴魄,特別是能提供不同頻段上信號的構(gòu)成信息。把不同分解尺度上信號的能量求解出來席镀,就可以將這些能量尺度順序排列匹中,形成特征向量供識別用 |
基于小波變換的多尺度空間的模極大值特征提取方法 | 利用小波變換的信號局域化分析能力,求解小波變換的模極大值特性來檢測信號的局部奇異性豪诲,將小波變換模極大值的尺度參數(shù)s职员、平移參數(shù)t及其幅值作為目標(biāo)的特征量 |
基于小波包變換的特征提取方法 | 利用小波分解,可將時域隨機信號序列映射為尺度域各子空間內(nèi)的隨機系數(shù)序列跛溉,按小波包分解得到的最佳子空間內(nèi)隨機系數(shù)序列的不確定性程度最低焊切, 將最佳子空間的嫡值及最佳子空間在完整二叉樹中的位置參數(shù)作為特征量,可以用于目標(biāo)識別 |
基于適應(yīng)性小波神經(jīng)網(wǎng)絡(luò)的特征提取方法 | 基于適應(yīng)性小波神經(jīng)網(wǎng)絡(luò)的特征提取方法可以把信號通過分析小波擬合表示芳室,進行特征提取 |
(2)小波基函數(shù)
小波基函數(shù)『種朝局部姓的函數(shù)专肪,并且平均值為0,小波基函數(shù)滿足 。 常用的小波基有Haar小波基堪侯、db系列小波基等嚎尤。
(3)小波變換
對小波基函數(shù)進行伸縮和平移變換:
其中,a為伸縮因子伍宦,b為平移因子芽死。
任意函數(shù)f(t)的連續(xù)小波變換(CWT)為:
可知,連續(xù)小波變換為 的映射次洼,對小波基函數(shù)
增加約束條件
,就可以
由 逆變換得到f(t)关贵。其中照
的傅里葉變換。
其逆變換為:
(4)基于小波變換的多尺度空間能量分布特征提取方法
應(yīng)用小波分析技術(shù)可以把信號在各頻率波段中的特征提取出來卖毁,基于小波變換的多尺度空間能量分布特征提取方法是對信號進行頻帶分析揖曾,再分別以計算所得的各個頻帶的能量作為特征向量。
信號f(t)的二進小波分解可表示為:
其中A是近似信號,為低頻部分炭剪;D是細節(jié)信號练链,為高頻部分,此時信號的頻帶分布如圖 4-6 所
示奴拦。
信號的總能量為:
選擇第j層的近似信號和各層的細節(jié)信號的能量作為特征媒鼓,構(gòu)造特征向量:
利用小波變換可以對聲波信號進行特征提取,提取出可以代表聲波信號的向量數(shù)據(jù)错妖,即完成從聲波信號到特征向量數(shù)據(jù)的變換隶糕。本例利用小波函數(shù)對聲波信號數(shù)據(jù)進行分解,得到5個層次的小波系數(shù)站玄。利用這些小波系數(shù)求得各個能量值,這些能量值即可作為聲波信號的特征數(shù)據(jù)濒旦。
#小波變換特征提取代碼
#參數(shù)初始化
inputfile= '../data/leleccum.mat' #提取自Matlab的信號文件
from scipy.io import loadmat #mat是MATLAB專用格式株旷,需要用loadmat讀取它
mat = loadmat(inputfile)
signal = mat['leleccum'][0]
print("signal:")
print(signal)
import pywt #導(dǎo)入PyWavelets
coeffs = pywt.wavedec(signal, 'bior3.7', level = 5)
#返回結(jié)果為level+1個數(shù)字,第一個數(shù)組為逼近系數(shù)數(shù)組尔邓,后面的依次是細節(jié)系數(shù)數(shù)組
print('coeffs:')
print(coeffs)