羅長銀,陳學斌*,宋尚文,劉 洋
(1. 華北理工大學理學院,唐山 06300;2. 河北省數據科學與應用重點實驗室,唐山 06300;3. 唐山市數據科學實驗室,唐山 06300)
隨著大數據時代的到來,隱藏在大數據下面的價值信息成為人們對數據進行操作的源動力。根據實際的需求中,可以總結為三個方面:要全體不要抽樣;要效率以及各方準確度良好不要絕對的精確,要相關不要因果[1]。近年來,數據儲量從原來4.4ZB到現在的 44ZB,海量數據使得人們在處理問題時也將面臨巨大的挑戰,但同時也必須要面臨更加復雜的數據環境。數據預處理作為數據挖掘、數據分析、數據安全等研究前的重要一環,對數據進行合理有效的預處理操作可以使得數據在存貯、計算等方面都會減少相應的復雜度,文獻[2]對醫院日志文件中的數據進行過濾及填充,使模型的準確度得到提升。文獻[4]通過構建規則庫和樣本庫,達到相應的數據預處理方法進行自動化的數據預處理,可以提升模型的準確度,但沒有考慮數據的安全性與有效性,本文主要從數據清洗、數據歸約兩部分對數據進行處理,使其能夠在安全的前提下,實現對數據的高效利用。
大數據的環境下,使得數據預處理成為數據挖掘等技術發展的不可或缺的一環,數據預處理技術包括數據清洗、數據集成、數據規約、數據變換四個部分[3],其中數據清洗包括重復數據的清洗[5]、缺失值的填充[6]、以及對一些異常值的處理[7],本文只針對數據清洗和數據規約對數據做了相應的預處理,經實驗對比,經過處理后的數據既能滿足數據挖掘的需求,同時也降低了復雜度和成本。
數據清洗[8-10]是完成格式的標準化、對空缺值進行處理、清除重復的數據以及對異常數據進行錯誤糾正和清除等操作。
數據規約[11-14]:數據規約是針對原始數據集中地屬性和記錄,實現有效的數據采集和對應的屬性選擇,盡可能的降低數據規模,可以在有效的解決問題的同時減少時間復雜度與空間復雜度,可以通過聚類、屬性約簡、以及數據欠采樣以及將冗余特征值刪除等方式,在最大限度地保證數據的原有特征的基礎上,實現對數據量的有效精簡。數據規約是在保證原有數據的完整性和有效性的基礎上,在數據庫以及數據表中提取出特征性的數據集合的基礎上進行的。
Jaccardx相似系數[15]:用于比較有限樣本集之間的相似性與差異性。Jaccard系數值越大,樣本相似度越高,用Jaccard(A,B)表示。與Jaccard系數相關的指標叫做Jaccard距離,用于描述集合之間的不相似度。Jaccard距離越大,樣本相似度越低,用
數據約簡[16]:數據約簡包括兩個方面:基于特征選擇約簡和基于實例選擇約簡。基于特征選擇的數據約簡是指在所有特征中選擇某些重要的、有代表性的特征,去除對處理結果小甚至無影響的特征,已達到提取主要特征的目的。如主成分分析法等。基于實例選擇的數據約簡是從原始數據集中選擇具有代表性的實例,去除冗余的和相似性較大的數據,得到相對較小的約簡數據集,已達到減少數據量和改變數據分布的目的。如基于樣本距離等數據約簡方法。
牛頓插值法[17]:每增加一個點,不會導致之前的重新計算,只需要算和新增點有關的即可,牛頓插值法為:

馬氏距離[18]:表示數據的協方差距離,與歐氏距離不同的是它考慮到各種特性之間的聯系,并且是尺度無關的,即獨立于測量尺度。對于一個均值為

協方差矩陣為∑ 的多變量矢量:

其馬氏距離為:

因其數據量的增加使得數據冗余、錯誤等情況的發生也在不斷的增加,利用各種清洗技術,得到其“有效”的數據集合。本文的數據清洗技術將從重復數據的處理與填充缺失值以及在處理異常值三個方面對數據進行合理操作,使得數據在滿足基本安全的情況下能夠使得減少數據量增大所帶來的復雜度。
為了提升數據挖掘的速度和準確度,去除數據中的重復記錄是很有必要的。常見的數據類型為數值型數據以及字符型數據和符號型數據,對于數值型數據,我們采用Jaccard系數來度量數值型數據的相似性,Jaccard系數定義如(1)所示:

其中,X,Y均為每一個數值型數據所構成的集合。當Jaccardt>時可以說兩個數值型數據的相似程度高,當Jaccardt≤時,說明二者數據的相似程度比較低。
對于字符型數據來說,利用文獻[2]中其改進的字段匹配算法對字符型數據計算其分詞匹配度與權值匹配度,本文對其分詞匹配度的計算方法進行改進,提出了相對匹配度(R ppd- )的算法,如下公式所示:

K為兩個字符串的相同的字數,當A中的字符匹配B中的字符時,則分母為B字符串中的字符的個數,即為|B|,當B中的字符匹配A中的字符時,則分母為|A|字符串中的字符的個數,即為|A|。當相對匹配度的值大于0.8時,則說明,字符串A相對字符串B來說,為高度的相似,這時需要對兩個數據進行仔細的比對,看是否為重復數據,當此字符串完全相同時,還需進一步的比對此樣本的其他屬性信息,例如:名字可能存在相同,生日不同的情況,但如果生日也相同,此概率相對較小,即使最終結果為不同,也可能損失了時間以及效率復雜度。
在數據集中,缺失值是經常出現的,對于不同的樣本來說,可能缺失的是一個屬性值數據,也可能缺失的是一個樣本中的多個屬性值數據,本文只對缺失值少于4個以下的數據缺失值進行補充,對于同一樣本中缺失的屬性值數據在2個(含2個)以下時,采用拉普拉斯分布中的數值來填充缺失值,在不會對原始數據產生大的影響的同時,添加此缺失值,也對數據提供了一定的安全性,對于同一樣本中缺失的屬性值數據大于4個的,將對其采用傳統的方法,對其刪除此樣本,同時也可以減少數據量,減少計算復雜度。
對于缺失的屬性值的數據來說,本文采用牛頓插值法來填充缺失的數據值,可用均方誤差來檢驗填充數值的誤差,公式為:

對于任何的數據集來說,異常值的數據沒有太多的研究價值,故必須去除數據集中所存在的孤立點,本文基于馬式距離的公式來計算數據集中的某一點與其他各個點之間的距離,并計算其協方差矩陣,根據協方差矩陣來判定那些數據導致協方差矢量變大,將協方差矩陣中數值較大的值所對應的數據刪除即可,公式如下所示:

對于目前的數據存儲量來說,在保證原有數據的完整性與有效性的基礎上,采用聚類以及將冗余屬性刪除等形式,將降低數據規模,以此達到精簡數據量的目的。本文采用數據約簡的方法,在減少數據庫中數據表的同時減少冗余的屬性。
數據約簡包括樣例約簡和屬性約簡,對于樣例約簡,本文采用文獻[19]中的數據欠采樣的方法,基本思想為:先對數據集進行聚類,得到聚類簇集合Q = { Q1, Q2,… ,Qn},然后根據聚類后的不平衡比例系數確定采樣倍率 N,并對每個聚類簇進行數據抽樣,最后得到欠采樣后的數據集,欠采樣倍率N的計算方法如下:

其中,i表示將連續值的數據離散成n個,m表示為在某個區間范圍內對數據集聚成的個數。而屬性約簡的方法為:通過計算各個屬性之間的距離,將距離較遠的屬性去除,在計算其對整個數據集的影響,如果影響較小或無影響,則可以刪除此屬性,可以達到減少數據量的目的,采用主成分分析法(PCA)[20]來實現對屬性的約簡,主要思想:先將原始數據集按列組成n行m列矩陣X,將μ的每一行進行進行零均值化,即減去這一行的均值,再求特征值及對應的特征向量,將特征向量按對應特征值的大小從上到下排成矩陣,取前k行組成矩陣P,Y PX= 即為降維到k維后的數據。
本文在數據預處理階段是基于 python語言和pycharm集成軟件開發實現。實驗硬件環境為:Inter(R) Core i5-4200M CPU 2.50 GHz處理器,內存8 G;操作系統為windows 10.在實驗數據方面,采用從 https://archive.ics.uci.edu/ml/index.php下載的數據集。
實驗的數據采取隨機破壞20%的數據作為初始原始數據集,其數據變化如圖1所示,數據的不斷變化反映數據集的多樣性,同時也可驗證本文所采取的對數據預處理階段的泛化能力。
實驗分為四部分,第一部分為:從UCI上下載相應的數據集,并隨機對下載的數據集破壞100次且每次破壞20%表示多樣數據對本文所采取的數據預處理階段對模型的影響,第二部分為:將破壞的數據進行填充處理,針對缺失值為2個以下的,因牛頓插值法在增減節點數目時,只需增減相應節點處的計算量的優點,將缺失值在2至4個時,采用牛頓插值法,可以在減少計算量的同時準確度得到提升。第三部分為:去掉重復數值型數據時,將任意兩個樣本中多個屬性的相似度均超過閾值,則這兩個樣本重復,將其刪除(采取Jaccard系數作為數值型屬性的比對,Rppd作為字符型屬性比對),第四部分為:從樣本約簡和屬性約簡兩方面對數據規模進行簡化的同時還能提升模型精度,進而避免過擬合問題,其每個階段的數據所建立模型的準確度如表1所示。

圖1 隨機變化的數據集Fig.1 Randomly changing dataset
為驗證本文所采取的數據預處理對模型的影響,對完整數據集隨機破壞100次且每次的比例為20%作為原始數據集,同時使用 CART分類樹、支持向量機、線性分類器三種作為檢驗模型,圖2表示三種模型在100次隨機數據集上的變化情況,將模型在破壞100次的數據上得分的平均值作為模型的準確度,則在原始數據集上CART分類樹的準確度為 92.51%,支持向量機的得分為 50.88%,線性分類器的準確度為54.55%。

圖2 3種檢驗模型在原始數據集上的變化圖Fig.2 The changes of the three test models on the original data set
填充缺失值是數據清洗中重要的部分,本文對缺失值少于2個的情況,將每個屬性采用拉圖拉斯分布進行填充,對于缺失值在2至4個的情況,采用牛頓插值法同樣的對每個屬性進行填充,圖3表示的是三種檢驗模型100次在缺失值填充后的數據集上的變化圖。在缺失值填充后的數據集上,CART分類樹的準確度為95.24%,支持向量機的準確度為94.7%,線性分類器的準確度為 98.44%,與原始原始的結果相比較,三種模型在缺失值填充后的數據集上的準確度得到大幅上漲,其中線性分類器與支持向量機均上漲約43.82%,CART分類樹上漲2.73%。

圖3 三種檢驗模型在缺失值填充后的數據集上的變化圖Fig.3 The change chart of the three test models on the data set after the missing value is filled
去除重復數據能降低模型的復雜度,本文對于數值型數據采用 Jaccard系數作為任意兩個樣本的比對,對于字符型數據采用 Rppd系數作為任意兩個樣本的比對,只有當數據集中多個屬性值的對比系數均大于閾值方可作為重復數據處理,圖4為三種檢驗模型100次在去除重復數據后的數據集上的變化圖。CART分類樹的準確度為95.45%,支持向量機的準確度為 94.74%,線性分類器的準確度為98.61%,與填充缺失值后的數據集相比較,三種模型的準確度均上漲。

圖4 三種檢驗模型在去除重復數據后的數據集上的變化圖Fig.4 The change chart of the three test models on the data set after removing duplicate data
數據規約可降低模型過擬合的可能,本文分別從樣例約簡和屬性約簡兩方面減少數據規模的同時保證模型的準確度,其結果如圖5所示。CART分類樹的準確度為 97.42%,支持向量機的準確度為99.69%,線性分類器的準確度為99.98%,與去除重復數據后的數據相比較,三種模型的準確度再次上漲,且三種模型的準確度均在97%以上。

圖5 三種檢驗模型在數據規約處理后的數據集上的變化圖Fig.5 The changes of the three test models on the data set after data reduction processing
圖6 表示數據清洗、數據規約兩方面的數據預處理技術對CART分類器的影響,得到原始數據集上 CART分類器準確度為 92.51%,缺失值填充后CART分類器準確度為92.54%,去除重復值后CART分類器準確度為 95.45%,聚類數據處理后數據集CART分類器準確度為97.43%,可以得出數據預處理技術可以提升CART分類器的準確度。

圖6 CART分類樹在數據預處理各階段的變化圖Fig.6 CART classification tree at various stages of data preprocessing
圖7 表示數據清洗、數據規約兩方面的數據預處理技術對支持向量機的影響,得到原始數據集上支持向量機準確度為50.89%,缺失值填充后支持向量機準確度為 94.7%,去除重復值后支持向量機準確度為94.74%,聚類數據處理后數據集支持向量機準確度為99.69%,可以得出數據預處理技術可以大幅度提升支持向量機的準確度。

圖7 支持向量機在數據預處理各階段的變化圖Fig.7 Support vector machine changes at various stages of data preprocessing
圖8 表示數據清洗、數據規約兩方面的數據預處理技術對線性分類器的影響,得到原始數據集上線性分類器準確度為54.55%,缺失值填充后線性分類器準確度為98.44%,去除重復值后線性分類器準確度為98.61%,聚類數據處理后數據集線性分類器準確度為99.98%,可以得出數據預處理技術可以提升線性分類器的準確度。

圖8 線性分類器在數據預處理各階段的變化圖Fig.8 The change graph of the linear classifier at each stage of data preprocessing
本文采用方差[18]來表示模型的穩定性,其中方差公式為:

其中n代表次數,m代表100次的平均值,公式為:

經計算結果如表2所示。
由上表可知,三種驗證模型在數據預處理各階段的均值均在上升,由此可說明本文說采取的數據預處理技術將會提升模型的準確度,且三種模型在數據預處理各階段的方差均在0.4%以下,說明本文所采取的數據預處理技術的穩定性較好,符合要求。

表2 數據預處理結果比較表Tab.2 Comparison table of data preprocessing results
本文從數據清洗和數據規約兩方面對數據預處理技術進行處理,首先將完整數據集隨機破壞20%作為本文的原始數據集,反映數據多樣性對模型的影響,然后對原始數據集填充缺失值,對于缺失兩個以下的采取拉普拉斯分布對每個屬性進行填充,對于缺失2至4個的情況采用牛頓插值法填充,可以得模型的準確度上升,尤其是支持向量機和線性分類器,漲幅均超過40%,然后模型在去除重復值的數據上進行訓練,得其準確度再次上升,再對數據進行樣例約簡和屬性約簡,從而在避免過擬合的同時也能提高模型的準確度,經三種驗證模型的得分均超過97%,可說明本文所采取的數據預處理的措施是真實有效的。
本文針對數據清洗和數據規約兩方面對數據預處理技術進行處理,原始數據集經過填充缺失值、去除重復值、樣例約簡和屬性約簡四步預處理后,三種驗證模型的準確度都得到大幅提升,同時其各階段模型模型的得分均在0.4%以下,說明模型的穩定性較好,所采取的數據預處理的措施是真實有效的。與傳統的數據預處理技術相比,主要有2點改進:第一點是沒有考慮數據預處理階段數據集成、數據變換對模型的影響,第二點是未能考慮異構數據對模型的影響。實驗表明,本文所采取的數據預處理技術會大幅提升模型的準確度。未來將添加數據集成、數據變換兩方面的數據預處理技術來驗證數據對模型的影響。