按某列获取几行_机器学习获取数据难?别忘记特征工程
現(xiàn)實世界中的數(shù)據(jù)可能十分混亂復(fù)雜,不論它是相關(guān)的SQL數(shù)據(jù)庫、Excel文件或是其它任何數(shù)據(jù)源。盡管這些數(shù)據(jù)通常都是表格的結(jié)構(gòu),即每一行(樣本)相對于每一列(特征)都有其對應(yīng)的值,但是這些數(shù)據(jù)可能很難理解和處理。為了讓機器學(xué)習(xí)模型能夠更輕松地讀取數(shù)據(jù),我們可以運用特征工程來提升模型的性能。
什么是特征工程?
特征工程是指將給定的數(shù)據(jù)轉(zhuǎn)換成為更易解析的形式的過程。本文中,我們希望能使機器學(xué)習(xí)模型更加透明,同時也能夠生成一些特征,讓沒有相關(guān)背景知識的人能夠更好的理解提供給他們的可視化數(shù)據(jù)內(nèi)容。然而,機器學(xué)習(xí)模型中透明的概念是很復(fù)雜的,因為針對不同種類的數(shù)據(jù),不同的模型需要使用不同的方法。
示例:坐標(biāo)為了理解特征工程的概念,我們可以舉一個簡單的例子。在下面的圖中,我們能夠看見兩種點。想象一下,現(xiàn)在有一座靠近這些點的倉庫,它只能為一些距離有限的客戶提供服務(wù)。從人類的角度來看,很容易就能理解我們需要考慮距離倉庫有限半徑內(nèi)的點。這就需要兩種已知特征的組合。
但是這對算法來說并不是顯而易見的。例如,基于決策樹(decision tree)的算法一次只會考慮一個特征,并將數(shù)據(jù)集分為兩個部分,其中一個的特征值高于任意閾值,另一個低于閾值。如上所述劃分空間需要大量地進行這種拆分。
坐標(biāo)轉(zhuǎn)換但是,我們可以進行一個高中學(xué)過的簡單坐標(biāo)轉(zhuǎn)化。也就是從所謂的笛卡爾坐標(biāo)系(x,y)轉(zhuǎn)換為極坐標(biāo)系(r,0)。這里我們使用如下轉(zhuǎn)換:
現(xiàn)在,任何算法都更容易對數(shù)據(jù)進行分析。將數(shù)據(jù)集按照r軸進行拆分,閾值設(shè)為r split=2。顯然這個例子并沒有什么價值,現(xiàn)實中的數(shù)據(jù)很少會如此簡單,但是它展示了適當(dāng)?shù)奶卣鞴こ痰臐摿Α?/p>
連續(xù)數(shù)據(jù)
連續(xù)數(shù)據(jù)是最常見的數(shù)據(jù)類型。它有可能包含給定范圍中的任意值。比如,它可以是產(chǎn)品的價格、工業(yè)生產(chǎn)過程中的溫度,或是地圖中對象的坐標(biāo)。這里主要通過領(lǐng)域數(shù)據(jù)來生成特征。例如,你可以用售價減去進價得到利潤,或者可以計算地圖上兩地之間的距離。新的可生成特征只受可用特征和已知的數(shù)學(xué)運算的限制。
分類特征
第二種最常見的數(shù)據(jù)類型是分類特征,指能從一組有限的值中獲取值的特征。通常該特征只能有一個單一的值。還有另一種情況,但是在這種情況下,這種特征常常被拆分為一組特征。例如依據(jù)ISO/IEC 5218標(biāo)準,性別可被分為下列四種值之一:未知、男性、女性和不適用。
編碼和獨熱(one-hots)這種數(shù)據(jù)的問題在于算法并不是設(shè)計用來處理文本數(shù)據(jù)的。處理這個問題的標(biāo)準變通方法是分類編碼。引入一個整數(shù)來代表每一個類別。例如,之前提到的性別的標(biāo)準分類編碼分別為0、1、2和9。但是有時候為了可視化或模型效率,可以使用不同的編碼。我們可以用數(shù)個布爾特征來代替含有多個層級的單一特征,這些布爾特征中只有一個能夠取True值。這叫做獨熱編碼(one-hot encoding),尤其流行于神經(jīng)網(wǎng)絡(luò)。
缺失值
在現(xiàn)實世界中,有時候無法獲取一些數(shù)據(jù),或者該數(shù)據(jù)在處理過程中發(fā)生了丟失。因此,數(shù)據(jù)中經(jīng)常會含有缺失值。
處理這些值是單獨的一門藝術(shù)。這部分數(shù)據(jù)處理被稱為數(shù)據(jù)清洗,且通常被認為是一個單獨的步驟。然而在創(chuàng)建一些新的特征時,需要牢記缺失值有可能隱藏在不同的名字和值背后。
一些編程語言和庫中含有特殊的對象與缺失值對應(yīng)。通常它由“NaN”表示-并不是數(shù)字,而是用任意的可用值代替。例如,在一列正整數(shù)中,缺失值可以被編碼為“-1”。但是如果不預(yù)先對它的值進行分析,在計算該特征的平均值時就會遭遇不便。其它時候,缺失值可以用“0”代替,這樣就能夠輕松地進行求和,但是卻無法生成一個需要除操作的新特征。
另一種更常見的選擇是用當(dāng)前值的平均值或中位數(shù)來填補缺失值。但是同樣,再次計算平均值時會得到不同的結(jié)果,所以根據(jù)真實平均值和錯誤平均值生成的新特征之間會有明顯差異。這些例子都顯示出一個不變的事實,理解你的數(shù)據(jù)!這在進行特征工程時也很重要。
這里有缺失!
一個常見的方法是引入一個布朗特征,指示出給定樣本中的給定特征是否含有缺失值。若有缺失則布朗特征會顯示為True,若一切正常則顯示False。它讓機器學(xué)習(xí)模型能夠判斷是否應(yīng)當(dāng)將給定值視為可信的,或是否應(yīng)當(dāng)另行處理。
歸一化
另一個常見的特征工程方法是將數(shù)據(jù)置入一個給定的區(qū)間。為什么要這么做呢?第一個原因很簡單,即對有限范圍內(nèi)的數(shù)字進行運算會避免一些數(shù)值誤差,同時限制所需的計算性能。第二個原因是一些機器學(xué)習(xí)算法能夠更好的處理歸一化的數(shù)據(jù)。數(shù)據(jù)歸一化的方法有多種。
標(biāo)準歸一化在自然和人類社會中,許多事物都服從于正太(高斯)分布。這就是為什么會向分布中引入歸一特征。它由如下等式表示:
這里X表示新的特征,它等于舊特征的每個樣本減去舊特征的平均值后再除以標(biāo)準偏差。標(biāo)準偏差表示特征值的離散程度。這樣,X的取值范圍會在[-1,1]的區(qū)間內(nèi)。
特征縮放另一種歸一化是用特征值減去最小值Xmin,再除以它的取值范圍Xmax – Xmin,得到入下表達式:
這種歸一化會將給定的特征歸入[0,1]的區(qū)間內(nèi)。
正確的模型歸一化正如之前提到的,不同的模型需要不同的歸一化來實現(xiàn)高效運行。舉個例子,在k-近鄰的案例中,特定的特征范圍表示權(quán)重。值越大特征就越重要。在神經(jīng)網(wǎng)絡(luò)的案例中,歸一化對于最終運行結(jié)果本身來說并不重要,但是它能夠加快訓(xùn)練速度。另一方面,基于決策樹的算法并不會從歸一化中獲益,也不會受到歸一化的不良影響。
問題的正確歸一化有時正確的歸一化并不源自一般的數(shù)據(jù)或計算考量,而是來自領(lǐng)域知識。例如,在根據(jù)溫度對一些物理系統(tǒng)進行建模時,引入開氏溫標(biāo)無疑是大有裨益的,它能夠使數(shù)據(jù)間的關(guān)系簡單化。在數(shù)據(jù)科學(xué)中,領(lǐng)域知識總是十分有用的。
日期與時間
下一種常見的數(shù)據(jù)類型集合是所有不同格式的日期和時間。
這里的問題在于日期時間的格式多種多樣。例如,數(shù)據(jù)可能是帶格式的字符串,或是存在于給定的語言或庫中的標(biāo)準化日期類別。在世界上不同的組織和地區(qū)之間,其標(biāo)準與格式可能存在差異。
舉個例子,每個歐洲人在處理美國格式的日期時都會炸毛,即10.27.2018。如果DD/MM/YYYY和MM/DD/YYYY格式的日期被作為簡單字符串導(dǎo)入同一個數(shù)據(jù)集,可能很容易導(dǎo)致一些誤會或是模型運行不佳。該問題在于數(shù)據(jù)并不是簡單的數(shù)值數(shù)據(jù)。它并不能直接導(dǎo)入機器學(xué)習(xí)模型。最簡單的方法是將該數(shù)據(jù)拆分為3個整數(shù)特征,分別代表日、月和年。但這并不是全部。我們還可以構(gòu)建一些文化相關(guān)的特征。例如,這一天是不是周末或是節(jié)假日。其它選項還有特定大事件開始的時間或日期,或者連續(xù)活動之間的間隔。此外,時間也一樣。它可以用時、分、秒來表示。但是也可以只按秒計時,或是從一個特定的大事件開始計算。例如,實際上大多數(shù)軟件都以標(biāo)準時間1970年1月1日00:00:00作為時間的開始,這也可以很好地應(yīng)用于特征工程中。
示例:修補時間我們可以拿一個日期起到重要作用的數(shù)據(jù)集舉例。這是一個來自the Blue Book for Bulldozers competition的數(shù)據(jù)集。
在這里,我們借助Python中的Pandas庫載入這個數(shù)據(jù)集。為了便于說明,我們只取三個特征。SalesID表示交易編號,需要預(yù)測的是SalePrice。另外,在該數(shù)據(jù)集中能夠找到售出機器的更多信息和售出日期。我們可以稍稍利用日期。
通過幾行簡單的代碼,日期列轉(zhuǎn)換成了6個可被模型讀取的特征,可以利用它們來提取更多銷售信息。
文本
在計算機中,文本是以數(shù)字表示的ASCII代碼進行編碼的。這聽起來可能是個很好處理的東西,但是大錯特錯!從文本中提取信息需要借助語言結(jié)構(gòu),也就是單詞中字母之間的關(guān)系和句子中的單詞本身。這跨越了一整個交叉學(xué)科領(lǐng)域的分支,叫做自然語言處理(NLP)。許多開發(fā)都是為了更輕松地提取這些信息。因為這至少需要另一篇文章或一整本書來闡釋,所以在這里不再贅述。
從文本中分類除了處理整個文本,還可以將其拆分成為單個單詞,并嘗試查找出現(xiàn)率最高的那一個。舉個例子,我們可能有權(quán)進入一些人力資源部門的數(shù)據(jù)庫。其中一個字段可能是學(xué)術(shù)頭銜。在這之中可能查找出許多類似于工科學(xué)士、理學(xué)碩士、哲學(xué)博士的字段。但是字段的數(shù)量會很龐大。可以從中提取的是例如學(xué)士、碩士、博士之類的詞語,省略特定的領(lǐng)域。這里包含了一個含有4級(包括不含頭銜的)教育水平的分類特征。一個相似的例子是帶稱謂的全名。在這個字段中會出現(xiàn)像Mr. Alan Turing、Mrs. Ada Lovelace、Miss Sk?odowska之類的詞組。我們可以提取Mr.、Mrs.、Miss.等表示性別和婚姻狀況的稱謂。如你所見,利用文本數(shù)據(jù)的方法很多,并且無需使用NLP昂貴的全部計算性能。
圖表
如果不重新撰寫一整本???#xff0c;可視化數(shù)據(jù)是第二種至少需要一篇單獨的文章進行討論的數(shù)據(jù)。分析這種數(shù)據(jù)的問題困擾了科學(xué)家們數(shù)十年之久。一整個計算機視覺領(lǐng)域應(yīng)運而生。但值得一提的是,由于數(shù)年前深度學(xué)習(xí)革命,一種簡單的圖像分析方法隨之出現(xiàn)。卷積神經(jīng)網(wǎng)絡(luò)(CNNs)可以通過使用其中一個通用的框架和顯卡強勁的計算性能,為沒有太多的計算機視覺(CV)或是特定科目領(lǐng)域知識的用戶提供一個合理的解決方案。
如你所見,在創(chuàng)建新的特征方面存在許多可能性。其真實的目的是設(shè)計能夠促進數(shù)據(jù)科學(xué)過程的特征。但是除了之前提及的方法,還有更多。例如,通過混合連續(xù)特征和分類特征來生成新的特征。NLP和CV賦予了我們更多的特征,但這并不是全部。全部掌握它們的唯一方法就是不斷地練習(xí)與實驗。因其巨大的多元性,特征工程常常被稱為一門藝術(shù)。
總結(jié)
以上是生活随笔為你收集整理的按某列获取几行_机器学习获取数据难?别忘记特征工程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python队列在进程传递_Python
- 下一篇: php 以-截取剩余的字符串_10分钟从