《Python數據挖掘》筆記(三)實體匹配
Python數據挖掘:概念、方法與實踐。Megan Squire著,姚軍譯,機械工業出版社,2017年。
筆記中有些內容直接引用原書。
=======================================================
本章關心的是實體(或者事物)的精確識別,以及匹配實體的正確指定。
本章將學習:
a. 實體匹配的常見策略,包括屬性匹配、互斥集、上下文匹配和典型匹配分析;
b. 如何評估所選擇方法的效率,包括結果集精度、召回率和F-度量的計算;
c. 如何對一個現實世界問題應用實體匹配方法。
3.1 什麼是實體匹配
當數據集合併時,識別重複項。該任務有許多別稱:實體歧義消除、對象合併、重複識別、合併/清除和記錄連接等。
3.1.1 數據合併
數據合併意味著需要從物理上或者邏輯上組合多個數據集。在數據合併之前牢記幾個數據質量原則:
a. 通常,應該儘可能多地保留數據。
b. 純凈的數據更好。合併後的數據應該儘可能統一,使用標準化的字符集、格式等。
c. 數據應該具有原子性。必須儘可能將其分解為最小的部件,而不使其失去意義。單獨的地址、城市、州和郵政編碼欄位可能比一個包含地址各部分的巨型欄位更有用。
數據合併的方式:
a. 數據的垂直合併:就是添加行。
b. 數據的水平合併:就是添加列。
3.1.2 匹配技術
沒有最佳的匹配技術或演算法。
3.1.3 基於屬性的相似度匹配
給屬性建立相似度函數,給屬性相似度打分。
a. 成對比較時要留心:可能組合數量很大,要煞費苦心地減少可能匹配的集合,可能需要使用持久化存儲。
b. 利用稀有值:可以利用非常稀有的值提高匹配精度。
3.1.4 屬性匹配方法
a. 基於範圍或者與目標的距離
b. 字元串編輯距離(包括海明距離和Levenshtein距離)
c. 海明距離:一個字元串變成另一個字元串所需要替換的字元數,但不允許插入和刪除。
d. Levenshtein距離:將一個字元串變成另一個字元串需要的最少替換、刪除或者插入數量。
e. 聲索引Soundex:計算字元串發音的相似度。
3.1.5 利用不相交數據集
不相交數據集指的是一個數據集與另一個數據集的屬性相互重疊但不完全相等的情況。給不同屬性之間建立一定約束關係來輔助共同屬性的匹配。
3.1.6 基於上下文的相似度匹配
考慮在某種上下文空間內每個實體相互關聯的方式。想像為每個數據集建立一個層次或者圖形結構,並根據在圖中的相似位置匹配實體。
3.1.7 基於機器學習的實體匹配
採用機器學習演算法,如貝葉斯分類器、支持向量機或者決策樹等。
3.1.8 實體匹配技術的評估
a. 效率——匹配需要花費多長時間
通過分塊方法減少配對列表大小,通過數值範圍、日期範圍、字元串編輯距離和聲索引可減少比較次數,還可以減少需要比較的屬性數量以及過程中的總體比較次數和複雜度。
b. 效率——我們生成的匹配有多精確
真陽性:相同的實體被正確匹配
真陰性:不同的實體不被匹配
假陽性:不同的實體被匹配
假陰性:相同的實體沒被匹配
召回率:正確的猜測(真陽性)除以實際匹配的總數(真陽性+假陰性)
準確度:正確猜測數量除以所有猜測的總數
特異度:真陰性數量除以猜測的陰性數量和真陰性數量的總和
c. 實用性——使用匹配過程的可行性問題
實用指的是使用的過程可以推廣,包含的人工步驟最少。可推廣意味著實體匹配過程廣泛適用於許多情況。這些情況可能包括不同的領域、不同時間或者不同系統。
3.2 實體匹配項目
以RubyForge和RubyGem兩個網站的項目做匹配。採用了幾種屬性匹配:
a. 根據項目名稱匹配
b. 根據人名匹配
c. 根據URL匹配
d. 按照主題和描述關鍵詞匹配
Github代碼
3.3 小結
BrianZhang:《Python數據挖掘》筆記(一)擴展你的數據挖掘工具箱BrianZhang:《Python數據挖掘》筆記(二)關聯規則挖掘BrianZhang:《Python數據挖掘》筆記(四) 網路分析BrianZhang:《Python數據挖掘》筆記(五) 文本情緒分析BrianZhang:《Python數據挖掘》筆記(六) 文本中的命名實體識別BrianZhang:《Python數據挖掘》筆記(七) 自動化文本摘要BrianZhang:《Python數據挖掘》筆記(八)文本中的主題建模BrianZhang:《Python數據挖掘》筆記(九)挖掘數據異常軟體開發之路推薦閱讀:
※【Python】基本的搜索與排序演算法
※學Python到找工作-資源匯總
※為什麼感覺django裡面class based view很難呢?
※traitsui 庫互動式界面
※從零開始寫Python爬蟲 --- 2.1 Scrapy 爬蟲框架的安裝與基本介紹