特征工程

? ? ? ?上周參加了學校的數據挖掘競賽,總的來說,在還需要人工干預的機器學習相關的任務中,主要解決兩個問題:(1)如何將原始的數據處理成合格的數據輸入(2)如何獲得輸入數據中的規律。第一個問題的解決方案是:特征工程。第二個問題的解決辦法是:機器學習。

?????? 相對機器學習的算法而言,特征工程的工作看起來比較low,但是特征工程在機器學習中非常重要。特征工程,是機器學習系列任務中最耗時、最繁重、最無聊卻又是最不可或缺的一部分。這些工作先行者們已經總結的很好,作為站在巨人的肩膀上的后來者,對他們的工作表示敬意。主要內容轉載自http://www.cnblogs.com/jasonfreak/p/5448385.html

這篇文章在該文章的基礎上做了添加或修改,仍在更新中

特征工程

1、特征工程是什么:

?????? 工業界流傳者這么一句話:數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。

?????? 那么,到底什么是特征工程?我們知道,數據是信息的載體,但是原始的數據包含了大量的噪聲,信息的表達也不夠簡練。因此,特征工程的目的,是通過一系列的工程活動,將這些信息使用更高效的編碼方式(特征)表示。使用特征表示的信息,信息損失較少,原始數據中包含的規律依然保留。此外,新的編碼方式還需要盡量減少原始數據中的不確定因素(白噪聲、異常數據、數據缺失…等等)的影響

?????? 經過前人的總結,特征工程已經形成了接近標準化的流程,如下圖所示:

??

2、異常數據的清洗和樣本的選取

異常數據的清洗,目標是將原始數據中異常的數據清除。?

上圖表示了2015年7月到11月某個地點人流量的變化。數據的分析圖可以看到,紅色的框框內表示了數據的缺失和異常的峰值。這些異常的數據需要在特征的預處理前清除。一般情況下,直接將這些數據舍棄。

除了使用肉眼觀察的辦法來判斷數據的合理性,工業中,更多采用算法或者公式對數據的是否異常進行判斷。

(1)??? 結合業務情況進行過濾:比如去除crawler抓取,spam,作弊等數據

(2)??? 異常點檢測采用異常點檢測算法對樣本進行分析,常用的異常點檢測算法包括

2?? 偏差檢測:聚類、最近鄰等

2?? 基于統計的異常點檢測

例如極差,四分位數間距,均差,標準差等,這種方法適合于挖掘單變量的數值型數據。全距(Range),又稱極差,是用來表示統計資料中的變異量數(measures of variation) ,其最大值與最小值之間的差距;四分位距通常是用來構建箱形圖,以及對概率分布的簡要圖表概述。

2?? 基于距離的異常點檢測

主要通過距離方法來檢測異常點,將數據集中與大多數點之間距離大于某個閾值的點視為異常點,主要使用的距離度量方法有絕對距離 ( 曼哈頓距離 ) 、歐氏距離和馬氏距離等方法。

2?? 基于密度的異常點檢測

考察當前點周圍密度,可以發現局部異常點,例如LOF算法

3、數據預處理

通過特征提取,我們能得到未經處理的特征,這時的特征可能有以下問題:

2? 不屬于同一量綱:即特征的規格不一樣,不能夠放在一起比較。無量綱化可以解決這一問題。

2? 信息冗余:對于某些定量特征,其包含的有效信息為區間劃分,例如學習成績,假若只關心“及格”或不“及格”,那么需要將定量的考分,轉換成“1”和“0”表示及格和未及格。二值化可以解決這一問題。

2? 定性特征不能直接使用:某些機器學習算法和模型只能接受定量特征的輸入,那么需要將定性特征轉換為定量特征。最簡單的方式是為每一種定性值指定一個定量值,但是這種方式過于靈活,增加了調參的工作。通常使用獨熱編碼的方式將定性特征轉換為定量特征:假設有N種定性值,則將這一個特征擴展為N種特征,當原始特征值為第i種定性值時,第i個擴展特征賦值為1,其他擴展特征賦值為0。獨熱編碼的方式相比直接指定的方式,不用增加調參的工作,對于線性模型來說,使用獨熱編碼后的特征可達到非線性的效果。

2? 存在缺失值:缺失值需要補充。

2? 信息利用率低:不同的機器學習算法和模型對數據中信息的利用是不同的,之前提到在線性模型中,使用對定性特征獨熱編碼可以達到非線性的效果。類似地,對定量變量多項式化,或者進行其他的轉換,都能達到非線性的效果。

2? 特征缺失:在本次的比賽中,影響人流量的因素還有天氣、溫度…等等,而這些因素在原始數據中并不存在,因此,需要在數據預處理的時候,將這些影響因素添加進來。

3.1無量綱化

  無量綱化使不同規格的數據轉換到同一規格。常見的無量綱化方法有標準化和區間縮放法。標準化的前提是特征值服從正態分布,標準化后,其轉換成標準正態分布。區間縮放法利用了邊界值信息,將特征的取值區間縮放到某個特點的范圍,例如[0, 1]等。

3.1.1標準化

  常用的方法是z-score標準化,經過處理后的數據均值為0,標準差為1,處理方法是:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?$x'=\frac{x-\mu}{\delta}$? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1)

公式一中,x’是標準化后的特征,x是原始特征值, 是樣本均值, 是樣本標準差。它們可以通過現有樣本進行估計。在已有樣本足夠多的情況下比較穩定,適合現代嘈雜大數據場景。

3.1.2 區間縮放法

常用的方法是通過對原始數據進行線性變換把數據映射到[0,1]之間,變換函數為:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? $x'=\frac{x-\min}{\max-\min} $? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)

  其中?min 是樣本中最小值,?max是樣本中最大值,注意在數據流場景下最大值與最小值是變化的。另外,最大值與最小值非常容易受異常點影響,所以這種方法魯棒性較差,只適合傳統精確小數據場景。

3.1.3歸一化

簡單來說,標準化是依照特征矩陣的列處理數據,其通過求z-score的方法,將樣本的特征值轉換到同一量綱下。歸一化是依照特征矩陣的行處理數據,其目的在于樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的標準,也就是說都轉化為“單位向量”。規則為 的歸一化公式如下:

? ? ? ? ? ? ? ?$x'=\frac{x}{\sqrt{\sum_j^m x^2_j}} $???????????????????????? ??????(3)

  使用preproccessing庫的Normalizer類對數據進行歸一化的代碼如下:

3.2 對定量特征二值化(離散化)[1]

  定量特征二值化的核心在于設定一個閾值,大于閾值的賦值為1,小于等于閾值的賦值為0,公式表達如下:

? ? ? ? ? ? $x'=\left\{\begin{aligned}1&,& \ \ x>threshold\\0&,& x\leq threshold\end{aligned}\right.$? ? ? ? ? ? ? ? ? ? ? ? ? ?(4)

3.3 對定性特征進行獨熱編碼

?????? 獨熱編碼:使用一個二進制的位來表示某個定性特征的出現與否

3.4 缺失值的處理

??? 現實世界中的數據往往非常雜亂,未經處理的原始數據中某些屬性數據缺失是經常出現的情況。另外,在做特征工程時經常會有些樣本的某些特征無法求出。下面是幾種處理數據中缺失值的主要方法。

3.4.1. 刪除

最簡單的方法是刪除,刪除屬性或者刪除樣本。如果大部分樣本該屬性都缺失,這個屬性能提供的信息有限,可以選擇放棄使用該維屬性;如果一個樣本大部分屬性缺失,可以選擇放棄該樣本。雖然這種方法簡單,但只適用于數據集中缺失較少的情況。

3.4.2. 統計填充

對于缺失值的屬性,尤其是數值類型的屬性,根據所有樣本關于這維屬性的統計值對其進行填充,如使用平均數、中位數、眾數、最大值、最小值等,具體選擇哪種統計值需要具體問題具體分析。另外,如果有可用類別信息,還可以進行類內統計,比如身高,男性和女性的統計填充應該是不同的。

3.4.3. 統一填充

對于含缺失值的屬性,把所有缺失值統一填充為自定義值,如何選擇自定義值也需要具體問題具體分析。當然,如果有可用類別信息,也可以為不同類別分別進行統一填充。常用的統一填充值有:“空”、“0”、“正無窮”、“負無窮”等。

3.4.4 預測填充

我們可以通過預測模型利用不存在缺失值的屬性來預測缺失值,也就是先用預測模型把數據填充后再做進一步的工作,如統計、學習等。雖然這種方法比較復雜,但是最后得到的結果比較好。

3.4.5具體分析

上面兩次提到具體問題具體分析,為什么要具體問題具體分析呢?因為屬性缺失有時并不意味著數據缺失,缺失本身是包含信息的,所以需要根據不同應用場景下缺失值可能包含的信息進行合理填充。下面通過一些例子來說明如何具體問題具體分析,仁者見仁智者見智,僅供參考:

  1. “年收入”:商品推薦場景下填充平均值,借貸額度場景下填充最小值;
  2. “行為時間點”:填充眾數;
  3. “價格”:商品推薦場景下填充最小值,商品匹配場景下填充平均值;
  4. “人體壽命”:保險費用估計場景下填充最大值,人口估計場景下填充平均值;
  5. “駕齡”:沒有填寫這一項的用戶可能是沒有車,為它填充為0較為合理;
  6. ”本科畢業時間”:沒有填寫這一項的用戶可能是沒有上大學,為它填充正無窮比較合理;
  7. “婚姻狀態”:沒有填寫這一項的用戶可能對自己的隱私比較敏感,應單獨設為一個分類,如已婚1、未婚0、未填-1。?

3.5 數據變換

  常見的數據變換有基于多項式的、基于指數函數的、基于對數函數的。4個特征,度為2的多項式轉換公式如下:

$(x'_1,x'_2...x'_{15})=(1,x_1,x_2,x_3,x_4,x_1^2,x_1*x_2,x_1*x_3,x_1*x_4,x_2^2,x_2*x_3,x_2*x_4,x_3^2,x_3*x_4,x_4^2)$ ?(5)

?

多項式特征變換,目標是將特征兩兩組合起來,使得特征和目標變量之間的的關系更接近線性,從而提高預測的效果

4、特征選擇

當數據預處理完成后,我們需要選擇有意義的特征輸入機器學習的算法和模型進行訓練。通常來說,從兩個方面考慮來選擇特征:

  • 特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什么用。
  • 特征與目標的相關性:這點比較顯見,與目標相關性高的特征,應當優選選擇。除方差法外,本文介紹的其他方法均從相關性考慮。

  根據特征選擇的形式又可以將特征選擇方法分為3種:

  • Filter:過濾法,按照發散性或者相關性對各個特征進行評分,設定閾值或者待選擇閾值的個數,選擇特征。
  • Wrapper:包裝法,根據目標函數(通常是預測效果評分),每次選擇若干特征,或者排除若干特征。
  • Embedded:嵌入法,先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。類似于Filter方法,但是是通過訓練來確定特征的優劣。

  我們使用sklearn中的feature_selection庫來進行特征選擇。

4.1 Filter

4.1.1 方差選擇法

  使用方差選擇法,先要計算各個特征的方差,然后根據閾值,選擇方差大于閾值的特征。

4.1.2 相關系數法

  使用相關系數法,先要計算各個特征對目標值的相關系數以及相關系數的P值。?

4.1.3 卡方檢驗

  經典的卡方檢驗是檢驗定性自變量對定性因變量的相關性。假設自變量有N種取值,因變量有M種取值,考慮自變量等于i且因變量等于j的樣本頻數的觀察值與期望的差距,構建統計量:

?$x^2=\sum\frac{(A-E)^2}{E} $ ? ? ?(6)

  這個統計量的含義簡而言之就是自變量對因變量的相關性。選擇卡方值排在前面的K個特征作為最終的特征選擇

4.1.4 互信息法

  經典的互信息也是評價定性自變量對定性因變量的相關性的,互信息計算公式如下:

?$I(X:Y)=\sum_{x\in X}\sum_{y\in Y}p(x,y)log\frac{p(x,y)}{p(x)p(y)}$ ? (7)

  同理,選擇互信息排列靠前的特征作為最終的選取特征

?

4.2 Wrapper

4.2.1 遞歸特征消除法

  遞歸消除特征法使用一個基模型來進行多輪訓練,每輪訓練后,消除若干權值系數的特征,再基于新的特征集進行下一輪訓練。

?

4.3 Embedded

4.3.1 基于懲罰項的特征選擇法

  使用帶懲罰項的基模型,除了篩選出特征外,同時也進行了降維。由于$L_1$范數有篩選特征的作用,因此,訓練的過程中,如果使用了$L_1$范數作為懲罰項,可以起到特征篩選的效果

4.3.2 基于樹模型的特征選擇法

  訓練能夠對特征打分的預選模型:GBDT、RandomForest和Logistic Regression等都能對模型的特征打分,通過打分獲得相關性后再訓練最終模型;

? ? ?GBDT: http://breezedeus.github.io/2014/11/19/breezedeus-feature-mining-gbdt.html

4.4 特征組合

通過特征組合后再來選擇特征:如對用戶id和用戶特征最組合來獲得較大的特征集再來選擇特征,這種做法在推薦系統和廣告系統中比較常見

5、降維

當特征選擇完成后,可以直接訓練模型了,但是可能由于特征矩陣過大,導致計算量大,訓練時間長的問題,因此降低特征矩陣維度也是必不可少的。常見的降維方法除了以上提到的基于L1懲罰項的模型以外,另外還有主成分分析法(PCA)和線性判別分析(LDA),線性判別分析本身也是一個分類模型。PCA和LDA有很多的相似點,其本質是要將原始的樣本映射到維度更低的樣本空間中,但是PCA和LDA的映射目標不一樣:PCA是為了讓映射后的樣本具有最大的發散性;而LDA是為了讓映射后的樣本有最好的分類性能。所以說PCA是一種無監督的降維方法,而LDA是一種有監督的降維方法。

5.1 主成分分析法(PCA)

  使用decomposition庫的PCA類選擇特征的代碼如下:

1from sklearn.decomposition import PCA
2
3#主成分分析法,返回降維后的數據
4#參數n_components為主成分數目
5 PCA(n_components=2).fit_transform(iris.data)

5.2 線性判別分析法(LDA)

  使用lda庫的LDA類選擇特征的代碼如下:

1from sklearn.lda import LDA
2
3#線性判別分析法,返回降維后的數據
4#參數n_components為降維后的維數
5 LDA(n_components=2).fit_transform(iris.data, iris.target)

參考文獻:

(1)維基百科



?

?

轉載于:https://www.cnblogs.com/weibao/p/6252280.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456525.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456525.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456525.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux下快速安裝MySQL教程

轉自:https://blog.csdn.net/sl1992/article/details/53634674 目錄:前言:1.執行yum install mysql-server進行安裝2.輸入y進行確認3.安裝成功4.查看MySQL是否啟動5.啟動MySQL6.查看是否運行7.設置開機啟動MySQL8.創建MySQL管理員root9.登錄M…

SpringMVC實戰(注解)

1.前言 前面幾篇介紹了SpringMVC中的控制器以及視圖之間的映射方式,這篇來解說一下SpringMVC中的注解,通過注解能夠非常方便的訪問到控制器中的某個方法. 2.配置文件配置 2.1 注解驅動,配置掃描器 首先須要在SpringMVC中的核心文件里指定注解驅動,詳細例如以下: <?xml vers…

UIView類繪圖出現錯誤提示

一:問題: Jan 16 15:49:53 CUBOT Band Ⅲ[2082] <Error>: CGContextSetLineWidth: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. Jan 16 15:49:53 CUBOT Band Ⅲ[2082] <Error>: CGCo…

Hbase2.0版本安裝教程

目錄&#xff1a;前言&#xff1a;1. 上傳2. 解壓3. 重命名4. 修改環境變量5. 修改配置文件6. 把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下7. 發送到其他機器8. 啟動9. 查看總結&#xff1a; 目錄&#xff1a; 前言&#xff1a; 最近由于工作需要又把HBase重裝…

MySQL8.0版本和5.7通過Navicat遠程連接

首先在數據庫創建好連接的用戶 進入mysql服務器終端&#xff1a; 命令窗口終端&#xff1a; mysql -u用戶名 -p密碼 sudo mysql -uroot -p 創建用戶部分-- 使用mysql 數據庫 USE mysql&#xff1b; -- 為mysql創建用戶&#xff1a;root1 密碼為&#xff1a;root1 …

HUE配置文件hue.ini 的zookeeper模塊詳解(圖文詳解)(分HA集群)

不多說&#xff0c;直接上干貨&#xff01; 我的集群機器情況是 bigdatamaster&#xff08;192.168.80.10&#xff09;、bigdataslave1&#xff08;192.168.80.11&#xff09;和bigdataslave2&#xff08;192.168.80.12&#xff09; 然后&#xff0c;安裝目錄是在/home/hadoop/…

CF #366(div.2) C 模擬,思維

CF #366(div.2) C. Thor 題意&#xff1a;一個手機n個聯系人&#xff0c;有q個操作。每次給出ty和ai&#xff0c;如ty1&#xff0c;表示收到ai的一條信息&#xff1b;如ty2&#xff0c;表示將ai發的信息都看掉&#xff1b;如ty3&#xff0c;表示將第1條到第ai條信息都看掉…

MySQL基本指令匯總

創建數據庫&#xff1a; create database 數據庫名字; 刪除數據庫: drop database 數據庫名字; 查看數據庫: show databases; 切換數據庫: use databasename; select database(); Create table 表名&#xff08;列名 數據類型 [約束]&#xff0c;列名 數據類型 [約束]&a…

linux命令行在任意目錄下啟動任意的腳本的方法

目錄&#xff1a;前言&#xff1a;1、直接在命令行中設置PATH2、在profile中設置PATH3、在當前用戶的profile中設置PATH 目錄&#xff1a; 前言&#xff1a; 這應該算是一個常識吧&#xff0c;但是對于許多像我們這樣的新手來說&#xff0c;一旦你出點小差錯&#xff0c;整個…

阿里云centos 安裝和配置 DokuWiki

DokuWiki 是一個開源的 wiki 項目&#xff0c; 可方便進行知識和內容的管理和分享&#xff0c;不用安裝數據庫&#xff0c;內置權限管理&#xff0c;書寫直觀方便&#xff0c;有大量的插件支持。特別適用于企業內部的內容和知識管理&#xff0c;只允許內部員工編輯和查閱的場景…

python-爬蟲

網絡爬蟲&#xff08;又被稱為網頁蜘蛛&#xff0c;網絡機器人&#xff0c;在FOAF社區中間&#xff0c;更經常的稱為網頁追逐者&#xff09;&#xff0c;是一種按照一定的規則&#xff0c;自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬…

MySQL5.7升級到8.0 之后,配合ubantu18.04遇到的常規問題以及非常規問題的解決方案

從MySQL5.7升級到8.0后首先會發現在創建用戶和授權大大不同&#xff1b;其次還有更多常規問題以及非常規問題的解決方案 寫本篇博客記錄踩過的坑 MySQL8.0配合ubantu18.04 一、創建用戶和授權 在mysql8.0創建用戶和授權和之前不太一樣了&#xff0c;其實嚴格上來講&#xf…

機器學習之數理統計與參數估計的相關知識總結

文章目錄目錄&#xff1a;1、知道期望/方差/偏度/峰度&#xff0c;獨立和不相關等概念是什么。2、契比雪夫不等式3、大數定理/中心極限定理4、伯努利定理5、矩估計6、最大似然估計7、協方差和相關系數目錄&#xff1a; 1、知道期望/方差/偏度/峰度&#xff0c;獨立和不相關等概…

Angular屬性型指令

2019獨角獸企業重金招聘Python工程師標準>>> 屬性型指令 — 改變元素、組件或其它指令的外觀和行為的指令 屬性性指令的創建步驟如下&#xff1a; import語句需要從 Angular 的core庫導入的一些符號。 Directive提供Directive裝飾器功能。 ElementRef注入到指令構造…

beeline連接hiveserver2報錯:User: root is not allowed to impersonate root

最近在生產中搭建HA機制的集群&#xff0c;碰到不少坑&#xff0c;會在接下來的時間里好好總結下&#xff0c;先說下遇到的一個大坑。我們的需求是&#xff1a;希望通過hive的thrift服務來實現跨語言訪問Hive數據倉庫。但是第一步&#xff0c;你得需要在節點中打通服務器端&…

局域網 兩臺電腦共享 密碼關閉

轉載于:https://www.cnblogs.com/WhiteHorseIsNotHorse/p/6832463.html

MySQL查詢select語句詳解

1.查詢記錄 select*from 表名 [where 條件];eg:select*from students;//查詢 students 表中所有記錄&#xff0c;所有字段的值都顯示出來select field1,field2,...fieldn... from 表名 [where 條件];eg:select id,name,age from students;//查詢 students 表中所有記錄, 只顯示…

SVN使用規范

轉載于:https://www.cnblogs.com/shenxiaolin/p/6296880.html

配置hiveserver2訪問hive

目錄&#xff1a;1、前言2、beeline相關的Server.Thrift配置3、啟動beeline并訪問Hive4、期間遇到的問題和解決方法 目錄&#xff1a; 1、前言 作為數據倉庫的工具&#xff0c;hive提供了兩種ETL運行方式&#xff0c;分別是通過Hive 命令行和beeline客戶端&#xff1b; 命令…

通過rhel7的kvm虛擬機實現3節點Postgres-XL(包括gtm standby)

關于postgres-xl的實驗是在我自己筆記本rhel7.2_x64的環境下&#xff0c;用kvm實現的&#xff0c;總共有6臺虛擬機&#xff1a; 一臺openfiler2.99發布共享存儲&#xff0c;一臺gtm master&#xff0c;一臺gtm slave&#xff0c;三臺gtm_proxy/coordinator/datanode&#xf…