1. 程式人生 > >資料探勘概念彙總及資料預處理

資料探勘概念彙總及資料預處理

資料探勘簡介

資料探勘,顧名思義,就是在大量的資料中發現有用的資訊,隨著資訊科技發展,每天都會產生大量的資料,可以說我們正處於一個大資料的時代。面對如此多的資料,傳統的分析方法不再適用,這就需要我們用新的技術工具來從資料中找到隱藏的資訊。
資料探勘的應用相當廣泛,比如最“超市出售商品間的關聯分析”(資料分析課上必然提到的“啤酒尿布”的例子),“根據歷史資料做氣候觀測”、“生物學生的基因序列分析”等等等等。說到“啤酒尿布”這個例子(雖然後面被證明可能是杜撰的,但不失為一個精彩的事例),在我剛學習資料探勘的時候,有一個疑問是為什麼明明麵包牛奶的關聯性更強,但是我們從來不去講麵包和牛奶之間的關聯分析,而是單單要說啤酒和尿布。其實這恰好說明了資料探勘本身的意義,發現“隱藏的”,不易被發現的知識。麵包和牛奶的搭配是我們的生活常識,如果大家都知道的東西,再去發現也就沒有什麼意義了,正是這種看似毫不相關實則息息相關的問題才是我們做挖掘的過程中應該關注的。
資料探勘與資料庫技術的發展和成熟時分不開的,其完整名字是資料庫中的知識發現

(Knowledge discovery in database, KDD),也就是將資料庫中的 raw data 經過一系列的加工計算分析,得出有用資訊的這個過程。該過程通常用如下幾個步驟來描述:
KDD 過程
@(圖片來源:資料探勘導論)
資料預處理即將未加工資料轉換成適合分析的形式,包括多資料來源的資料融合、資料清洗、維規約等等。資料預處理還沒有很好的自動化工程化的方法,所以通常會耗費很多時間和精力,且需要加入人為經驗的干預。
在資料探勘的過程中我們也會遇到很多的問題,比如特徵值過多導致的維度災難,靜態模型不夠靈活,資料中包含的一些特徵偏見等等,我們需要不斷探索合適的方法來解決這些問題。

資料探勘的目標

資料探勘通常有兩大目的:
描述預測
描述就是找出資料中潛在的模式/關聯,比如我們上面說過的啤酒尿布的例子,而預測是根據其他的屬性值來對某一特定屬性值來進行預測,例如根據一個顧客的購買歷史預測他是否會購買一種新產品等等。

資料探勘中的基本概念

首先第一個概念就是資料集了,也就是我們拿到的資料。資料集是資料物件的集合。

名字:李雷,性別:男,年齡:21,身高:170;
名字:韓梅梅,性別:女,年齡:23,身高:160;
名字:阿花,性別:女,年齡:20,身高:165...
...

以上內容就可以看做是一個簡單的資料集。其中的每一個個人資訊就是一個資料物件。資料物件也叫記錄、點、向量、模式、事件、案例、樣本、觀測或實體

。常用的還是前幾種叫法,一個數據可以抽象成為特徵空間中的一個點,比如二維資料就可以用平面座標中的一個點來表示。如果該資料有 4 個屬性,那麼我們可以將其表示為一個四維的向量,參考上面例子來說第一個資料物件就是{李雷,男,21,170}。都是非常形象的表示方法。
資料物件擁有一些基本特性叫做屬性,也就是上述的“姓名”、“年齡”等等,屬性也叫變數、特性、欄位、特徵或維。不同物件的屬性值可能不同,同一物件的屬性值也可能隨時間的變化而變化。屬性可以是“男”這種描述,也可以是“170”這種數字。
瞭解屬性本身的型別和性質非常重要。同樣是數字的屬性,ID 和身高這兩個屬性就有很大不同,通過身高我們可以做統計分析,求均值、做線性擬合等等,但是對 ID 這類僅用來區分不同資料物件的屬性做這些分析就沒有意義。因此我們要對自己的資料集做充分的瞭解才行。
屬性還可以分為連續屬性(continuous)和離散屬性(discrete)。根據屬性可以取值的個數來區分。離散屬性有有限個值或無限可數個值,通常用整數變量表示;連續屬性是取實數值的屬性。這樣說也不夠形象,可以想象性別屬性取值只有男/女兩種,年齡屬性我們都是取整數,而沒有人會是 18.333333 歲。但是高度屬性就是連續的,理論上它可以取無限個值且不可以依次數出,即使高度限制在某個區間內,比如 170cm-180cm,但其屬性值還是可以取到該區間內的任意實數,只不過我們在使用該屬性值的時候回將其限制在一定的精度範圍內。
除此之外,還有一種特別的屬性叫做二元屬性,它屬於離散屬性的一種,但是隻有兩種可能的取值,即非 0 即 1。
之前我們有說過要對資料做預處理,以便將資料整理成便於分析的形式。通常我們會將一個數據集以矩陣的形式表示出來。每一個數據物件是一個向量,那麼所有的資料根據屬性一一對應就成了一個矩陣。如果我們現在有了一個 m*n 的資料矩陣,意思是每一行代表一個數據物件,每一列代表一個屬性,我們有一個包含 m 個數據物件的資料集,每個資料有 n 個屬性值。

資料預處理

那麼我們著重說一下資料預處理的部分吧,更準確地說,是資料清洗。
在機器學習領域有句話叫 “Garbage in, garbage out.” 資料很爛,無疑模型輸出就會很爛。這裡根據自己不算多的經驗做點總結吧。不介紹過多程式設計問題了,以後再慢慢整理,如果會使用 Python 或 R 來處理資料,那麼相信很容易實現清洗資料的這些方法。

1. 為什麼要清洗資料?

這個問題上面已經提到了。我們的資料都是從哪裡來的呢?可能是從網頁上抓取的,也可能來自資料庫,一些 API 下載介面下載下來的……,拿到資料以後,其中往往存在很多問題和錯誤,比如格式混亂,形式不統一,這時需要我們對其做清理。
資料格式
上圖就是我們希望得到的資料格式了。它是標準的矩陣樣式,每一行代表一個數據,每一列是一個屬性值,非常便於用程式語言匯入然後進行分析。
這是一個 Excel 表格,我們還很常見到 JSON, CSV, XML 這些型別的檔案等等。

2. 一些關於整潔資料的小建議

這裡有一些來自 Coursera 的關於整潔資料的小建議
1. 在每個檔案頂部標註變數/屬性名稱,而且最好清晰易懂,雖然在最後使用資料集的時候不會用到,但是在你處理過程中會很有幫助;
2. 一個數據集單獨儲存在一個檔案當中。有人會喜歡在一個 Excel 檔案當中放多個表,這種做法我們不是很提倡的;
3. 保留一個“編碼本”。最後我們有了一個包含很多屬性變數和值的資料集,但是我們可能需要知道更多關於這個變數的資訊,比如對價格這個變數,你想知道它的單位,或是銷售額這個變數,到底是以千為單位還是萬還是其他。所以這裡可以在資料處理過程中記錄下變數的相關資訊。
4. 你的實驗過程和方法也可以分別記錄下來,以便後期的分析;
5. 保留原始資料。處理了之後原始資料不要丟掉。

3. 讀取資料

這部分不詳述了,這個用自己熟知的程式語言去做就可以了。這裡可能要留意一下資料檔案編碼的問題,比如我自己在讀檔案的時候就報了這樣一個錯誤:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 23: illegal multibyte sequence

就是一個解碼錯誤的問題。大多數檔案讀寫操作預設的編碼是 UTF-8,遇到這種情況指定一下讀檔案的編碼就可以了。

open("filename",'w',encoding="utf8")

#encoding is the name of the encoding used to decode or encode the    file. This should only be used in text mode. The default encoding is    platform dependent, but any encoding supported by Python can be    passed.  See the codecs module for the list of supported encodings.

4. 常見的組織資料集的方法

  1. 排序並提取子集:以此篩選不符合變數範圍的資料或值是 N/A 的資料等;
  2. 對變數檢查和總結:例如檢查是否為 string 格式,判斷是否是 null 或空值,如果是數值,可能要計算一些統計值,例如總數,平均數等等;
  3. 建立新變數:有些資料可能需要通過一些變換才能得到你需要的目標值,你可以通過建立新變數,然後做對映得到你需要的值;
  4. 合併資料集:可以利用 ID 對應來合併,如果是屬性相同的不同資料集,可以利用屬性對應來合併。

5. 資料中常見問題

其實現在資料清洗是一個很大的工程,至今也沒有很好的工程化的方法,主要還是要靠人肉去檢查判斷(這裡有說了和沒說一樣的嫌疑= =)。但現實就是有時候洗資料的時間比實驗的時間還要長……
資料清洗是我們不得不面對的問題。資料集裡常見的問題有以下幾種:
缺失,重複,噪聲,不一致,維度高
一下是一些建議做法,當然實際處理的時候要根據自己的需要。

1. 資料缺失,即某些資料的部分屬性值缺失。
- 如果對於某一屬性值,缺失的資料佔比很小,比如一萬條資料當中,缺失該屬性的只有 10 條資料,那麼我們可以簡單去除這十條缺失資料。
- 如果某一屬性值缺失非常多,比如一個公司網點分佈的資料集,屬性包含城市,經緯度,郵編,地址……郵編這個屬性在一萬個網點資料當中,九千多個都沒有這個屬性值,那麼這個屬性也就沒有參考意義了,可以去除。
- 有些屬性值缺失很多,但是可以依據其他屬性值來填補的,例如用身份證號填充出生日期,根據經緯度範圍填充城市等等。
- 也有一些缺失值可以用特定的內容來填充,例如:0,null,未知等,不過這個要根據實際來判斷這樣填充是否利於後期的資料分析。
- 一些可推斷的數值也可以用均值,中位數這些來填充,比如按照時間序列排序的資料。
- 當然還有一些統計學上更加複雜的填充方式,比如貝葉斯,迴歸等等。
- 如果缺失值不影響統計結果,也可以忽略。

2. 重複
重複這個問題也是需要對資料做一個初步的判斷,有些重複資料是無用的,需要查重並刪除,但是有些情況,比如主題模型當中,需要統計詞頻,此時不但不能去重,而且相同詞根的詞也要做出處理,使其在統計時疊加,否則主題概率會出現問題。

3. 噪聲
很多演算法對離群值非常敏感,例如 KNN。
判斷離群值方法也很多,最直觀的一種應該就是可視化了,
比如這個例子
離群點
資料集中的部分放大以後是這樣的:
資料集中點
然而,高維資料很難在空間中表示出來,很多屬性也不支援這種直觀的表達。
這裡我們還可以藉助很多統計和計算方法:
1. 簡單的統計。已知一個屬性值的特定範圍,就可以簡單地把範圍以外的資料篩選出去。比如上圖中是一個城市中的一些建築位置統計,你知道該城市的經緯度範圍,在此之外的點一定是有錯誤的。
2. 3σ 原則。即資料符合正態分佈,那麼與均值的差超過三倍標準差的都可視作異常值。
3. 基於距離。在資料量不大,而且距離易於計算的時候可以使用。距離判斷的方法可以參考之前分享過的文章。
4. 基於箱形圖分析。箱形圖依據的也是簡單的統計量,下圖是箱形圖的一個示例:
箱形圖
還有其他判斷方法這裡就不多介紹了。異常值或離群點的處理方法一般也是以下幾種:
1. 刪除:對於異常值不多且易於判斷的可以刪除
2. 不處理:對於對異常值不敏感的演算法可以不處理
3. 均值替代:可以減少資料的損失
4. 手工更正:如果離群值是明顯錯誤且可以更正,那麼可以考慮手動更改,比如知道某建築的經緯度,可以用正確的值替代。

4. 不一致
這裡不一致可能是不同屬性值之間的不一致,比如城市和對應的郵編,也可能是同屬性的單位不一致,或資料型別不一致等等。
這個問題大多數情況還是可以批量解決的,像資料型別轉換,字串的規範化,遇到城市和郵編的這種狀況也可以用對應的郵編列表來更正,這個後面再稍微詳細說。

5. 維度高
這裡針對的是一些可以合併處理的屬性或是對分類或聚類無影響的屬性。
降維一般分為特徵選擇和特徵檢測兩大方法。
特徵選擇即資料中包含大量無關變數,我們要在其中找出主要變數。代表方法為 LASSO 演算法。
特徵提取即將高維資料轉化為低維資料,可能捨棄原有資料,也可能建立新的變數,代表方法就是很常見的主成分分析(PCA)了。
關於 PCA 的數學原理,這裡有一篇寫的非常好的部落格 PCA 的數學原理

6. 其他補充

  1. 不同領域有一些不同的預處理標準
  2. 字串標準化的一些方法:
    • 統一大小寫(儘可能轉換為小寫)
    • 根據空格或某些符號做分割
    • 去除多餘空格,標點符號,下劃線等
    • 提取子字串
  3. 資料型別轉換(string -> int, etc)
  4. 資料處理,包括連續屬性的離散化和二元化,即將連續屬性變換為分類屬性或一個/多個二元屬性
  5. 一些數值屬性也需要做歸一化/標準化

相關推薦

資料概念彙總資料處理

資料探勘簡介 資料探勘,顧名思義,就是在大量的資料中發現有用的資訊,隨著資訊科技發展,每天都會產生大量的資料,可以說我們正處於一個大資料的時代。面對如此多的資料,傳統的分析方法不再適用,這就需要我們用新的技術工具來從資料中找到隱藏的資訊。 資料探勘的應用相當

資料技術(一)——處理

1、資料預處理 資料預處理技術包括:聚集、抽樣、維規約、特徵子集選擇、特徵建立、離散化和二元化、變數變換。 屬性的型別:標稱(定性的)(值僅僅是不同的名字,即只提供足夠的資訊以區分物件, 如僱員ID,性別)、序數(定性的)(值提供足夠資訊確定物件的序, ,如成績,街道

資料概念雜記

混淆矩陣 利用混淆矩陣可更好的分辨出分類中分錯誤的。 1. 資料集中的記錄總數=TP+FP+FN+TN 2. 資料集中肯定記錄數=TP+FN 3. 資料集中否定記錄數=FP+TN 4. 分類模型作出陽性判斷的記錄數=TP+FP 5. 分類模型作出陰性判斷的記錄數=FN+TN 6. 分類模

資料概念與技術》學習筆記

1.Chapter1 引論: (1) OLTP 和 OLAP 概念: OLTP(on-line transaction processing) 聯機事物處理,就是我們經常說的關係資料庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。例如:mysql OLAP(on

資料概念與技術】學習筆記6-挖掘頻繁模式、關聯和相關性:基本概念和方法(編緝中)

頻繁模式是頻繁地出現在資料集中的模式(如項集、子序列或子結構)。頻繁模式挖掘給定資料集中反覆出現的聯絡。“購物籃”例子,想象全域是商店中商品的集合,每種商品有一個布林變數,表示該商品是否出現。則每個購物籃可以用一個布林向量表示。分析布林向量,得到反映商品頻繁關聯或同時購買的購買模式。這些模式可用關聯規則來表示

資料概念與技術》讀書筆記

最近在學習資料探勘和資料分析相關內容,在很多地方有很多朋友都推薦該書,遂購書一本,以作學習之用,把讀書過程中一些習得記錄在此,以備查閱。 第一章 引論 1.1 為什麼進行資料探勘 現在的我們生活在一個資訊時代,每天都有各種各樣大量的資料產生並儲存到

資料結果】大資料企業的彙總資訊

名稱 涉及領域 核心業務 投資機構 投資機構 投資機構 投資機構 金額(人民幣) 輪次 美林資料 演算法/分析

機器學習與資料-logistic迴歸手寫識別例項的實現

本文主要介紹logistic迴歸相關知識點和一個手寫識別的例子實現 一、logistic迴歸介紹: logistic迴歸演算法很簡單,這裡簡單介紹一下: 1、和線性迴歸做一個簡單的對比 下圖就是一個簡單的線性迴歸例項,簡單一點就是一個線性方程表示 (就是用來描述自變數和因

資料概念與技術 第2章 認識資料

本文主要介紹資料物件與屬性,資料的基本統計描述,資料視覺化和度量資料的相似性和相異性。 2.1 資料物件與屬性類別 資料集由資料物件組成,一個數據物件代表一個實體。通常資料物件用屬性描述。資料物件又稱樣本、例項、資料點或物件。如果資料物件存放在資

資料概念與技術》第二版 中文版 第一章答案

引言 1.1 什麼是資料探勘?在你的回答中,針對以下問題: a. 它是又一種廣告宣傳嗎? b. 它是一種從資料庫、統計學和機器學習發展的技術的簡單轉換嗎? c. 解釋資料庫技術發展如何導致資料探勘 d. 當把資料探勘看作知識發現過程時,描述挖掘所

資料概念與分析第八章筆記

分類的基本概念 分類  分類是一種重要的資料分析形式,它提取刻畫重要資料類的模型,這種模型稱為分類器,預測分類(離散的,無序的)類標號。 分類和數值預測是預測問題的兩種主要型別。 分類的一般方法  資料分類涉及兩個過程: 1:學習階段:建立描述預先定義的資料類或概

資料工程師筆試答案整理

2013百度校園招聘資料探勘工程師 一、簡答題(30分)1、簡述資料庫操作的步驟(10分) 步驟:建立資料庫連線、開啟資料庫連線、建立資料庫命令、執行資料庫命令、儲存資料庫命令、關閉資料庫連線。 經萍萍提醒,瞭解到應該把preparedStatement預處理也考慮

資料概念與技術(原書第三版)範明 孟小峰譯-----第六章課後習題答案

第六章答案 第六章答案 該答案為重慶大學計算機學院Jack Channy所作,由於本人水平有限,難免有錯誤和不當之處,如有意見請評論或者發郵件至[email protected]。 6.1 假設有資料集D上所有閉頻繁項集

資料概念與技術——讀書筆記(1)

原書第三版 Jiawei Han     Micheline Kamber     Jian Pei  著 第一章 引論 為什麼進行資料探勘 解決“資料豐富,但資訊貧乏”的問題。 資料的爆炸式增長,廣泛可用,巨大數量  ——>   資料時代 

資料概念與技術》讀書筆記(一)

轉自:http://blog.csdn.net/zhucanxiang/article/details/9843901 之前看過經典的《資料探勘導論》,然後又看了韓家煒的《資料探勘概念與技術》這本資料探勘入門書籍,對資料探勘也有了一個初步的瞭解,特此寫篇文章總結一下自己

資料工具Weka之資料格式ARFFCSV檔案格式轉換

Weka介紹: Weka是一個用Java編寫的資料探勘工具,能夠執行在各種平臺上。它不僅提供了可以直接用於資料探勘的軟體,還提供了src程式碼,使用者可以修改原始碼,進行二次開發。但是,由於其使用了Java虛擬機器,導致其不適合處理大型資料,執行緩慢。處理超過一定大小資料,

資料概念與技術——讀書筆記(2)

原書第三版 Jiawei Han   Micheline Kamber   Jian Pei 著 第二章 認識資料 在進行資料探勘之前,首先需要準備好資料,熟悉資料。 資料物件與屬性型別 一個數據物件代表一個實體,又稱樣本、例項、資料點或物件。

資料 概念與技術——讀書筆記(8)

基本概念 什麼是分類 構造一個模型或分類器來預測類標號 類別可以用離散值表示,且其中的次序沒有意義。 預測一個連續函式或有序值 預測器進行數值預測,迴歸分析是最常用的方法。 分類的一般方法 學習階段 使用訓練元祖構建分類模型,由於提供了每個訓

資料概念與分析第六章筆記

挖掘頻繁模式 頻繁模式是頻繁地出現在資料集中的模式,主要包括頻繁項集模式,頻繁序列模式,和頻繁結構模式。 我們先了解什麼是項集,K-項集,資料集,絕對支援值的概念。書中都有講解,這裡簡單的來說一下。 項集:最基本的模式就是項集,是指若干個項的集合 K-項集:包含K個項

【MNIST/Python】手寫體數字訓練/測試資料集(圖片格式)下載分割處理

MNIST手寫體數字資料集 MNIST是一個手寫數字資料庫,它有60000個訓練樣本集和10000個測試樣本集 由Yann LeCun等人建立,是NIST資料庫的一個子集 官方網址連結:Link 官網上的資料庫檔案形式如下: train-images-idx3-ubyte.