特征選擇和特征生成問題初探


1. 為什么要進行特征選擇?

0x1:好的模型 = 好的數據 + 好的特征 + 好的算法

以文字圖像識別為例,運行機器學習算法的結果可以被表示為一個函數 y(x),它以一個新的數字的圖像 x 為輸入, 產生向量y,與目標向量的形式相同。

函數 y(x) 的精確形式在訓練(training)階段被確定,這 個階段也被稱為學習(learning)階段,以訓練數據為基礎。一旦模型被訓練出來,它就能確定新的數字的圖像集合中圖像的標簽。這些新的數字的圖像集合組成了測試集(test set)。

正確分類與訓練集不同的新樣本的能力叫做泛化(generalization)。在實際應用中,輸入向量的變化性是相當大的,以至於訓練數據只所有可能的輸入向量中相當小得一部分,所以泛化是模式識別的一個中心問題。

需要特別注意的是,“泛化(generalization)”這個詞在中文中可能會引起一些誤會,很多人可能會將其理解為可以自動發現“未知的未知(unknown unknown)”,實際上不然。這里所謂的泛化,主要取決於2點:

  • 具體的問題場景。
  • 提供的訓練數據集。

還是以MNIST文字圖像識別為例,問題場景就是通過輸入一個【x,y】的像素矩陣到模型,然后輸出一個【z】的離散數字向量結果,提供的數據集是一個帶標注的相同大小的文字圖片。

在這個背景前提下,泛化能力具體指:

通過提供有限數量的,包含各種數字類別的標注圖像,模型具備對該類別數字所對應圖像的識別能力,即使在一定程度的變形情況下,仍然能成功識別出對應數字圖像的正確類別標注

泛化的本質是信息論本身所決定的,它本身是一種信息理論的擴展,不可能超出信息論的范疇,要求模型還具備我們所謂的泛化能力

例如,我們不能准備一個【1-10】的數字圖像進行訓練,然后要求模型能准確識別出【11】這個完全未知的新數字。

回到泛化這個話題上來,如果要提供模型對數據的信息抽取能力,特征工程就是一個十分重要的環節!

對於大部分實際應用,原始輸入向量通常被預處理(pre-processed),變換到新的變量空間。人們期望在新的變量空間中模式識別問題可以更容易地被解決。

例如,在數字識別的問題中,數字的圖像通常被轉化縮放,使得每個數字能夠被包含到一個固定大小的盒子中。這極大地減少了每個數字類別的變化性,因為現在所有數字的位置和大小現在相同,這使得后續的區分不同類別的模式識別算法變得更加容易。這個預處理階段有時被叫做特征抽取(feature extraction)。

0x2:為了更有效利用先驗知識

我們知道,一個算法學習可以成功預測,一個很重要的關鍵是目標問題隱含了特定模式的先驗假設(先驗知識),而算法要做的唯一的事情,就是捕獲這種先驗假設,即通過我們熟悉的模型參數的形式來固話一個生成式或者一個判別式。

從一個具體的虛擬的例子開始說起,但是這個例子和我們再實際工程項目中遇到的所有問題,本質上是一樣的。

有一個廣告公司,每月會投入一定的廣告費,用於提升其銷售額,同時,財務部門收集了歷史上每個月投入的廣告費和銷售額的結果:

這是一個非常具體的問題,項目的目標是需要開發一個預測器,幫助決策層判斷將來需要投入多少廣告費,並且對預期的銷售額收入有一個預期判斷。

1. 特征數字化編碼 - 如何數值化編碼是第一個影響最終效果的因素

算法是一個數學的運算和求導得極值過程,要求模型輸入的是一個數字化的向量,但是現實生活中的例子不一定都是純數字化的,當然這個例子本身足夠簡單,輸入和要預測的結果本身已經是數字了,那我們可以直接進行數字化編碼,但是在其他領域利於NLP領域,如何進行數字化特征編碼就是一個足夠引起慎重思考的問題了。

在這個銷售預測的例子中,我們將輸入樣本編碼為 1 維向量 X,數值即廣告費的數值。預測的結果編碼為 1 維的向量 Y,即銷售額。

我們用 X 表示廣告費,用 Y 表示銷售額,這種從現實世界的具體物體,到用數值表示的抽象數值化變換,我們稱之為特征函數,簡稱特征。

如果 X 是向量空間的一個子集,每一個有時候稱為特征向量。

如何將現實世界物體編碼為輸入空間 X 的方式,對理解我們如何利用問題相關的先驗知識,是非常重要的。

2. 特征選擇 - 對特征進行篩選 and 扭曲變換

在完成特征數字化編碼之后,我們可能會遇到一些問題

1)特征數量太多

當然,在本文的銷售額預測的例子中沒有這個情況,但是我們假設我們引入的特征還有例如當月季節、當月氣溫、當月流行熱點等上千個維度,因為其實這個現象在實際項目中是很常見的,由於物體本身(例如NLP文本)或者我們出於“多多益善”的目的經常會盡可能地將我們認為對最終預測有幫助的特征維度都抽取出來,作為物體的特征向量。

這本身也沒有太多問題,但是過多的特征會增大算法運算過程中的CPU和內存需求。

而且很可能還會導致模型欠擬合,這是因為在一些場景下,最終決定結果判斷的可能只能其中3-5個核心特征,輸入太多的無關特征,可能導致輸入了一些“假關聯”,這些“假關聯”只是恰好在 這批訓練樣本集中呈現出了某種相關性,但其實其背后並沒有隱含任何真實世界的統計規律。

如果模型在訓練的過程中,“不小心”錯誤地引入了這些“假關聯”特征,那么可以想象,模型的預測泛化能力是會大打折扣的。

2)在當前特征空間中特征向量線性不可分

這也是一個很常見的問題,線性可分看起來像是實驗課上做demo的場景,在大多數的工程項目中,我們的特征向量都是在當前空間線性不可分的。例如下面這張圖:

紅星和黑圈無法通過一個線性函數直接進行二分類區分。這個時候其實有兩個辦法:

  • 選擇用非線性分類器進行訓練:例如adaboost、decision tree、dnn這些,但其實本質上,這些模型在訓練生成模型的過程中,已經隱含了基於線性分類器組合得到非線性分類器的步驟了。
  • 對原始特征進行扭曲變化,將其轉化到另一個高緯度的新特征空間中:例如基於kernel trick的SVM就是這種情況,通過在原空間樣本 X 到希爾伯特空間的特征映射上學習每一個二分類器來實現分類

特征選擇,是另一種應用先驗知識來處理問題的方法。這是我們本文要重點討論的一個主題。

3)直接窮舉所有特征子集組合可行嗎?

在理情況下,我們可以嘗試 d 個特征的所有 k 個特征組合,然后選擇最優預測結果對應的特征子集。然而,這種窮盡搜索方法通常在計算上是不可行的。

在實際工程中使用的算法中,我們常常采用一些啟發式,迭代式的搜索方法來盡可能地獲得一個足夠好的特征子集。

0x3:避免或緩解過擬合問題

多數機器學習算法都被設計為要學習哪些屬性最適用於做決策。

例如,決策樹是在每個結點挑選最有希望成功的屬性進行分裂,從理論上講,決策樹絕不會選擇無關的或者無用的屬性。屬性越多,理論上會導致更強而不是更差的識別能力

但是遺憾的是,”從理論上看,理論和實踐沒有差別,但是在實踐中有差別“。在實踐中,往數據集中添加無關或干擾屬性,會顯著降低機器學習系統的能力。

在C4.5的實驗中,發現了下面這個現象:

往標准數據集中添加一個隨機的二元屬性,屬性值由拋擲無偏硬幣產生,這會直接導致決策樹的性能下降5%~10%。這是為什么呢?

變差的原因是在樹的某些結點處,這個無關的屬性被不可避免地選擇為決定分支的屬性,導致使用測試數據測試時產生隨機誤差。

問題來了,決策樹的設計這么巧妙,能在理論上保證在每個結點挑選最適合的屬性進行分裂,怎么還會發生這種情形呢?原因也很微妙。

隨着程序逐漸向樹的下層運行,能對屬性選擇決策有幫助的數據變得越來越少。然后一定會在某個結點時,數據極少,隨機屬性碰巧看起來很好。那么決策樹沒理論不選擇這個”看起來很好“的隨機噪聲屬性了。

由於每層的結點數量是隨着層數按指數增加的,所以這個隨機屬性在某處看起來較好的概率也隨着樹的深度成倍增加。

真正的問題是樹總是會達到某個深度,那里只存在少量的數據可用於屬性選擇,即使數據集較大,也不能避免這個問題,只是樹可能更深而已。

0x4:避免誤導屬性

所謂誤導屬性,是指對於一組固定的屬性值來說,同時包含了不同預測類的情況。

換句話就是,一個數據集中某一個屬性子集,存在一組完全相同屬性值的實例,除了預測類值不同之外,其他的所有屬性值都相同。可以想象在屬性中存在一個兩類交疊的灰色地帶。

使用標准數據集進行試驗的結果表明,這會造成分類正確率下降1%~5%。

以決策樹為例,問題出在這個誤導屬性在決策樹的上層(或中間的某一層)就被(自然地)選中用於分裂。受此影響,此后的下層結點就被誤導到了一個稀疏數據的屬性空間中,擬合的效果自然會下降。

Relevant Link:

https://www.jianshu.com/p/f485dc676e1c

 

2. 特征選擇的四象限分類

屬性選擇的大多數方法概括來說就是:在屬性空間中搜索最有可能做出最好類預測的屬性子集

按照評估預測性能方式、以及搜索順序這2個維度,可以有兩種不同的分類方法,它們分別分布在四個象限中。

0x1:按照評估預測性能方式分類

按照評估預測性能方式分類,選擇一個好的屬性子集,有兩種完全不同的方法:

  • 根據數據的普遍特性做出一個獨立估計:也被稱為過濾(filtering)方法,因為它是要在學習開始之前,先過濾屬性集,產生一個最好的屬性子集。例如
    • 基於PCA降維的主成分特征提取就是一種屬性過濾方法
    • 相關性統計分析也是一種屬性過濾方法
  • 采用將要用於最終機器學習的算法來評估子集:被被稱為包裝(wrapper)方法,因為學習方法被包裹在選擇過程中。

0x2:按照搜素順序分類

以天氣數據預測為例,

天氣數據集的屬性空間

可以看到,可能的屬性子集數目隨屬性數量的增加而呈指數增長,這使得窮舉搜索不切實際,窮舉搜索只適合最簡單的問題。

基本上,搜索方式可以分為:

  • 正向選擇(forward selection):從上到下,開始時不含任何屬性,然后每次增加一個。
  • 反向刪除(backward elimination):從下到上,開始時包含了所有屬性,然后每次減少一個

一般來說,反向刪除比正向選擇生成的屬性集更大,但是在某些情況下分類准確率更高。原因是正向選擇往往是在搜索的早期就早早提前停止。但是如果重點是要理解所涉及的決策結構,那么正向選擇是很有用的,因為它有效減少了屬性數目而對分類准確率的影響卻很小。

0x3:四象限之外的其他搜索方法

我們學習主要的目的是學習其核心思想,前面2小節討論的四象限方法筆者認為是屬性特征的最核心的需要理解的概念。但是我們同時也需要明白,除此之外,還有一些更為精細復雜的搜索方法,例如:

  • 正向選擇和反向刪除可以結合成雙向搜索,此時,算法開始時可以包含所有屬性也可以不包含任何屬性
  • 最佳優先搜索(best-first search),該方法不是在性能開始下降時停止搜索,而是保存到目前為止已經評估過的所有屬性子集列表,並按照性能好壞排序,因此它可以重訪先前的配置
  • 束搜索(beam search),只在每個階段截取屬性子集列表,因此它只含有固定數目的(束寬)最有希望的候選對象
  • 遺傳算法驅動的屬性選擇,遺傳算法松散地基於自然選擇原理,使用對當前的候選子集的隨機擾動,逐步”進化出“好的屬性子集

 

2. 濾波器特征選擇 - 不依賴具體算法模型的feature selection

濾波器方法可能是最簡單的特征選擇方法,在濾波方法中,我們將某些特征看作獨立於其他特征,然后根據一些質量度量標准來估計這些獨立特征,然后選擇 k 個獲得最高評分的特征(此外也可以依據最好的評分確定特征的數量)。

直觀上,我們總是選擇能區分所有實例的最小的屬性集,即MDL原則。

0x1:線性相關系數(皮爾森相關系數)- 評價單個特征和預測結果標簽的相關性

1. 皮爾森相關系數 - 評價單個特征在一定的評價標准前提下和待預測標簽的相關性

一種最直接的方法是依據預測期的錯誤率來獲得特征的評分。

為了說明這個問題,我們考慮采用平方損失的線性回歸問題。令

表示 m 個訓練樣本第 j 個特征值形成的向量,令表示 m 個樣本的目標值。

僅僅使用第 j 個特征的經驗風險最小化線性預測期的經驗平方損失是:

為了求解這個最小化問題,令表示特征的平均值,令表示目標的平均值。顯然:

等式右邊對 b 求導,令導數等於0,我們得到 b = 0。

同樣,對 a 求導,當 b = 0時,我們得到

將 a,b 的值代入目標函數,我們得到通過選擇右式的特征組合,我們的目的是讓左式的損失函數值最小

依據最小平方損失對特征排序,等同於依據下面評分的絕對值進行排序(高分表示好的特征):

上面的表達式被稱為皮爾森相關系數。分子表示第 j 個特征和目標值方差的經驗估計,而分母表示第 j 個特征方差乘上目標值所得方差經驗估計的均方根。

皮爾森相關系數的取值范圍為【-1,1】,這里如果皮爾森相關系數等於 1 或者 -1,表示 v 和 y 之間有線性相關映射關系,且經驗風險等於0。

2. 單個特征和待預測標簽線性相關性很低,一定意味着這個特征不好嗎?

如果皮爾森相關系數等於0,表示 v 到 y 的最優線性映射為各個維度都等於0,這就是說單獨只用 v 不足以預測 y。

但是這並不一定意味着 v 是一個壞的特征,比如可能出現這種情況,v 和其他特征組合起來能夠很好地預測 y。

考慮一個簡單的例子,目標通過函數來產生。

假定 x1 是由上的均勻分布產生,而,這里 z 也是由上的均勻分布產生。

那么,,我們可以得到

因此,對於足夠大的訓練集,第一個特征的皮爾森相關系數可能等於0,因此它可能不被選擇,然而,如果不知道第一個特征,沒有函數能夠很好地預測目標值。

3. Pearson相關系數計算的Scikit-learn版本

Pearson Correlation速度快、易於計算,經常在拿到數據(經過清洗和特征提取之后的)之后第一時間就執行。Scipy的pearsonr方法能夠同時計算相關系數和p-value。

#!/usr/bin/python

import numpy as np
from scipy.stats import pearsonr

np.random.seed(0)
size = 300
x = np.random.normal(0, 1, size)
print "Lower noise", pearsonr(x, x + np.random.normal(0, 1, size))
print "Higher noise", pearsonr(x, x + np.random.normal(0, 10, size))

這個例子中,我們比較了變量在加入噪音之前和之后的差異。

當噪音比較小的時候,p-value接近1,改變后的變量和改變前的變量相關性很強;

當噪音比較大的時候,p-value降低,改變后的變量和改變前的變量相關性降低

Pearson相關系數的一個明顯缺陷是,作為特征排序機制,他只對線性關系敏感。如果關系是非線性的,即便兩個變量具有一一對應的關系,Pearson相關性也可能會接近0。

#!/usr/bin/python

import numpy as np
from scipy.stats import pearsonr

x = np.random.uniform(-1, 1, 100000)
print pearsonr(x, x**2)[0]

0x2:卡方檢驗 - 變量之間相關性(這里的變量包括特征或標簽值)

卡方檢驗是一種用途很廣的計數資料的假設檢驗方法。它屬於非參數檢驗的范疇,主要是比較兩個及兩個以上樣本率( 構成比)以及兩個分類變量的關聯性分析。

其根本思想就是在於比較理論頻數和實際頻數的吻合程度或擬合優度問題。

0. 卡方檢驗概念

卡方檢驗(chi-square test),也叫作χ2檢驗。卡方檢驗有多種方法,最著名的就是皮爾遜卡方檢驗,也是卡爾·皮爾森提出。我們通常用卡方來檢測兩個變量or樣本的獨立性。

卡方檢驗的理論假設是:一個樣本中已發生事件的次數分配會遵守某個特定的理論分配

通常的講:觀測頻數跟實際頻數應該沒有區別,除非兩個變量不是獨立的。舉個例子:XX公司不同部門職員的性別跟部門兩者是獨立的么?很明顯不是哦。這兒我們的期望男女比例是1.05:1,但是在IT研發部分,比例可能是3:1,在HR、客服等部門,比率可能是1:3了。因此這兒的觀測值就跟實際值不一致,我們就可以說兩個不是獨立的。

1. 通過一個四格卡方檢驗來闡述卡方檢驗

下面的表格將實驗者分成了2組,隨機變量分別為:是否和牛奶、感冒人數。我們現在希望通過卡方檢驗來揭示這兩個變量之間是否具有相關性,即它們之間是否存在依賴推導。

  感冒人數 未感冒人數 合計 感冒率
喝牛奶組 43 96 139 30.94%
不喝牛奶組 28 84 112 25.00%
合計 71 180 251 28.29%

通過簡單的統計我們得出喝牛奶組和不喝牛奶組的感冒率為30.94%和25.00%,兩者的差別可能是抽樣誤差導致,也有可能是牛奶對感冒率真的有影響。

1)建立理論假設統計

為了確定真實原因,我們先假設喝牛奶對感冒發病率是沒有影響的,即喝牛奶喝感冒時獨立無關的。

所以我們可以得出感冒的發病率實際是(43+28)/(43+28+96+84)= 28.29%

這一步實際上里隱含了條件獨立性假設,即將另一個隨機變量視為無任何影響,無任何依賴推導,直接計算邊緣條件概率。

2)根據理論假設統計重新得到新的概率分布 - 有點類似EM的過程

所以,理論的四格表應該如下表所示:

  感冒人數 未感冒人數 合計
喝牛奶組 139*0.2829 = 39.3231 139*(1-0.2829) = 99.6769 139
不喝牛奶組 112*0.2829 = 31.6848 112*(1-0.2829) = 80.3152 112
合計 71 180 251

如果喝牛奶喝感冒真的是獨立無關的,那么四格表里的理論值和實際值差別應該會很小。 

3)計算理論值和實際值之間的差距

卡方檢驗的計算公式為:,其中,A為實際值,T為理論值。

x2用於衡量實際值與理論值的差異程度(也就是卡方檢驗的核心思想),包含了以下兩個信息:

1. 實際值與理論值偏差的絕對大小(由於平方的存在,差異是被放大的)
2. 差異程度與理論值的相對大小

上面牛奶的的例子我們計算得:

卡方 = (43 - 39.3231)平方 / 39.3231 + (28 - 31.6848)平方 / 31.6848 + (96 - 99.6769)平方 / 99.6769 + (84 - 80.3152)平方 / 80.3152 = 1.077

4)卡方分布的臨界值

上一步我們得到了卡方的值 = 1.077,但是這個值意味着什么呢?如何通過卡方的值來判斷喝牛奶和感冒是否真的是獨立無關的?也就是說,怎么知道無關性假設是否可靠?

基本上來說:

卡方值越大,假設成立的概率就越小,即隨機變量間相關性越大;

卡方值越小,假設成立的概率就越大,即隨機變量間相關性越小。

下面是卡方分布的臨界值表。

表格里的值代表着:如果卡方值大於對應的閾值,則至少有對應的概率,我們的假設是成立的。

而具體應該查表格的哪一行,這里需要用到一個自由度的概念,自由度等於:F = (行數 - 1) * (列數 - 1)。對這個例子來說,自由度F = 1 * 1 = 1。

在牛奶的這個例子中,對應的是F = 1,即我們需要查第一行。

我們計算得到的卡方檢驗值為 1.077,介於P(0.1)和P(0.5)這兩欄之間,所以我們可以說:

喝牛奶和感冒之間有至少50%的概率,是獨立不相關的;

但是1.077超過了和P(0.9)和和P(0.95)的閾值,所以,“喝牛奶和感冒之間獨立性假設有95%的概率成立”這句話是錯了(有點繞,理解一下)。

所以,綜上,所以喝牛奶和感冒獨立不相關的假設不成立。

Relevant Link:

https://blog.csdn.net/snowdroptulip/article/details/78770088
https://blog.csdn.net/gdanskamir/article/details/54913233

0x3:互信息估計

以上就是經典的互信息公式了。想把互信息直接用於特征選擇其實不是太方便:

  • 它不屬於度量方式,也沒有辦法歸一化,在不同數據及上的結果無法做比較;
  • 對於連續變量的計算不是很方便(X和Y都是集合,x,y都是離散的取值),通常變量需要先離散化,而互信息的結果對離散化的方式很敏感。

最大信息系數克服了這兩個問題。它首先尋找一種最優的離散化方式,然后把互信息取值轉換成一種度量方式,取值區間在[0,1]。minepy提供了MIC功能。

反過頭來看y=x^2這個例子,MIC算出來的互信息值為1(最大的取值)。

#!/usr/bin/python

import numpy as np
from minepy import MINE

m = MINE()
x = np.random.uniform(-1, 1, 10000)
m.compute_score(x, x**2)
print m.mic()

0x4:接受操作特征(ROC)曲線的面積

總體來說,濾波評分方法的思想是:在一定的評價標准(損失函數)下,評估特征對最終預測標簽結果准確性的貢獻度

Relevant Link:

https://blog.csdn.net/gdanskamir/article/details/54913233
https://www.cnblogs.com/hhh5460/p/5186226.html

 

3. 包裝器特征選擇方法,需要依賴具體算法模型進行屬性子集評價

包裝器特征選擇方法是另一個比較常用的特征選擇方法。和濾波方法不同,包裝器特征選擇方法伴隨着學習算法的過程,迭代地進行。

機器學習算法可用於屬性選擇,本章列舉幾個典型的評估方法。

0x1:基於決策樹的屬性選擇方法

可以在整個數據集上應用決策樹算法,然后選擇那些在決策樹中真正用到的屬性。

這個屬性選擇可能會對其他的學習算法產生影響。例如,最近鄰算法很容易受到無關屬性的影響,它可以通過先創建一棵用於過濾屬性的決策樹而使性能得到提高。

0x2:基於線性模型的屬性選擇方法

一種可行的方法是建立一個線性模型,比如一個線性支持向量機,然后根據系數的大小來進行屬性重要性排序。

0x3:基於有監督學習模型的特征排序 (Model based ranking)

這種方法的思路是直接使用你要用的有監督機器學習算法,針對每個單獨的特征和響應變量(標簽值y)建立預測模型。

假如某個特征和響應變量之間的關系是非線性的,可以用基於樹的方法(決策樹、隨機森林)、或者擴展的線性模型等。基於樹的方法比較易於使用,因為他們對非線性關系的建模比較好,並且不需要太多的調試。但要注意過擬合問題,因此樹的深度最好不要太大,再就是運用交叉驗證。

我們在著名的波士頓房價數據集上使用sklearn的隨機森林回歸給出一個單變量選擇的例子:

#!/usr/bin/python

import numpy as np
from sklearn.cross_validation import cross_val_score, ShuffleSplit
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor

#Load boston housing dataset as an example
boston = load_boston()
X = boston["data"]
Y = boston["target"]
names = boston["feature_names"]

rf = RandomForestRegressor(n_estimators=20, max_depth=4)
scores = []
for i in range(X.shape[1]):
     score = cross_val_score(rf, X[:, i:i+1], Y, scoring="r2",
                              cv=ShuffleSplit(len(X), 3, .3))
     scores.append((round(np.mean(score), 3), names[i]))
res = sorted(scores, reverse=True)
for i in res:
    print i

 

4. 特征操作與歸一化

特征操作或歸一化包括在每一個源特征上的簡單變換。這些變換可能使得我們假設類的近似誤差或估計誤差更低或者能夠得到一個更快的算法。

與特征選擇的問題類似,特征操作與歸一化充滿了“玄學”,它需要我們具體問題具體分析,這里沒有絕對好或絕對壞的變換,而是每一個特征變換與在這些特征矢量上的學習算法,以及這個問題相關的先驗假設密切相關。

0x1:常用的特征變換

接下來,我們用表示在 m 個訓練樣本上的特征 f,同樣,我們用表示所有樣本特征的經驗均值。

1. 中心化

通過變換,這個變換使得特征有 0 均值。

2. 歸一化范圍

這個變換使得每一個特征的范圍都是【0,1】,

當然,很容易將范圍變換為【0,b】或【-b,b】

3. 標准化

這個變換使得所有特征有 0 均值和 1 方差。形式上,令表示特征的經驗方差,那么設置

4. 裁剪變換

這個變換裁剪特征的高值或低值

5. sigmoidal變換

這個變換在特征上用到了sigmoid函數,例如,這里 b 是用戶自定義參數。這個變換可以認為是一種軟版本的裁剪變換。它對接近於 0 的值值有一些作用,並且與遠離 0 的裁剪變換很相似。

6. 對數變換

這個變換是,這里 b 是用戶自定義參數。這個變換廣泛地用於當特征是計數型特征的情況下。例如,假定特征表示在一個文檔中某個詞出現的次數。那么,某個詞出現一次與沒有出現的區別,要比一個詞出現1000次還是1001次更為重要。

簡單來說,對數變換對值較小時的變化更敏感,值越大,敏感度越低。從本質上看,和標准化和歸一化的思想很類似。

Relevant Link:

https://www.cnblogs.com/hhh5460/p/5186226.html 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM