標籤:

數據挖掘中常用的數據清洗方法有哪些?

數據挖掘


這個問題太大了。大到解決這個問題需要簽一個千萬元級別的項目。

從兩個角度上看,數據清洗一是為了解決數據質量問題,二是讓數據更適合做挖掘。不同的目的下分不同的情況,也都有相應的解決方式和方法。在此簡略描述一下,若有錯誤,請指出,不勝感激!

解決數據質量問題

解決數據的各種問題,包括但不限於:

    1. 數據的完整性----例如人的屬性中缺少性別、籍貫、年齡等
    2. 數據的唯一性----例如不同來源的數據出現重複的情況
    3. 數據的權威性----例如同一個指標出現多個來源的數據,且數值不一樣
    4. 數據的合法性----例如獲取的數據與常識不符,年齡大於150歲
    5. 數據的一致性----例如不同來源的不同指標,實際內涵是一樣的,或是同一指標內涵不一致

數據清洗的結果是對各種臟數據進行對應方式的處理,得到標準的、乾淨的、連續的數據,提供給數據統計、數據挖掘等使用。

那麼為了解決以上的各種問題,我們需要不同的手段和方法來一一處理。

每種問題都有各種情況,每種情況適用不同的處理方法,具體如下:

    • 解決數據的完整性問題:

解題思路:數據缺失,那麼補上就好了。

補數據有什麼方法?

    1. 通過其他信息補全,例如使用身份證件號碼推算性別、籍貫、出生日期、年齡等
    2. 通過前後數據補全,例如時間序列缺數據了,可以使用前後的均值,缺的多了,可以使用平滑等處理,記得Matlab還是什麼工具可以自動補全
    3. 實在補不全的,雖然很可惜,但也必須要剔除。但是不要刪掉,沒準以後可以用得上
    • 解決數據的唯一性問題

解題思路:去除重複記錄,只保留一條。

去重的方法有:

    1. 按主鍵去重,用sql或者excel「去除重複記錄」即可,
    2. 按規則去重,編寫一系列的規則,對重複情況複雜的數據進行去重。例如不同渠道來的客戶數據,可以通過相同的關鍵信息進行匹配,合併去重。
    • 解決數據的權威性問題

解題思路:用最權威的那個渠道的數據

方法:

對不同渠道設定權威級別,例如:在家裡,首先得相信媳婦說的。。。

    • 解決數據的合法性問題

解題思路:設定判定規則

    1. 設定強制合法規則,凡是不在此規則範圍內的,強制設為最大值,或者判為無效,剔除
    • 欄位類型合法規則:日期欄位格式為「2010-10-10」
    • 欄位內容合法規則:性別 in (男、女、未知);出生日期&<=今天
  1. 設定警告規則,凡是不在此規則範圍內的,進行警告,然後人工處理
      • 警告規則:年齡》110
  1. 離群值人工特殊處理,使用分箱、聚類、回歸、等方式發現離群值

    • 解決數據的一致性問題

解題思路:建立數據體系,包含但不限於:

    1. 指標體系(度量)
    2. 維度(分組、統計口徑)
    3. 單位
    4. 頻度
    5. 數據

讓數據更適合做挖掘或展示

目標包括但不限於:

    1. 高維度----不適合挖掘
    2. 維度太低----不適合挖掘
    3. 無關信息----減少存儲
    4. 欄位冗餘----一個欄位是其他欄位計算出來的,會造成相關係數為1或者主成因分析異常)
    5. 多指標數值、單位不同----如GDP與城鎮居民人均收入數值相差過大

    • 解決高維度問題

解題思路:降維,方法包括但不限於:

    1. 主成分分析
    2. 隨機森林
    • 解決維度低或缺少維度問題

解題思路:抽象,方法包括但不限於:

    1. 各種匯總,平均、加總、最大、最小等
    2. 各種離散化,聚類、自定義分組等
    • 解決無關信息和欄位冗餘

解決方法:剔除欄位

    • 解決多指標數值、單位不同問題

解決方法:歸一化,方法包括但不限於:

    1. 最小-最大
    2. 零-均值
    3. 小數定標

以上


洗數據基本靠人肉,一個分析項目基本八成時間在洗數據。


數據清洗的主要包括:糾正錯誤、刪除重複項、統一規格、修正邏輯、轉換構造、數據壓縮、補足殘缺/空值、丟棄數據/變數。

1. 糾正錯誤

錯誤數據是數據源環境中經常出現的一類問題。數據錯誤的形式包括:

q 數據值錯誤:數據直接是錯誤的,例如超過固定域集、超過極值、拼寫錯誤、屬性錯誤、源錯誤等。

q 數據類型錯誤:數據的存儲類型不符合實際情況,如日期類型的以數值型存儲,時間戳存為字元串等。

q 數據編碼錯誤:數據存儲的編碼錯誤,例如將UTF-8寫成UTF-80。

q 數據格式錯誤:數據的存儲格式問題,如半形全形字元、中英文字元等。

q 數據異常錯誤:如數值數據輸成全形數字字元、字元串數據後面有一個回車操作、日期越界、數據前後有不可見字元等。

q 依賴衝突:某些數據欄位間存儲依賴關係,例如城市與郵政編碼應該滿足對應關係,但可能存在二者不匹配的問題。

q 多值錯誤:大多數情況下,每個欄位存儲的是單個值,但也存在一個欄位存儲多個值的情況,其中有些可能是不符合實際業務規則的。

這類錯誤產生的原因是業務系統不夠健全,尤其是在數據產生之初的校驗和入庫規則不規範,導致在接收輸入後沒有進行判斷或無法檢測而直接寫入後台資料庫造成的。

2. 刪除重複項

由於各種原因,數據中可能存在重複記錄或重複欄位(列),對於這些重複項目(行和列)需要做去重處理。

對於重複項的判斷,基本思想是「排序和合併」,先將資料庫中的記錄按一定規則排序,然後通過比較鄰近記錄是否相似來檢測記錄是否重複。這裡面其實包含了兩個操作,一是排序,二是計算相似度。

常見的排序演算法:

q 插入排序

q 冒泡排序

q 選擇排序

q 快速排序

q 堆排序

q 歸併排序

q 基數排序

q 希爾排序

常見的判斷相似度的演算法:

q 基本的欄位匹配演算法

q 標準化歐氏距離

q 漢明距離

q 夾角餘弦

q 傑卡德距離

q 馬氏距離

q 曼哈頓距離

q 閔可夫斯基距離

q 歐氏距離

q 切比雪夫距離

q 相關係數

q 信息熵

對於重複的數據項,盡量需要經過業務確認並進行整理提取出規則。在清洗轉換階段,對於重複數據項盡量不要輕易做出刪除決策,尤其不能將重要的或有業務意義的數據過濾掉,校驗和重複確認的工作必不可少。

3. 統一規格

由於數據源系統分散在各個業務線,不同業務線對於數據的要求、理解和規格不同,導致對於同一數據對象描述規格完全不同,因此在清洗過程中需要統一數據規格並將一致性的內容抽象出來。

數據欄位的規則大致可以從以下幾個方面進行統一:

q 名稱,對於同一個數據對象的名稱首先應該是一致的。例如對於訪問深度這個欄位,可能的名稱包括訪問深度、人均頁面瀏覽量、每訪問PV數。

q 類型:同一個數據對象的數據類型必須統一,且表示方法一致。例如普通日期的類型和時間戳的類型需要區分。

q 單位:對於數值型欄位,單位需要統一。例如萬、十萬、百萬等單位度量。

q 格式:在同一類型下,不同的表示格式也會產生差異。例如日期中的長日期、短日期、英文、中文、年月日制式和縮寫等格式均不一樣。

q 長度:同一欄位長度必須一致。

q 小數位數:小數位數對於數值型欄位尤為重要,尤其當數據量累積較大時會因為位數的不同而產生巨大偏差。

q 計數方法:對於數值型等的千分位、科學計數法等的計數方法的統一。

q 縮寫規則:對於常用欄位的縮寫,例如單位、姓名、日期、月份等的統一。例如將周一表示為Monday還是Mon還是M。

q 值域:對於離散型和連續型的變數都應該根據業務規則進行統一的值域約束。

q 約束:是否允許控制、唯一性、外鍵約束、主鍵等的統一。

統一數據規格的過程中,需要重要的一點是確認不同業務線帶來數據的規格一致性,這需要業務部門的參與、討論和確認,以明確不同體系數據的統一標準。

4. 修正邏輯

在多數據源的環境下,很可能存在數據異常或衝突的問題。

例如不同的數據源對於訂單數量的數據統計衝突問題,結果出現矛盾的記錄。通常,這是由於不同系統對於同一個數據對象的統計邏輯不同而造成的,邏輯的不一致會直接導致結果的差異性;除了統計邏輯和口徑的差異,也有因為源數據系統基於性能的考慮,放棄了外鍵約束,從而導致數據不一致的結果;另外,也存在極小的數據丟失的可能性,通常由於並發量和負載過高、伺服器延遲甚至宕機等原因導致的數據採集的差異。

對於這類的數據矛盾,首先需要明確各個源系統的邏輯、條件、口徑,然後定義一套符合各個系統採集邏輯的規則,並對異常源系統的採集邏輯進行修正。

某些情況下,也可能存在業務規則的錯誤導致的數據採集的錯誤,此時需要從源頭糾正錯誤的採集邏輯,然後再進行數據清洗和轉換。

5. 轉換構造

數據變換是數據清理過程的重要步驟,是對數據的一個的標準的處理,幾乎所有的數據處理過程都會涉及該步驟。數據轉換常見的內容包括:數據類型轉換、數據語義轉換、數據值域轉換、數據粒度轉換、表/數據拆分、行列轉換、數據離散化、數據離散化、提煉新欄位、屬性構造、數據壓縮等。

數據類型轉換

當數據來自不同數據源時,不同類型的數據源數據類型不兼容可能導致系統報錯。這時需要將不同數據源的數據類型進行統一轉換為一種兼容的數據類型。

數據語義轉換

傳統數據倉庫中基於第三範式可能存在維度表、事實表等,此時在事實表中會有很多欄位需要結合維度表才能進行語義上的解析。例如,假如欄位M的業務含義是瀏覽器類型,其取值分為是1/2/3/4/5,這5個數字如果不加轉換則很難理解為業務語言,更無法在後期被解讀和應用。

數據粒度轉換

業務系統一般存儲的是明細數據,有些系統甚至存儲的是基於時間戳的數據,而數據倉庫中的數據是用來分析的,不需要非常明細的數據,一般情況下,會將業務系統數據按照數據倉庫中不同的粒度需求進行聚合。

表/數據拆分

某些欄位可能存儲多中數據信息,例如時間戳中包含了年、月、日、小時、分、秒等信息,有些規則中需要將其中部分或者全部時間屬性進行拆分,以此來滿足多粒度下的數據聚合需求。同樣的,一個表內的多個欄位,也可能存在表欄位拆分的情況。

行列轉換

某些情況下,表內的行列數據會需要進行轉換(又稱為轉置),例如協同過濾的計算之前,user和term之間的關係即互為行列並且可相互轉換,可用來滿足基於項目和基於用戶的相似度推薦計算。

數據離散化

將連續取值的屬性離散化成若干區間,來幫助消減一個連續屬性的取值個數。例如對於收入這個欄位,為了便於做統計,根據業務經驗可能分為幾個不同的區間:0~3000、3001~5000、5001~10000、10001~30000、大於30000,或者在此基礎上分別用1、2、3、4、5來表示。

數據標準化

不同欄位間由於欄位本身的業務含義不同,有些時間需要消除變數之間不同數量級造成的數值之間的懸殊差異。例如將銷售額進行離散化處理,以消除不同銷售額之間由於量級關係導致的無法進行多列的複合計算。數據標準化過程還可以用來解決個別數值較高的屬性對聚類結果的影響。

提煉新欄位

很多情況下,需要基於業務規則提取新的欄位,這些欄位也稱為複合欄位。這些欄位通常都是基於單一欄位產生,但需要進行複合運算甚至複雜演算法模型才能得到新的指標。

屬性構造

有些建模過程中,也會需要根據已有的屬性集構造新的屬性。例如,幾乎所有的機器學習都會講樣本分為訓練集、測試集、驗證集三類,那麼數據集的分類(或者叫分區)就屬於需要新構建的屬性,用戶做機器學習不同階段的樣本使用。

提示 在某些場景中,也存在一些特殊轉換方法。例如在機器學習中,有些值是離散型的數據但存在一定意義,例如最高學歷這個欄位中包含博士、研究生、大學、高中這4個值,某些演算法不支持直接對文本進行計算,此時需要將學歷這個欄位進行轉換。常見的方法是將值域集中的每個值拆解為一個欄位,每個欄位取值為0或1(布爾型或數值型)。這時,就會出現4個新的欄位,對於一條記錄來看(通常是一個人),其最高學歷只能滿足一個,例如欄位博士為1,那麼其餘的欄位(研究生、大學、高中)則為0。因此這個過程實際上是將1個欄位根據值域(4個值的集合)拆解為4個欄位。

6. 數據壓縮

數據壓縮是指在保持原有數據集的完整性和準確性,不丟失有用信息的前提下,按照一定的演算法和方式對數據進行重新組織的一種技術方法。

對大規模的數據進行複雜的數據分析與數據計算通常需要耗費大量時間,所以在這之前需要進行數據的約減和壓縮,減小數據規模,而且還可能面臨互動式的數據挖掘,根據數據挖掘前後對比對數據進行信息反饋。這樣在精簡數據集上進行數據挖掘顯然效率更高,並且挖掘出來的結果與使用原有數據集所獲得結果基本相同。

數據壓縮的意義不止體現在數據計算過程中,還有利於減少存儲空間,提高其傳輸、存儲和處理效率,減少數據的冗餘和存儲的空間,這對於底層大數據平台具有非常重要的意義。

數據壓縮有多種方式可供選擇:

q 數據聚合:將數據聚合後使用,例如如果匯總全部數據,那麼基於更粗粒度的數據更加便利。

q 維度約減:通過相關分析手動消除多餘屬性,使得參與計算的維度(欄位)減少;也可以使用主成分分析、因子分析等進行維度聚合,得到的同樣是更少的參與計算的數據維度。

q 數據塊消減:利用聚類或參數模型替代原有數據,這種方式常見於多個模型綜合進行機器學習和數據挖掘。

q 數據壓縮:數據壓縮包括無損壓縮和有損壓縮兩種類型。數據壓縮常用於磁碟文件、視頻、音頻、圖像等。

7. 補足殘缺/空值

由於各種主客觀原因,很多系統存在殘缺數據,殘缺數據包含行缺失、列缺失、欄位缺失三種情況。行缺失指的是丟失了一整條數據記錄,列缺失指的是丟失一整列數據,欄位缺失指的是欄位中的值為空值。其中空值也分兩種情況:

q 缺失值。缺失值指的是的數據原本是必須存在的,但實際上沒有數據。例如年齡這個欄位每個人都會有,所以如果系統強制驗證是不應該為空。

q 空值。空值指的是實際存在可能為空的情況,所以空值不一定是數據問題。例如身份證號這個欄位,只有成人之後才有這個字元串,因此也可能存在非成人的用戶,所以可能為空。

對於缺失值和空值的填充處理主要包含兩種方式:

一是手工填入可能的值;

二是利用規則填充可能的值:某些缺失值可以從本數據源或其它數據源推導出來,這就可以用數據分布的狀態和特徵,使用眾數、中位數、平均值、最大值、最小值填充,或者使用近鄰分析甚至更為複雜的概率估計代替缺失的值,從而達到填充的目的,某些情況下也可以直接以未知或unknown填充,這是一種先期不處理而等到後期業務在處理數據的時候再處理的方法。

提示 對缺失數據進行填補後,填入的值可能不正確,數據可能會存在偏置,導致數據並不是十分可靠的。除了明顯的可以確定的規則來填充值以外,基於已有屬性來預測缺失值是一種流行的方法。假如性別欄位部分記錄為空,可以將性別欄位作為目標變數進行建模分析,對完整樣本建模後得出缺失數據性別為男、女的概率,然後進行填充。對於更多的不確定值的數據樣本,如果不影響整體計算邏輯的,建議先保持原樣;如果會成為計算和建模噪音的數據,則可以採取上述方法進行處理,盡量使其在建模過程的作用消減。

8. 丟棄數據/變數

對於數據中的異常數據,包括缺失值、空值、錯誤值、不完整的數據記錄等,除了使用上面講的方法進行清洗、轉換、提升外,還有另外一種方法——丟棄。丟棄也是提升數據質量的一種方法。丟棄數據的類型包含兩種:

q 整條刪除,指的是刪除含有缺失值的樣本。某些情況下,由於各種原因可能存在大量的有某些欄位缺失的數據記錄,這會導致完整的數據很少,此時需要慎重使用。因此,這隻適合關鍵變數缺失,或者含有無效值或缺失值的樣本比重很小的情況。

q 變數刪除。如果某一變數的無效值和缺失值很多,而且該變數對於所研究的問題不是特別重要,則可以考慮將該變數刪除。這種做法減少了供分析用的變數數目,但沒有改變樣本量。

提示 數據丟棄或刪除操作要慎重執行。一方面,被丟棄的數據很可能存在業務實際意義,而這些意義作為開發人員是不清楚的;另一方面,後期可能會需要針對異常數據進行處理,並成為重要的研究課題。例如,營銷領域存在流量欺詐,電商領域存在黃牛訂單,銀行保險領域存在高風險業務,這些課題對應的底層數據可能都是異常數據。


來填坑辣!

輸入數據後需要對數據進行預處理,只有處理得當的數據才能進到數據挖掘的步驟。而處理數據包括對數據數量和質量的處理。我按照少—多—亂來整理。

1 對缺失的數據有添補或刪除相關行列方法,具體步驟自己判斷(如果數據量本來就不要堅持刪除了)

添補:常用拉格朗日插值或牛頓插值法,也蠻好理解,屬於數理基礎知識。(pandas庫里自帶拉格朗日插值函數,而且這個好處是還可以在插值前對數據進行異常值檢測,如果異常那麼該數據就也被視為需要進行插值的對象)

刪除:這個也好理解,就是對結果分析沒有直接影響的數據刪掉就好。

2 異常值

這個是否剔除需要視情況而定

像問題1中視為缺失值重新插值

刪除含有異常值的記錄(可能會造成樣本量不足,改變原有分布)

平均值修正(用前後兩個觀測值平均值)

綜上,還是方案一靠譜。

人生苦短,學好python

3 數據量太多,有三種方法:集成,規約,變換

(1)數據是分散的時,這個就是指要從多個分散的數據倉庫中抽取數據,此時可能會造成冗餘的情況。此時要做的是【數據集成】。

數據集成有兩方面內容:

①冗餘屬性識別②矛盾實體識別

屬性:

對於冗餘屬性個人理解是具有相關性的屬性分別從不同的倉庫中被調出整合到新表中,而新表中由於屬性太多造成冗餘,這時可以靠相關性分析來分析屬性a和屬性b的相關係數,來度量一個屬性在多大程度上蘊含另一個屬性。(這個用python的pandas庫里corr()函數也可以實現),檢測出了再將其刪除。

實體:(這個是要靠自己甄別源表,所以源倉庫里的實體含義要清楚)

a,同名異義——改名字

b,異名同義——刪一個

c,單位不統一—換

(2)數據規約

又包括兩方面

屬性規約和數量規約

①屬性規約:就是減少屬性個數或合併舊屬性成一個新屬性,可以特徵子集選擇(刪除不需要作挖掘的屬性),主成分分析(通過對方差的決定性大小分析並降維),決策樹歸納,向前/向後刪除。

具體的如果不了解可以找個實例試一下。

②數量規約:通過選擇替代的,較小的數據來減少數據量,包括有參數和無參數。

有參數:建模,並且只需存放模型的參數,例如一些回歸模型,用參數來評估數據。

無參數:需要存放實際數據,用圖表存放並顯示數據,例如用直方圖時可把步長設置一定的區間,來衡量區間內的頻數,也起到了規約的目的。還有一些聚類(用簇來替換實際數據)。還有抽樣(聚類抽樣,分層抽樣)

——————————————

少和多大概說完了,亂下次再說。

——————————————

當數據太亂時就要進行規範化處理,進行數據變換。

①簡單函數變換。比如將非正態的變換為正態分布的,將非平穩序列轉換為平穩序列,有時數據的區間十分大時取其對數也能起到壓縮的作用。

②規範化。消除指標之間由於量綱等引起的差異。分為最小—最大規範化(線性變換,將其映射到0和1區間內),零—均值規範化(使數據均值為0,標準差為1),小數定標規範化(移動小數位數,將數值映射到-1到1區間)

三種方法都有轉化公式。

③ 連續屬性離散化。(當要應用的數據挖掘演算法要求數據是分類屬性形式的時候),包括兩個步驟:確定分類數,將連續的屬性映射到這些分好類的類別。

方法:等寬(類似於直方圖的思想,取特定步長),等頻(按相同頻數進行劃分),聚類

④屬性構造。(a,屬性添加:比如有質量和體積,可以用公式構造出密度這個屬性值;

b,二元化;c,概念分層)

—————————————————————————

暫時這麼多,裡面有些細節不太好用文字說,用手機端不好編輯公式,如果有錯誤歡迎指出來,因為在做數據相關的工作,有需要改正和補充的地方會進行修正的。


實際應用時候,很多是靠人工標註和篩選的。

做研究的時候一般會用些數學方法。不外乎是,數值化,歸一化,去噪降噪,降維合併等等。


刪除重複

空值填充

統一單位

是否標準化處理

刪除無必要的變數

邏輯值是否有錯誤檢查

是否需要引入新的計算變數

是否需要排序

是否進行主成分或者因子分析

等等,還有很多


你是說從ldds --&> ods --&> ads ?

Jiawei Han 的書,這是最新的版本,一直看第二版的,搬一次家這書找不到了。

樓主有空看看。


依據行業清洗方式不同

利益相關:IT金融數據

增減欄位,增緯、減緯、行列轉換、拆分表、合併表、統一類型(格式轉換)、欄位日期和數字計算及轉換、列數據拆分為行數據、行數據合併為列數據

其他的想起在補充。


數據格式校驗,例如加0,位數,合併等,編碼等。

真實性校驗,剔除明顯錯誤,例如歲數超200等,重複數據剔除,無效數據剔除。

如果要再進一步就得設計校驗規則,慢慢篩選。

這些可以機器做。

還有更加吊炸天的是對憑證和原始數據。一般是公司的訂單,發貨/收貨單,發票等。

得手工核對。


說一個我們愛因互動具體在用的技術吧,用來清洗聊天對話數據還是挺管用滴。

【註:原文在愛因博客】

在聊天機器人里,可用的公開對話數據就更少了,比如閑聊類的也就小黃雞、華為微博數據,而且這些數據也都還不夠好。不論是公開數據還是自己抓的各種數據,使用前的清洗都是必須的。清洗數據是個苦活,數據量大時就算投入大量人力也未必有好的產出。本文介紹愛因互動正在使用的一種數據清洗方法,我們稱之為Data Purification Framework(簡稱DPF)。DPF是無監督的,所以基本不需要人力投入,但最終清洗效果還不錯。雖然本文名為對話數據清洗,但此方法其實可以用在很多其他場景。

數據清洗框架:DPF

DPF的理念很簡單,利用不靠譜的數據訓練一個模型,這個模型在訓練集上準確度通常都很低(如果訓練集上已經完美擬合,那這個方法就不能直接用了)。用訓練好的模型把最不靠譜的那些數據(預測與實際差的最遠)刪掉,然後利用剩下的數據訓練新的模型,之後再用新模型把剩下數據里最不靠譜的一些數據刪掉,如此重複,直到模型在訓練集上達到較高的準確度。這時候被篩完剩下的數據可能比較少了。為了召回一些被早期模型誤過濾掉的樣本,我們把最新的模型應用到原始的全量數據上,這樣去除最不靠譜的數據後會留下更多的數據用於接下來的迭代。之後的迭代邏輯和前面的相同,利用模型清除最不靠譜的數據,再用清洗後的新數據訓練新模型。類似此方法的思想在很多地方都出現過,比如一些半監督擴充數據的場景。DPF框架圖如下:

這個方法有效的一個關鍵是用於識別數據靠譜性的匹配模型(圖中的Matcher),需要找到合適的匹配模型來統一衡量每個樣本點的靠譜性。這個匹配模型不一定和數據清洗後最終被使用的模型一致。

對DPF框架圖中的主要組件(下圖)做個簡單說明。

  • 紅色箭頭連接一個模型和一個數據集,表示把此模型用於預測此數據集。這裡表示使用Matcher1.1預測紅框中的數據集。利用預測的匹配值,對紅框中數據進行排序,清除掉匹配度最差的一部分數據,剩下的就是藍框所表示的數據。
  • 藍色箭頭連接一個數據集和一個模型,表示使用此數據集訓練出此模型。這裡匹配演算法使用藍框數據進行訓練獲得Matcher1.2。

如果這個過程都在框架的同一列,那麼紅框的數據就是第一個模型的訓練數據(圖中的紅框數據是Matcher1.1的訓練數據)。如果這個過程是跨列的(如框架圖中Matcher1.x –&> Matcher2.1),那麼紅框的數據就是原始的全量數據。

下面以清洗小黃雞對話數據為例來具體說明此清洗框架的整個流程。

清洗小黃雞對話數據

小黃雞數據

小黃雞數據是小黃雞與用戶的聊天qa對,包括了35w+ qa對。除了很多黃暴的樣例,還有很多答案與問題壓根不匹配的樣例。一些樣例見下圖,每行中左邊是問題,右邊是答案。我們的初衷是使用小黃雞數據來訓練seq2seq閑聊模型,但直接使用效果很差,而且還容易生成罵人的答覆。

選擇Matcher模型

在具體清洗流程開始前,還需要確定使用什麼模型作為DPF中的Matcher模型。 對於qa對話數據,我們發現dual encoder模型是一個好的選擇。dual encoder首先利用RNN把問題和答案都向量化,然後以這兩個向量的匹配程度來說明這個問答對的匹配程度。

接下來說明清洗小黃雞對話數據的具體流程。

清洗流程

訓練Matcher1.0,清除噪音數據

在訓練Match1.0時,我們把所有的小黃雞qa對作為正樣本,然後隨機抽取一些q和其他的a生成相同數量的負樣本。從預測準確度來看,Match1.0在訓練集上只能到0.75左右,在測試集上大概0.65,很差。

把訓練好的Match1.0用於預測其訓練集中的所有正樣本(也即原始的小黃雞qa對),並按照預測的匹配概率對qa對進行排序。然後把匹配概率低於某個閾值的qa對全部刪掉(如果刪除過多,可以設置一個刪除的最高比例)。比如在這裡我們設置了0.5的匹配閾值。

訓練Matcher1.1,進一步清除噪音數據

以上一步清洗後的數據作為正樣本,隨機產生等量的負樣本。利用這些正負樣本訓練Matcher1.1。把訓練好的Match1.1用於預測其訓練集中的所有正樣本,並按照預測的匹配概率對qa對進行排序。然後把匹配概率低於某個閾值的qa對全部刪掉(如果刪除過多,可以設置一個刪除的最高比例)。這個流程跟上面一樣,但這裡的匹配閾值可以設置得更高,比如0.6,因為此時訓練數據和模型都比Matcher1.0更好了。Match1.1在訓練集上的準確度能到0.82左右,在測試集上大概0.7。

訓練Matcher1.2 –&> Matcher1.x,逐步迭代清除噪音數據

和上面的流程一致,對上面清洗好的數據做進一步的清洗。此時的匹配閾值可以再高點,比如0.7。Match1.2在訓練集上的準確度能到0.89左右,在測試集上大概0.76。

這個循環繼續,直到Matcher1.x在訓練集上的準確度達到預設值(比如0.98),或者被清除的數據量低於預設數量,或者迭代次數達到預設值(比如10次)。在這個過程中,匹配閾值可以設置得越來越高,最高可以到0.9甚至0.95。因為後面模型的精度逐漸變高,所以閾值更高也不會刪除很多數據(應該讓被清除的數據量逐漸降低)。在小黃雞數據上,Matcher1.8在訓練集上的準確度超過了0.98。它的訓練集里的正樣本只有清洗後剩下的7w+條qa對。

迭代到這步,其實可以像之前的迭代那樣對訓練數據進行清洗,然後把剩下的數據作為我們最終的數據結束整個清洗過程。但很多時候我們希望能從已被清洗的數據中再找回一些靠譜的數據。畢竟早期用於清洗的模型本身也並不是那麼靠譜。 所以我們可以把Match1.8用於最初的全量數據上,預測它們的匹配概率。這就是框架圖裡第一列到第二列的連接線。和之前的步驟一樣,按匹配概率排序,把低於設定閾值的樣本去掉。小黃雞里如果我們設置閾值為0.9,清洗後可以剩下11w+的qa對。下圖中展示了一些匹配概率最低(左上角紅框)和最高(右下角藍框)的樣本。每行代表一個樣本,格式為問題||答案||匹配概率值。可以看出區分度還是很明顯的。

清洗後的結果數據可以作為最終結果返回,也可以進一步進行提純,把它作為Matcher2.1的訓練集,繼續迭代……

實際運行時,我們在小黃雞數據上跑到Matcher1.8就結束了,在微博數據上我們跑到了Matcher3.5,訓練集上的準確度達到0.981。

DPF的清洗過程雖然無需人工干預,但每步迭代都需要重新訓練模型,在數據量大時整個過程還是很耗時的。一個降低訓練時間的方法是每次訓練新模型時,把其參數初始化為前一個模型的訓練結果。

Seq2seq+Attention模型結果

我們把上面Matcher1.8清洗獲得的7.1w+小黃雞qa數據作為訓練集,以單字模式訓練seq2seq+attention對話生成模型。

下面是一些模型結果(我們對基本模型做了一些改進,具體請見我們之後的文章)。其中Q表示問題,A表示使用beam search產生的topN答案,A後面的數字表示序號,比如A2表示排名第二的結果。

註:有些候選結果被某些後處理步驟過濾掉了。


ETL,占坑先


可以用Excel進行,比如臟數據處理,規範化,歸一化(MATLAB、R語言)

excel真的是很萬能啊,可以利用excel的application類 range類等等進行規範化操作

MATLAB、R語言進行歸一化處理,很方便


講得可詳細啦~

機器學習基礎與實踐(一)----數據清洗 - Charlotte77 - 博客園


數據清洗的基本模型是:

原始數據――&>(變換模型)――&>可用數據

對變換模型的要求為:

1. 必須是一一映射;

2. 清洗效率要求;

3. 變換模型集合規模適中。

數據清洗的基本類型:

1. 數值變換,包括平移、伸縮、降維,也可先降後升;

2. 類型變換,非數值轉換為數值型;

3. 無效數據刪除。沒有絕對無效的數據,是否刪除取決於 應用範圍,最佳方案是棄用將其放入「垃圾桶」內


占坑

先提幾個:

  1. 數據抽取(data extraction):從unstructured的原始數據中抽取出來,變成關係型(relational)數據。
  2. 數據變型(data transformation/data wrangling):把數據從一種關係型或unstrcutrued變成另一種關係型。比如二維(two-dimensional)變成關係型。
  3. 數據修復:修復包括數據缺失、數據重複、數據異形等一系列數據本身的質量問題。

關於工具,加州伯克利大學的Joe Hellerstein在2011年搞了一個Wrangler主要做數據變型,現在已經商業化成一家初創公司叫Trifacta, 2017在Google Cloud Next 17 大會上跟谷歌聯合推出了基於Google Cloud上的數據整理工具DataPrep。另外值得一提的是MIT的DB之神Michael Stonebraker也做了一家公司Tamr,做數據清洗。


在辦公室見了一個印度小夥子 做的 CRM CLEANING, 還以為是防止爬蟲的,,,,,不禁起了好奇心, 謝謝啦


說一下其他的途徑和方法,企業如果人員緊張,專業度不夠,可以考慮把數據清洗的工作交給專業的外包機構來做,然後根據這些清洗後的數據再根據自己的業務進行開發和ying銷,相比下效率是很高的,成本還低。我們是專業的外包數據清洗服務商,有需求可詳細溝通


根據數據量的大小,數據量較小可以使用excel等工具進行人工處理,數據量大時一般需要基於分散式系統進行處理。也有基於分散式系統的第三方工具可用於數據清晰;但由於原始數據格式的多樣化,對清洗後數據的需求不同(往往還涉及對數據內容的理解),多數情況下還需要開發人員編寫特定的程序來完成數據清洗的過程。

整個數據清洗過程可以描述為ETL,即抽取(extract)、轉換(transform)、載入(load)。

1.抽取(extract)

即對原始數據進行過濾,篩選出需要的數據,將其他數據丟棄,減小後期分析處理的數據量。

篩選數據可以分為兩種情況:

一種是行過濾,將一整條數據都過濾掉,即原始數據可能包含了很多不同類別的數據,我們只過濾出我們需要處理的類別的數據;

一種是列過濾,將一整條數據中的某幾個欄位過濾掉。個人認為盡量不要將一行數據中的某幾個欄位過濾掉,可以將這些目前不需要可過濾掉的欄位進行合併後存儲在1列中(比如在數據倉庫中建一列map類型的欄位用於存儲這些冗餘欄位)。因為在後續數據分析中也許會用到,所以在數據清洗階段應該儘可能保留原始數據的完整(而且也不會對後續的數據分析計算產生性能影響)。

2.轉換(transform)

即對原始數據值進行處理,如編碼轉換、進位轉換等,轉換成標準化的數據格式,方便後續進行數據分析處理。

在數據轉換過程中主要要處理的問題是數據的驗證,以及異常數據的處理,異常數據的處理根據不同情況可能會做兼容處理、也可能進行丟棄處理。

3.載入(load)

將轉化後的標準格式的數據存儲到數據倉庫中。

上述處理流程因為不同研究需求、不同原始數據差異較大等因素可能較難自動化處理。但假如是在同一公司內部的多個產品數據進行數據清洗的話,基於原始數據的結構標準化,數據倉庫存儲格式標準化,那麼數據清洗是有可能做到工具化自動清洗處理的(只需要相關人員標註各個欄位的含義及對應的數據類型),將節省數據清洗的工作量。


根據數據量方法不一樣

太大就要先寫過濾器,把一些特徵明顯的數據過濾掉

再到人工處理的階段


實際做項目時會發現數據的格式並不是都那麼規整的,比如最常見的缺失值的問題,變數冗餘,量綱等等。


請問有什麼好的專門介紹數據預處理方法書籍嗎?


推薦閱讀:

修正餘弦相似度和皮爾森係數什麼關係?
歐氏距離和餘弦相似度的區別是什麼?
新聞聚合,提取可讀的主題如何實現?
數據分析師(CDA)和數據項目分析師(CPDA)的區別?在認證方面有什麼不同嗎?
大數據 預測未來,在哪些領域已經有非常準確的結果?

TAG:數據挖掘 |