【數(shù)據(jù)分析】-005-數(shù)據(jù)預(yù)處理-數(shù)據(jù)變換

數(shù)據(jù)變換

數(shù)據(jù)變換主要是對數(shù)據(jù)進行規(guī)范化處理,將數(shù)據(jù)轉(zhuǎn)換成“適當(dāng)?shù)摹毙问剑赃m用于挖掘任務(wù)及算法的需要。

簡單函數(shù)變換

簡單函數(shù)變換是對原始數(shù)據(jù)進行某些數(shù)學(xué)函數(shù)變換,常用的變換包括平方缘揪、開方耍群、取對數(shù)义桂、差分運算等,即:
x'=x^2\\ x'=\sqrt{x}\\ x'=log(x)\\ \nabla f(x_k)=f(x_{k+1})-f(x_k)
簡單的函數(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)換公式如下:
x^*=\frac{x-min}{max-min}
其中抖韩,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)化公式為:
x^* = \frac{x-\overline{x}}{\sigma}
其中\overline{x}為原始數(shù)據(jù)的均值,\sigma為原始數(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)化公式為:
x^* = \frac{x}{10^k}

#  數(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)造的屬性線損率按如下公式計算瓢省。

線損率=\frac{供入電量-供出電量}{供入電量}*100\%
線損率的正常范圍一般在 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ù)滿足 \psi (0)=f_{\psi}dt=0 。 常用的小波基有Haar小波基堪侯、db系列小波基等嚎尤。
(3)小波變換
對小波基函數(shù)進行伸縮和平移變換:
\psi_{a,b}(t)=\frac{1}{\sqrt{|a|}}\psi (\frac{t-b}{a})
其中,a為伸縮因子伍宦,b為平移因子芽死。
任意函數(shù)f(t)的連續(xù)小波變換(CWT)為:
w_f(a,b)=|a|^{-1/2}\int f(t)\psi(\frac{t-b}{a})dt
可知,連續(xù)小波變換為 f(t)\rightarrow w_f(a,b)的映射次洼,對小波基函數(shù)\psi (t)增加約束條件C_{\psi}=\int \frac{|\hat{\psi}(t)|^2}{t}dt,就可以
w_f(a,b) 逆變換得到f(t)关贵。其中照\hat{\psi}(t) 為\psi(t)的傅里葉變換。
其逆變換為:
f(t)=\frac{1}{C_{\psi}}\iint \frac{1}{a^2}\psi(\frac{t-b}{a})da \cdot db
(4)基于小波變換的多尺度空間能量分布特征提取方法
應(yīng)用小波分析技術(shù)可以把信號在各頻率波段中的特征提取出來卖毁,基于小波變換的多尺度空間能量分布特征提取方法是對信號進行頻帶分析揖曾,再分別以計算所得的各個頻帶的能量作為特征向量。
信號f(t)的二進小波分解可表示為:
f(t)=A^j+\sum D^j
其中A是近似信號,為低頻部分炭剪;D是細節(jié)信號练链,為高頻部分,此時信號的頻帶分布如圖 4-6 所
示奴拦。
信號的總能量為:E=EA_j+\sum ED_j
選擇第j層的近似信號和各層的細節(jié)信號的能量作為特征媒鼓,構(gòu)造特征向量: F=[EA_j,ED_1,ED_2,...,ED_j]

利用小波變換可以對聲波信號進行特征提取,提取出可以代表聲波信號的向量數(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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晾剖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子梯嗽,更是在濱河造成了極大的恐慌齿尽,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灯节,死亡現(xiàn)場離奇詭異循头,居然都是意外死亡,警方通過查閱死者的電腦和手機炎疆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門卡骂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人形入,你說我怎么就攤上這事全跨。” “怎么了亿遂?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵浓若,是天一觀的道長。 經(jīng)常有香客問我蛇数,道長挪钓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任耳舅,我火速辦了婚禮诵原,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己绍赛,他們只是感情好蔓纠,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吗蚌,像睡著了一般腿倚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚯妇,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天敷燎,我揣著相機與錄音,去河邊找鬼箩言。 笑死硬贯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陨收。 我是一名探鬼主播饭豹,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼务漩!你這毒婦竟也來了拄衰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤饵骨,失蹤者是張志新(化名)和其女友劉穎翘悉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體居触,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡妖混,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了轮洋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片源葫。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖砖瞧,靈堂內(nèi)的尸體忽然破棺而出息堂,到底是詐尸還是另有隱情,我是刑警寧澤块促,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布荣堰,位于F島的核電站,受9級特大地震影響竭翠,放射性物質(zhì)發(fā)生泄漏振坚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一斋扰、第九天 我趴在偏房一處隱蔽的房頂上張望渡八。 院中可真熱鬧啃洋,春花似錦、人聲如沸屎鳍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逮壁。三九已至孵坚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窥淆,已是汗流浹背卖宠。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忧饭,地道東北人扛伍。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像词裤,于是被迫代替她去往敵國和親刺洒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容