機器學習(十五) 特征選擇-卡方選擇器

卡方選擇器

【版權(quán)聲明】本文為原創(chuàng)肌括,轉(zhuǎn)載請注明原地址 http://www.reibang.com/p/f97419da1a7a
同步更新在個人網(wǎng)站:http://www.wangpengcufe.com/machinelearning/ml-ml15/

一、公式

卡方檢驗的基本公式制圈,也就是χ2的計算公式们童,即觀察值和理論值之間的偏差

卡方檢驗公式

其中:A 為觀察值畔况,E為理論值鲸鹦,k為觀察值的個數(shù),最后一個式子實際上就是具體計算的方法了 n 為總的頻數(shù)跷跪,p為理論頻率馋嗜,那么n*p自然就是理論頻數(shù)(理論值)

二、相關(guān)概念

卡方分布:可以看出當觀察值和理論值十分接近的時候吵瞻,也就是我們做的假設(shè)是正確的時候葛菇,χ2的值就越趨近于0,也就是說我們計算的偏差越小橡羞,那么假設(shè)值就越可能是對的眯停,反之偏差值越大,假設(shè)值就越不準確卿泽。那么到底多大才算不準確莺债,有沒有個衡量的數(shù)值標準呢?答案是有:卡方分布。

卡方檢驗是以χ2分布為基礎(chǔ)的一種常用假設(shè)檢驗方法齐邦。若k 個隨機變量Z1椎侠、……、Zk 相互獨立措拇,且數(shù)學期望為0杆勇、方差為 1(即服從標準正態(tài)分布)帖汞,則隨機變量X被稱為服從自由度為 k 的卡方分布,記作

卡方分布

,卡方分布的公式為:

卡方分布

自由度:自由度指的是計算某一統(tǒng)計量時杏死,取值不受限制的變量個數(shù)。通常df=n-k嵌莉。其中n為樣本數(shù)量苛茂,k為被限制的條件數(shù)或變量個數(shù)。自由度v=(行數(shù)-1)(列數(shù)-1)族操。

自由度與卡方分布的關(guān)系

如圖

自由度與卡方分布的關(guān)系圖

圖中的Freedom 這里有5條線苛坚,分別對應(yīng)Freedom=1, 4, 10, 20 , 100 。這個Freedom 就是自由度色难,即個式子中獨立變量的個數(shù)泼舱。 x 橫坐標是卡方檢驗公式計算出來的偏差χ2,而 y 縱坐標表示假設(shè)的正確的概率枷莉。當自由度為1時娇昙,卡方分布式一個傾斜的曲線,當自由度逐漸增大是笤妙,卡方分布逐步變的平緩冒掌。在一定范圍內(nèi),隨著自由度越來越大蹲盘,卡方分布會越來越接近正態(tài)分布股毫。

三、利用卡方檢驗用來特征選擇

特征選擇(Feature Selection):指的是在特征向量中選擇出那些“優(yōu)秀”的特征召衔,組成新的铃诬、更“精簡”的特征向量的過程。它在高維數(shù)據(jù)分析中十分常用苍凛,可以剔除掉“冗余”和“無關(guān)”的特征趣席,提升學習器的性能。

特征選擇方法和分類方法一樣醇蝴,也主要分為有監(jiān)督(Supervised)和無監(jiān)督(Unsupervised)兩種宣肚,卡方選擇則是統(tǒng)計學上常用的一種有監(jiān)督特征選擇方法,它通過對特征和真實標簽之間進行卡方檢驗悠栓,來判斷該特征和真實標簽的關(guān)聯(lián)程度霉涨,進而確定是否對其進行選擇弧呐。

對于建立模型而言并非特征越多越好,因為建模的目標是使用盡量簡單的模型去實現(xiàn)盡量好的效果嵌纲。減少一些價值小貢獻小的特征有利于在表現(xiàn)效果不變或降低度很小的前提下俘枫,新找到最簡單的模型。

那么什么樣的特征是價值小的呢逮走?想想我們之所以用機器學習的模型去學習特征鸠蚪,是為了更好地預測被特征影響著的應(yīng)變量(標簽)。那么那些根本不會對應(yīng)變量產(chǎn)生影響师溅,或者影響很小的特征理應(yīng)事先去掉茅信。

那么怎么判斷特征對應(yīng)變量的影響程度的大小呢?我們可以使用卡方檢驗對特征與應(yīng)變量進行獨立性檢驗墓臭,如果獨立性高蘸鲸,那么表示兩者沒太大關(guān)系,特征可以舍棄窿锉;如果獨立性小酌摇,兩者相關(guān)性高,則說明該特征會對應(yīng)變量產(chǎn)生比較大的影響嗡载,應(yīng)當選擇窑多。

卡方檢驗在實際應(yīng)用到特征選擇中的時候,不需要知道自由度洼滚,也不用知道卡方分布埂息,只需要根據(jù)算出來的χ2 進行排序即可,值越大越好遥巴。挑選最大的一堆千康,就完成了利用卡方檢驗來進行特征提取。

四铲掐、代碼實現(xiàn)

和ML庫中的大多數(shù)學習方法一樣拾弃,ML中的卡方選擇也是以estimator+transformer的形式出現(xiàn)的,其主要由ChiSqSelector和ChiSqSelectorModel兩個類來實現(xiàn)迹炼。

1砸彬、首先引入相關(guān)需要用的包

import java.util.Arrays;
import java.util.List;
import org.apache.spark.ml.feature.ChiSqSelector;
import org.apache.spark.ml.feature.ChiSqSelectorModel;
import org.apache.spark.ml.linalg.VectorUDT;
import org.apache.spark.ml.linalg.Vectors;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.Metadata;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;

2、接下來獲取spark

SparkSession spark =  SparkSession.builder().appName("ChiSqSelectorTest").master("local").getOrCreate();

3斯入、然后,我們構(gòu)造一個數(shù)據(jù)集DataFrame:

List<Row> rawData = Arrays.asList(RowFactory.create(1, Vectors.dense(0.0, 0.0, 18.0, 1.0), 1),
                                  RowFactory.create(2, Vectors.dense(0.0, 1.0, 12.0, 0.0), 0),
                                  RowFactory.create(3, Vectors.dense(1.0, 0.0, 15.0, 0.1), 0));
StructType schema = new StructType(new StructField[] {
        new StructField("id",DataTypes.IntegerType,false,Metadata.empty()),    
        new StructField("features",new VectorUDT(),false,Metadata.empty()),
        new StructField("label",DataTypes.IntegerType,false,Metadata.empty())
});

Dataset<Row> df = spark.createDataFrame(rawData,schema);
df.show(false);

打印結(jié)果:

+---+------------------+-----+
|id |features          |label|
+---+------------------+-----+
|1  |[0.0,0.0,18.0,1.0]|1    |
|2  |[0.0,1.0,12.0,0.0]|0    |
|3  |[1.0,0.0,15.0,0.1]|0    |
+---+------------------+-----+

4蛀蜜、接著我們開始用卡方選擇進行特征選擇器的訓練

ChiSqSelector select = new ChiSqSelector().setNumTopFeatures(1)
                                          .setFeaturesCol("features")
                                          .setLabelCol("label")
                                          .setOutputCol("selected-feature");
ChiSqSelectorModel selectModel = select.fit(df);
Dataset<Row> result = selectModel.transform(df);
result.show(false);

numTopFeatures:用來設(shè)置固定的提取特征的數(shù)量刻两,程序會根據(jù)卡方值的高低返回前n個卡方值最高的特征。(預測能力最強的前n個特征)滴某,默認選擇前50個特征磅摹。這里滋迈,我們設(shè)置ChiSqSelector(卡方選擇器)的numTopFeatures = 1,即在4個特征中選擇處最好的1個特征户誓。

打印結(jié)果:

+---+------------------+-----+----------------+
|id |features          |label|selected-feature|
+---+------------------+-----+----------------+
|1  |[0.0,0.0,18.0,1.0]|1    |[18.0]          |
|2  |[0.0,1.0,12.0,0.0]|0    |[12.0]          |
|3  |[1.0,0.0,15.0,0.1]|0    |[15.0]          |
+---+------------------+-----+----------------+

用訓練出的模型對原數(shù)據(jù)集進行處理饼灿,可以看見,第三列特征被選出作為最有用的特征列帝美。

參考資料: http://spark.apache.org/docs/latest/ml-features.html#chisqselector

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碍彭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子悼潭,更是在濱河造成了極大的恐慌庇忌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舰褪,死亡現(xiàn)場離奇詭異皆疹,居然都是意外死亡,警方通過查閱死者的電腦和手機占拍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門略就,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晃酒,你說我怎么就攤上這事残制。” “怎么了掖疮?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵初茶,是天一觀的道長。 經(jīng)常有香客問我浊闪,道長恼布,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任搁宾,我火速辦了婚禮折汞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盖腿。我一直安慰自己爽待,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布翩腐。 她就那樣靜靜地躺著鸟款,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茂卦。 梳的紋絲不亂的頭發(fā)上何什,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音等龙,去河邊找鬼处渣。 笑死伶贰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的罐栈。 我是一名探鬼主播黍衙,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荠诬!你這毒婦竟也來了琅翻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤浅妆,失蹤者是張志新(化名)和其女友劉穎望迎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凌外,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡辩尊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了康辑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摄欲。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疮薇,靈堂內(nèi)的尸體忽然破棺而出胸墙,到底是詐尸還是另有隱情,我是刑警寧澤按咒,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布迟隅,位于F島的核電站,受9級特大地震影響励七,放射性物質(zhì)發(fā)生泄漏智袭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一掠抬、第九天 我趴在偏房一處隱蔽的房頂上張望吼野。 院中可真熱鬧,春花似錦两波、人聲如沸瞳步。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽单起。三九已至,卻和暖如春氛堕,著一層夾襖步出監(jiān)牢的瞬間馏臭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工讼稚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留括儒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓锐想,卻偏偏與公主長得像帮寻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赠摇,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355