機器學習 | 特徵工程
特徵工程指的是把原始資料轉變為模型的訓練資料的過程,它的目的就是獲取更好的訓練資料特徵,使得機器學習模型逼近這個上限。
簡單來說就是演算法的前期處理階段,經過特徵工程處理後的資料是無法直接透過肉眼辨別處理的好換,只有透過演算法的結果反推特徵工程處理的好壞,如果模型任何效果不好,任何一個模型的效果都不好,八成是特徵工程不好,需要重新做特徵工程。
需要什麼樣的資料
一般公司內部做機器學習的資料來源:
使用者行為日誌資料:記錄的使用者在系統上所有操作所留下來的日誌行為資料
業務資料:商品/物品的資訊、使用者/會員的資訊……
第三方資料:爬蟲資料、購買的資料、合作方的資料……
資料如何儲存
一般情況下,用於後期模型建立的資料都是存在在本地磁碟、關係型資料庫或者一些相關的分散式資料儲存平臺的。
本地磁碟MySQL、Oracle、Hbase、HDFS、Hive。
資料清洗
資料清洗(datacleaning)是在機器學習過程中一個不可缺少的環節,其資料的清洗結果直接關係到模型效果以及最終的結論。
資料清洗的步驟:
預處理
在資料預處理過程主要考慮兩個方面,如下:
選擇資料處理工具:關係型資料庫或者Python檢視資料的後設資料以及資料特徵:一是檢視後設資料,包括欄位解釋、資料來源等一切可以描述資料的資訊;
另外是抽取一部分資料,透過人工檢視的方式,對資料本身做一個比較直觀的瞭解,並且初步發現一些問題,為之後的資料處理做準備。
資料清洗–格式內容錯誤資料清洗
一般情況下,資料是由使用者/訪客產生的,也就有很大的可能性存在格式和內容上不一致的情況,所以在進行模型構建之前需要先進行資料的格式內容清洗操作。格式內容問題主要有以下幾類:
- 時間、日期、數值、半全形等顯示格式不一致:直接將資料轉換為一類格式即可,該問題一般出現在多個資料來源整合的情況下。
- 內容中有不該存在的字元:最典型的就是在頭部、中間、尾部的空格等問題,這種情況下,需要以半自動校驗加半人工方式來找出問題,並去除不需要的字元。
- 內容與該欄位應有的內容不符:比如姓名寫成了性別、身份證號寫成手機號等問題。
資料清洗–邏輯錯誤清洗
主要是透過簡單的邏輯推理發現資料中的問題資料,防止分析結果走偏,主要包 含以下幾個步驟:
- 資料去重,去除/替換不合理的值
- 去除/重構不可靠的欄位值(修改矛盾的內容)
資料清洗–去除不需要的資料
一般情況下,我們會盡可能多的收集資料,但是不是所有的欄位資料都是可以應 用到模型構建過程的,也不是說將所有的欄位屬性都放到構建模型中,最終模型 的效果就一定會好,實際上來講,欄位屬性越多,模型的構建就會越慢,所以有 時候可以考慮將不要的欄位進行刪除操作。在進行該過程的時候,要注意備份原 始資料。
資料清洗–關聯性驗證
如果資料有多個來源,那麼有必要進行關聯性驗證,該過程常應用到多資料來源合 並的過程中,透過驗證資料之間的關聯性來選擇比較正確的特徵屬性,比如:汽 車的線下購買資訊和電話客服問卷資訊,兩者之間可以透過姓名和手機號進行關 聯操作,匹配兩者之間的車輛資訊是否是同一輛,如果不是,那麼就需要進行數 據調整。
資料不平衡
在實際應用中,資料往往分佈得非常不均勻,也就是會出現“長尾現象”,即絕 大多數的資料在一個範圍/屬於一個類別,而在另外一個範圍或者另外一個類別 中,只有很少的一部分資料。那麼這個時候直接使用機器學習可能效果會不太少, 所以這個時候需要我們進行一系列的轉換操作。
- 設定損失函式的權重,使得少數類別資料判斷錯誤的損失大於多數類別資料判斷 錯誤的損失,即當我們的少數類別資料預測錯誤的時候,會產生一個比較大的損 失值,從而導致模型引數往讓少數類別資料預測準確的方向偏。可以透過scikit- learn中的class_weight引數來設定權重。
- 下采樣/欠取樣(under sampling):從多數類中隨機抽取樣本從而減少多數類別 樣本資料,使資料達到平衡的方式。
- 整合下采樣/欠取樣:採用普通的下采樣方式會導致資訊丟失,所以一般採用集 成學習和下采樣結合的方式來解決這個問題;主要有兩種方式:
EasyEnsemble:
採用不放回的資料抽取方式抽取多數類別樣本資料,然後將抽取出來的資料和少數類別 資料組合訓練一個模型;多次進行這樣的操作,從而構建多個模型,然後使用多個模型 共同決策/預測。
BalanceCascade:
利用Boosting這種增量思想來訓練模型;先透過下采樣產生訓練集,然後使用 Adaboost演算法訓練一個分類器;然後使用該分類器多對所有的大眾樣本資料進行預測, 並將預測正確的樣本從大眾樣本資料中刪除;重複迭代上述兩個操作,直到大眾樣本數 據量等於小眾樣本資料量。
- Edited Nearest Neighbor(ENN):對於多數類別樣本資料而言,如果這個樣本 的大部分k近鄰樣本都和自身類別不一樣,那我們就將其刪除,然後使用刪除後 的資料訓練模型。
- Repeated Edited Nearest Neighbor(RENN):對於多數類別樣本資料而言, 如果這個樣本的大部分k近鄰樣本都和自身類別不一樣,那我們就將其刪除;重 復性的進行上述的刪除操作,直到資料集無法再被刪除後,使用此時的資料集據 訓練模型
- Tomek Link Removal:如果兩個不同類別的樣本,它們的最近鄰都是對方,也 就是A的最近鄰是B,B的最近鄰也是A,那麼A、B就是Tomek Link。將所有 Tomek Link中多數類別的樣本刪除。然後使用刪除後的樣本來訓練模型
- 過取樣/上取樣(Over Sampling):和欠取樣採用同樣的原理,透過抽樣來增加 少數樣本的數目,從而達到資料平衡的目的。一種簡單的方式就是透過有放回抽 樣,不斷的從少數類別樣本資料中抽取樣本,然後使用抽取樣本+原始資料組成 訓練資料集來訓練模型;不過該方式比較容易導致過擬合,一般抽樣樣本不要超過50%。
過取樣/上取樣(Over Sampling):因為在上取樣過程中,是進行是隨機有放回 的抽樣,所以最終模型中,資料其實是相當於存在一定的重複資料,為了防止這 個重複資料導致的問題,我們可以加入一定的隨機性,也就是說:在抽取資料後, 對資料的各個維度可以進行隨機的小範圍變動,eg: (1,2,3) –> (1.01, 1.99, 3); 透過該方式可以相對比較容易的降低上取樣導致的過擬合問題。
特徵轉化
特徵轉換主要指將原始資料中的欄位資料進行轉換操作,從而得到適合進行演算法型構建的輸入資料(數值型資料),在這個過程中主要包括但不限於以下幾種資料的處理:
- 文字資料轉換為數值型資料
- 預設值填充
- 定性特徵屬性啞編碼
- 定量特徵屬性二值化
- 特徵標準化與歸一化
1. 文字資料轉換為數值型資料
第一步:分詞
定義:透過某種技術將連續的文字分隔成更具有語言語義學上意義的詞。這個過 程就叫做分詞
方法:
按照文字/單詞特徵進行劃分:對於英文文件,可以基於空格進行單詞劃分。
詞典匹配:匹配 方式可以從左到右,從右到左。對於匹配中遇到的多種分段可能性, 通常會選取分隔出來詞的數目最小的。
基於統計的方法:隱馬爾可夫模型(HMM)、最大熵模型(ME),估計相鄰漢字 之間的關聯性,進而實現切分
基於深度學習:神經網路抽取特徵、聯合建模
Jieba分詞:
定義:中文分詞模組
原理:
- 字串匹配:把漢字串與詞典中的詞條進行匹配,識別出一個詞
- 理解分詞法:透過分詞子系統、句法語義子系統、總控部分來模擬人對句子的理解。
- 統計分詞法:建立大規模語料庫,透過隱馬爾可夫模型或其他模型訓練,進行分詞
第二步:轉換
常用方法:詞袋法(BOW/TF)、TF-IDF、HashTF、Word2Vec
- 詞袋法(Bag of words, BOW)是最早應用於NLP和IR領域的一種文字處理模型, 該模型忽略文字的語法和語序,用一組無序的單詞(words)來表達一段文字或者 一個文件,詞袋法中使用單詞在文件中出現的次數(頻數)來表示文件
- 詞集法(Set of words, SOW)是詞袋法的一種變種,應用的比較多,和詞袋法的 原理一樣,是以文件中的單詞來表示文件的一種的模型,區別在於:詞袋法使用 的是單詞的頻數,而在詞集法中使用的是單詞是否出現,如果出現賦值為1,否 則為0。
- TF-IDF:在詞袋法或者詞集法中,使用的是單詞的詞頻或者是否存在來進行表示文件特徵, 但是不同的單詞在不同文件中出現的次數不同,而且有些單詞僅僅在某一些文件 中出現(eg:專業名稱等等),也就是說不同單詞對於文字而言具有不同的重要性, 那麼,如何評估一個單詞對於一個文字的重要性呢?
單詞的重要性隨著它在文字中出現的次數成正比增加,也就是單詞的出現次數越多, 該單詞對於文字的重要性就越高。 同時單詞的重要性會隨著在語料庫中出現的頻率成反比下降,也就是單詞在語料庫
中出現的頻率越高,表示該單詞越常見,也就是該單詞對於文字的重要性越低。
2. 預設值填充
主要步驟:
- 確定預設值範圍
- 去除不需要的欄位
- 填充預設值內容、
- 重新獲取資料
重點是填充預設值內容的填充。
在進行確定預設值範圍的時候,對每個欄位都計算其缺失比例,然後按照缺失比例和欄位重要性分別指定不同的策略。
在進行去除不需要的欄位的時候,需要注意的是:刪除操作最好不要直接操作與 原始資料上,最好的是抽取部分資料進行刪除欄位後的模型構建,檢視模型效果, 如果效果不錯,那麼再到全量資料上進行刪除欄位操作。總而言之:該過程簡單 但是必須慎用,不過一般效果不錯,刪除一些丟失率高以及重要性低的資料可以 降低模型的訓練複雜度,同時又不會降低模型的效果。
填充預設值內容是一個比較重要的過程,也是我們常用的一種預設值解決方案, 一般採用下面幾種方式進行資料的填充:
- 以業務知識或經驗推測填充預設值 以同一欄位指標的計算結果(均值、中位數、眾數等)填充預設值
- 以不同欄位指標的計算結果來推測性的填充預設值,比如透過身份證號碼計算年齡、 透過收貨地址來推測家庭住址、透過訪問的IP地址來推測家庭/公司/學校的家庭住址 等等
如果某些指標非常重要,但是缺失率有比較高,而且透過其它欄位沒法比較精準 的計算出指標值的情況下,那麼就需要和資料產生方(業務人員、資料收集人員 等)溝通協商,是否可以透過其它的渠道獲取相關的資料,也就是進行重新獲取 資料的操作。
4. 啞編碼
啞編碼(OneHotEncoder):對於定性的資料(也就是分類的資料),可以採用N位 的狀態暫存器來對N個狀態進行編碼,每個狀態都有一個獨立的暫存器位,並且 在任意狀態下只有一位有效;是一種常用的將特徵數字化的方式。
比如有一個特徵屬性:[‘male’,’female’],那麼male使用向量[1,0]表示,female使用[0,1]表示。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2654526/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 機器學習——特徵工程機器學習特徵工程
- 機器學習特徵工程機器學習特徵工程
- 機器學習之特徵工程機器學習特徵工程
- 機器學習2-特徵工程機器學習特徵工程
- 面向機器學習的特徵工程一、引言機器學習特徵工程
- 機器學習-特徵提取機器學習特徵
- 機器學習中,有哪些特徵選擇的工程方法?機器學習特徵
- SparkML機器學習之特徵工程(一)特徵提取(TF-IDF、Word2Vec、CountVectorizer)Spark機器學習特徵工程
- 百面機器學習總結--第一章特徵工程機器學習特徵工程
- 機器學習的靜態特徵和動態特徵機器學習特徵
- 美團機器學習實踐第二章-特徵工程總結機器學習特徵工程
- 在大型金融資料集上使用機器學習的特徵工程測試機器學習特徵工程
- python基礎學習之 特徵工程Python特徵工程
- 機器學習之良好特徵的特點機器學習特徵
- 機器學習1-sklearn&字典特徵抽取機器學習特徵
- 機器學習筆記——特徵標準化機器學習筆記特徵
- 機器學習的未來——深度特徵融合機器學習特徵
- 為什麼說自動化特徵工程將改變機器學習的方式特徵工程機器學習
- 回顧·機器學習/深度學習工程實戰機器學習深度學習
- 機器學習框架ML.NET學習筆記【3】文字特徵分析機器學習框架筆記特徵
- 機器學習之 基於xgboost的特徵篩選機器學習特徵
- 機器學習之特徵組合:組合獨熱向量機器學習特徵
- 哪些特徵對我的機器學習模型影響最大?特徵機器學習模型
- 機器學習工程師方向文章清單機器學習工程師
- 【Meetup預告】OpenMLDB+OneFlow:連結特徵工程到模型訓練,加速機器學習模型開發特徵工程模型機器學習
- 人工智慧-機器學習-Python-第三方庫-scikit-learn(用於特徵工程)人工智慧機器學習Python特徵工程
- AI工程師的機遇在哪?機器學習工程師最急缺AI工程師機器學習
- 谷歌機器學習43條規則:機器學習工程的最佳實踐經驗谷歌機器學習
- 機器學習-無監督學習(人臉識別,使用NMF進行特徵提取)機器學習特徵
- 今日面試題分享:請寫出你瞭解的機器學習特徵工程操作,以及它的意義面試題機器學習特徵工程
- 什麼是機器學習的特徵工程?【資料集特徵抽取(字典,文字TF-Idf)、特徵預處理(標準化,歸一化)、特徵降維(低方差,相關係數,PCA)】機器學習特徵工程PCA
- 使用SAP Cloud Platform Leonardo機器學習提取圖片的特徵向量CloudPlatform機器學習特徵
- 【火爐煉AI】機器學習050-提取影像的Star特徵AI機器學習特徵
- 機器學習“特徵編碼”的經驗分享:魚還是熊掌?機器學習特徵
- Feature Tools:可自動構造機器學習特徵的Python庫機器學習特徵Python
- 特徵工程特徵工程
- 【機器學習】機器學習簡介機器學習
- 10年內將不再有機器學習工程師?機器學習工程師