數(shù)據(jù)和特征工程決定了模型的上限,改進(jìn)算法只不過是逼近這個(gè)上限棉胀。
數(shù)據(jù)矩陣:
標(biāo)簽:
探索性數(shù)據(jù)分析
博客上寫了三個(gè) plot 唁奢,我想大概是用畫圖來看看數(shù)據(jù)的分布情況麻掸。預(yù)處理
需要將訓(xùn)練集變成矩陣脊奋,大小為[n_samples,n_features]和矢量诚隙,長(zhǎng)度:[n_samples]最楷。矢量可以表示成矩陣籽孙,大小為[n_samples,n_classes]犯建。
常用函數(shù):
- sklearn.preprocessing.LabelBinarizer
preprocessing.LabelBinarizer(neg_label=0,pos_label=1,sparse_output=False)
輸入?yún)?shù):
neg_label = 0:讓負(fù)標(biāo)簽為0;
pos_label = 1:讓正標(biāo)簽為1;
sparse_output = False:如果希望從transform返回的是CSR格式适瓦,就寫成True玻熙。
輸出參數(shù):
classes_:有多少個(gè)類嗦随,類分別是什么枚尼;
y_type_:計(jì)算的目標(biāo)的數(shù)據(jù)類型署恍,有'continuos(連續(xù))',‘continuous-multioutput(連續(xù)多輸出)’盯质,'multiclass(多目標(biāo))'唤殴,'binary’朵逝,'multiclass'配名, 'multiclass-multioutput', 'multilabel-indicator(多標(biāo)簽指示符)渠脉?鳞青?臂拓?胶惰?'
lb = preprocessing.LabelBinarizer()
lb.fit([1,2,6,4,2])
print(lb.classes_)
print(lb.transform([1,2,6,4,3,5]))
print(lb.y_type_)
結(jié)果:
array([1, 2, 4, 6])
array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
感覺類似于one-hot編碼
-sklearn.preprocessing.MultiLabelBinarizer(多標(biāo)簽二值化)
sklearn.preprocessing.MultiLabelBinarizer(classes=None, sparse_output=False)
輸入?yún)?shù):
classes:設(shè)置classes時(shí)候孵滞,label從classes里面出坊饶,如果沒有設(shè)置幼东,則從訓(xùn)練集里面統(tǒng)計(jì)
sparse_out:同上
返回參數(shù):
classes_:同上
mlb = preprocessing.MultiLabelBinarizer()
print(mlb.fit_transform([(1,2),(3,4),(5,)]))
print(mlb.classes_)
mlb1 = preprocessing.MultiLabelBinarizer(classes=[2,3,4,5,6,1])
print(mlb1.fit_transform([(1,2),(3,4),(5,)]))
print(mlb1.classes_)
結(jié)果:
array([[1, 1, 0, 0, 0],
[0, 0, 1, 1, 0],
[0, 0, 0, 0, 1]])
array([1, 2, 3, 4, 5])
array([[1, 0, 0, 0, 0, 1],
[0, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0]])
array([2, 3, 4, 5, 6, 1])
-sklearn.preprocessing.LabelEncoder
之前看過這個(gè),可以把male,female這些變成0简逮,1的二值散庶,但是存在值的大小關(guān)系悲龟,可能會(huì)造成機(jī)器學(xué)習(xí)的算法過程中一些偏好须教。
- 處理也有的特征
類別特征
類別特征轻腺,表示某個(gè)數(shù)據(jù)點(diǎn)屬于某一個(gè)類別贬养,或具有某一種類的特性误算。一列類別特征儿礼,默認(rèn)用自然數(shù)表示(可以用LabelEncoder將字符串轉(zhuǎn)化為自然數(shù))翰苫。如果一列類別特征里有種不同類別奏窑,其取值范圍是埃唯。自然數(shù)編碼
默認(rèn)的編碼方式墨叛,消耗內(nèi)存小漠趁,訓(xùn)練時(shí)間快闯传,但是特征的質(zhì)量不高。
這個(gè)特征質(zhì)量不高我感覺是因?yàn)長(zhǎng)abelEncoder的出來的東西是無序的共缕,經(jīng)常需要再用one-hot編碼獨(dú)熱編碼
如果類別特征的數(shù)據(jù)本身是無序的图谷,例如male,female里面不存在male的值大于female蜓萄,以及female大于male的情況嫉沽,則需要用one-hot編碼堂竟。
它會(huì)使一組數(shù)據(jù)變得只保留一個(gè)位置上為1出嘹,其余都為0的情況税稼,會(huì)特別稀疏郎仆。聚類編碼
(百度也沒查到扰肌,這玩意兒沒看懂太,待補(bǔ))平均數(shù)編碼
博客上說這是針對(duì)高基數(shù)類別特征的有監(jiān)督編碼桂躏。
如果一個(gè)特征是定性的并且這個(gè)特征的可能值非常多(高基數(shù))沼头,那么平均數(shù)編碼是一種高效的編碼方式土至。(比如:家庭住址?骡苞,email地址)
LabelEncoder編碼高基數(shù)定性特征,雖然只會(huì)產(chǎn)生一列躲株,但每個(gè)自然數(shù)都會(huì)產(chǎn)生不同的重要意義霜定,對(duì)于而言線性不可分(?????僅僅是因?yàn)榫S度高了所以不可分辖所,還是因?yàn)槭裁丛祷兀浚?br> OneHotEncoder編碼高基數(shù)定義特征典挑,必然會(huì)產(chǎn)生上萬列的稀疏矩陣酥宴,易消耗大量?jī)?nèi)存和訓(xùn)練時(shí)間。
這時(shí)候平均數(shù)編碼是一種好的選擇搔弄。在經(jīng)驗(yàn)貝葉斯的架構(gòu)下幅虑,利用所要預(yù)測(cè)的因變量,有監(jiān)督地確定最適合這個(gè)定性特征的編碼方式顾犹。
基本思路與原理:
平均數(shù)編碼是一種有監(jiān)督的編碼方式倒庵,適用于分類和回歸問題炫刷。
平均數(shù)編碼的基本的基本思想是:把特征工程中的每一個(gè)變量變成它所估算的label的概率擎宝。具體可見。
先驗(yàn)概率浑玛,后驗(yàn)概率的計(jì)算感覺上是通過頻率來估計(jì)概率绍申!
先驗(yàn)概率的計(jì)算:
后驗(yàn)概率的計(jì)算:
后驗(yàn)概率的理解:用條件概率展開,然后使用頻數(shù)估計(jì)概率顾彰。(我是這么感覺的)
權(quán)重:
平均編碼使用的是先驗(yàn)概率和后驗(yàn)概率的一個(gè)凸組合极阅,引入先驗(yàn)概率權(quán)重來計(jì)算編碼時(shí)候所使用的概率。
感覺上這個(gè)是手動(dòng)調(diào)節(jié)的涨享,不知道可不可以弄成自動(dòng)調(diào)節(jié)(根據(jù)先驗(yàn)概率和后驗(yàn)概率的比值筋搏,那一部分值越大,使得它的比值越大)厕隧。
權(quán)重函數(shù):
定義一個(gè)權(quán)重函數(shù)奔脐,輸入是特征類別在訓(xùn)練集中出現(xiàn)的次數(shù),輸出是對(duì)于這個(gè)特征類別的先驗(yàn)概率的權(quán)重吁讨。
- 只出現(xiàn)一次的類別
在類別特征里髓迎,有時(shí)候有一些類別,在訓(xùn)練集和測(cè)試集中總共只出現(xiàn)一次建丧,這時(shí)候排龄,繼續(xù)保留這個(gè)編碼的意義不大,不然將所有只出現(xiàn)一次的編碼融合成一個(gè)新的類別里面茶鹃。
數(shù)值特征
數(shù)值特征可以是連續(xù)的涣雕,也可以是離散的艰亮,一般表示為一個(gè)實(shí)數(shù)值。
不同算法對(duì)于數(shù)值的要求不一樣挣郭,有些算法是可以不用標(biāo)準(zhǔn)化/歸一化的迄埃,例如:樹模型;但是神經(jīng)網(wǎng)絡(luò)這樣的模型是需要標(biāo)準(zhǔn)化的兑障。
- 標(biāo)準(zhǔn)化
- Z-score標(biāo)準(zhǔn)化
preprocessing.StandardScaler(copy = True, with_mean = True, with_stand = True)
計(jì)算公式是:
是訓(xùn)練樣本的均值侄非,是訓(xùn)練樣本的標(biāo)準(zhǔn)差。
輸入?yún)?shù):
copy:默認(rèn)是True流译,不會(huì)覆蓋原數(shù)據(jù)逞怨,(特別是處理一些DataFrame文件時(shí)候);
with_mean:默認(rèn)是True福澡,如果是False叠赦,會(huì)使得為0;
with_std:默認(rèn)是True革砸,如果是False除秀,會(huì)使得為0。
返回參數(shù):
scale_:每個(gè)功能相對(duì)縮放數(shù)據(jù)算利;
mean_:訓(xùn)練集的每個(gè)特征的平均值册踩;
var_:訓(xùn)練集的每個(gè)特征的方差;
n_samples_seen:對(duì)每個(gè)特征通過估算器處理的樣本數(shù)效拭。(試了下暂吉,這個(gè)應(yīng)該是返回的是處理的多少樣本數(shù)目)
scaler = preprocessing.StandardScaler()
data = [[0,0],[0,0],[1,1],[1,1]]
scaler.fit(data)
print(scaler.mean_)
print(scaler.var_)
print(scaler.n_samples_seen_)
print(scaler.transformer(data))
結(jié)果是:
array([0.5, 0.5])
array([0.25, 0.25])
4
array([[-1., -1.],
[-1., -1.],
[ 1., 1.],
[ 1., 1.]])
- RobustScaler(穩(wěn)健的放縮?缎患?)
如果數(shù)值特征列中存在數(shù)值極大或者極小的異常點(diǎn)outlier(通過EDA發(fā)現(xiàn)慕的,e.g. 箱形圖,ps.我好像也只能想到箱形圖)挤渔,應(yīng)該使用更穩(wěn)健的統(tǒng)計(jì)數(shù)據(jù):用中位數(shù)取代均值(因?yàn)榫狄资茈x群點(diǎn)的影響)业稼,用分位數(shù)而不是方差。
prepocessing.RobustScaler(with_center=True, with_scaling=True, quantile_range=(25.0, 75.0), copy=True)
感覺和Z-score的區(qū)別就是使用對(duì)離群點(diǎn)更魯棒的統(tǒng)計(jì)學(xué)參數(shù)蚂蕴。
輸入?yún)?shù):
with_center:默認(rèn)是True,縮放之前讓數(shù)據(jù)居中俯邓。這將導(dǎo)致變換在稀疏矩陣上嘗試時(shí)引發(fā)異常骡楼,因?yàn)閷?duì)它們進(jìn)行居中需要構(gòu)建一個(gè)密集矩陣,在常見的情況下稽鞭,該矩陣可能太大而無法放入內(nèi)存中鸟整。(意思就是說,對(duì)稀疏矩陣要選擇False?)朦蕴;
with_scaling:默認(rèn)是True篮条,將數(shù)據(jù)放縮到4分位數(shù)弟头。
quantile_range:默認(rèn)是(25.0,75.0),1分位數(shù)和3分位數(shù)涉茧,計(jì)算范圍赴恨;
copy:同之前寫的一樣。
輸出參數(shù):
center_:訓(xùn)練集每個(gè)屬性的中值伴栓;
scale_:訓(xùn)練集中每個(gè)特征的(縮放)四分位數(shù)范圍伦连。
from sklearn.preprocessing import RobustScaler
X = np.array([[1,2],[2,3]])
scaler = RobustScaler()
scaler.fit(X)
print(scaler.transform(X))
結(jié)果為:
array([[-1., -1.],
[ 1., 1.]])
- 歸一化
至少存在一個(gè)非0成分的每一行(每一個(gè)樣本)被分別縮放使得它的L2范數(shù)等于1。
這個(gè)transformer對(duì)稀疏矩陣钳垮,密集矩陣都適用
preprocessing.Normalizer(norm='l2', copy = True)
輸入?yún)?shù):
norm:用于標(biāo)準(zhǔn)化每個(gè)非0樣本的標(biāo)準(zhǔn)惑淳;
copy:同上。
from sklearn.preprocessing import Normalizer
X2 = [[4,1,2,2],[1,3,9,3],[5,7,5,1]]
scaler2 = Normalizer(norm='l2')
scaler2.fit(X2)
print(scaler2.transform(X2))
結(jié)果是:
array([[0.8, 0.2, 0.4, 0.4],
[0.1, 0.3, 0.9, 0.3],
[0.5, 0.7, 0.5, 0.1]])
- 區(qū)間縮放
- MaxAbsScaler
根據(jù)最大絕對(duì)值放縮每個(gè)特征饺窿。
單獨(dú)的縮放和轉(zhuǎn)換每個(gè)特征歧焦,使得訓(xùn)練集上的最大絕對(duì)值的值變?yōu)?,它不會(huì)移動(dòng)/居中數(shù)據(jù)肚医,因此不會(huì)破壞稀疏性绢馍。
prepocessing.MaxAbsScarer(copy = True)
輸入?yún)?shù):
copy:同上。
輸出參數(shù):
scale_:數(shù)據(jù)的每個(gè)特征的縮放忍宋;
max_abs:每個(gè)特征的絕對(duì)值最大值痕貌;
n_samples_seen_:同上。
from sklearn.preprocessing import MaxAbsScaler
X = np.array([[1,-1,2],[2,0,0],[0,1,-1]])
print(X)
scaler = MaxAbsScaler()
scaler.fit(X)
print(scaler.max_abs_)
print(scaler.scale_)
print(scaler.n_samples_seen_)
print(scaler.transform(X))
結(jié)果:
[[ 1 -1 2]
[ 2 0 0]
[ 0 1 -1]]
[2. 1. 2.]
[2. 1. 2.]
3
[[ 0.5 -1. 1. ]
[ 1. 0. 0. ]
[ 0. 1. -0.5]]
- MinMaxScaler
把每一個(gè)特征放縮到一個(gè)區(qū)域內(nèi)糠排。
其中舵稠,min,max 是特征區(qū)域入宦,e.g. [0,1]哺徊。
preprocessing.MinMaxScaler(featur_range(0,1), copy = True)
輸入?yún)?shù):
feature_range:期望的轉(zhuǎn)換數(shù)據(jù)范圍;
copy:同上乾闰。
輸出參數(shù):
scale_:數(shù)據(jù)的每個(gè)特征的縮放涯肩;
data_min_:每個(gè)特征的最小值轿钠;
data_max_:每個(gè)特征的最大值;
data_range_:每個(gè)特征的范圍病苗。
from sklearn.preprocessing import MinMaxScaler
X1 = np.array([[-1,2],[-0.5,6],[0,10],[1,18]])
print(X1)
scaler1 = MinMaxScaler()
scaler1.fit(X1)
print(scaler1.min_)
print(scaler1.scale_)
print(scaler1.data_min_)
print(scaler1.data_max_)
print(scaler1.data_range_)
print(scaler1.transform(X1))
結(jié)果:
[ 0.5 -0.125]
[0.5 0.0625]
[-1. 2.]
[ 1. 18.]
[ 2. 16.]
[[0. 0. ]
[0.25 0.25]
[0.5 0.5 ]
[1. 1. ]]
- 缺失值處理
LightGBM/XGBoost都能將NaN作為數(shù)據(jù)的一部分進(jìn)行學(xué)習(xí)疗垛,所以不需要處理缺失值,但是別的方法一般都不行硫朦,需要進(jìn)行填充贷腕。
- 用平均值,中值,分位數(shù)泽裳,眾數(shù)瞒斩,隨機(jī)值等替代,效果一般涮总,因?yàn)檎J(rèn)為增加了噪聲胸囱;
- 先根據(jù)歐氏距離或者Pearson相似度,來確定和缺失數(shù)據(jù)樣本最近的K個(gè)樣本妹卿,將這K個(gè)樣本的屬性加權(quán)平均來估計(jì)該樣本的缺失值旺矾;
(感覺上前面部分是推薦系統(tǒng)里面的東西,找出近鄰的樣本)夺克; - 將變量映射到高維空間
3.a. 對(duì)于離散型變量:男箕宙,女,缺失三種情況铺纽,采用one-hot編碼映射成三個(gè)變量柬帕;
3.b. 對(duì)于連續(xù)型變量:首先對(duì)連續(xù)型變量進(jìn)行變量分箱,采用一定數(shù)據(jù)的數(shù)據(jù)平滑方式(平均值/中值/箱邊界)進(jìn)行離散化狡门,然后增加是否缺失這種維度陷寝。
- 創(chuàng)造新的特征
- 數(shù)值特征的簡(jiǎn)單變換
1.a. 單獨(dú)特征列乘以一個(gè)常數(shù)或者加減一個(gè)常數(shù):對(duì)于創(chuàng)造新的有用特征毫無用處,只能作為對(duì)已有特征的處理其馏;
1.b. 任何針對(duì)單獨(dú)特征列的單調(diào)變換凤跑,e.g. 把變成;不適合于決策樹之類的算法
1.c. 線性組合叛复;僅適用于決策樹以及基于決策樹的ensemble算法仔引;
1.d. 多項(xiàng)式特征;
生成多項(xiàng)式和相互特征褐奥。
生成一個(gè)新的特征矩陣咖耘,該特征矩陣由特征的所有多項(xiàng)式組合組成,其度數(shù)小于或等于指定的度數(shù)撬码。也就是說給定儿倒,度數(shù)是2,那么新的特征矩陣是呜笑。(給我一種集合里的生成元的感覺)
prepocessing.PolynomialFeatures(degree=2, interaction_only=False, include_bias=True夫否,Order='C')
輸入?yún)?shù):
degree:默認(rèn)是2,多項(xiàng)式特征的度叫胁;
interaction_only:(沒看懂這個(gè))慷吊;
include_bias:默認(rèn)是True,會(huì)包含一個(gè)偏置列曹抬,度數(shù)是0,也就是會(huì)有0這一項(xiàng);
Order:密集情況下的輸出數(shù)組的順序谤民,'F'順序計(jì)算速度更快堰酿,但可能會(huì)降低后續(xù)估算器的速度。
輸出參數(shù):
powers_:powers_[i,j] 是第i個(gè)輸出中第j個(gè)輸入的指數(shù)张足;
n_input_features_:輸入特征的總數(shù)触创;
n_output_features:輸出特征的總數(shù)。
from sklearn.preprocessing import PolynomialFeatures
import numpy as np
X = np.arange(6).reshape(3,2)
print(X)
poly = PolynomialFeatures()
poly.fit(X)
print(poly.powers_)
print(poly.n_input_features_)
print(poly.n_output_features_)
print(poly.transform(X))
結(jié)果是:
[[0 1]
[2 3]
[4 5]]
[[0 0]
[1 0]
[0 1]
[2 0]
[1 1]
[0 2]]
2
6
[[ 1. 0. 1. 0. 0. 1.]
[ 1. 2. 3. 4. 6. 9.]
[ 1. 4. 5. 16. 20. 25.]]
1.e 比例特征:为牍;
1.f 絕對(duì)值哼绑;
1.g 碉咆,。
- 類別特征與數(shù)值特征的組合
用表示數(shù)值特征茂浮,用表示類別特征壳咕,利用Pandas的groupby操作席揽,可以創(chuàng)造出以下幾種有意思的特征:(知乎上說可以是離散化的,這是不是可以說谓厘,我們對(duì)一個(gè)數(shù)值特征分成幾個(gè)類別幌羞,然后對(duì)它進(jìn)行操作,重復(fù)使用會(huì)不會(huì)對(duì)數(shù)據(jù)利用的效果更好竟稳。)
僅僅將已有的數(shù)值特征和類別特征進(jìn)行以上有效組合属桦,就能夠得到更多的有效特征。
pandas.DataFrame.groubpy(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **Kwargs)
使用映射器或者一系列的列對(duì)DataFrame或者Series進(jìn)行分組住练。groupby操作涉及拆分對(duì)象地啰,應(yīng)用函數(shù)和組合結(jié)果的某種組合。 這可用于對(duì)這些組上的大量數(shù)據(jù)和計(jì)算操作進(jìn)行分組讲逛。
輸入?yún)?shù):
by:用于確定作為groupby操作的group亏吝;
axis:對(duì)行操作還是對(duì)列操作,axis=0/1盏混;
level:如果軸是MultiIndex(分層)蔚鸥,則按特定級(jí)別或級(jí)別分組;
ax_index:對(duì)于聚合輸出许赃,返回以組標(biāo)簽作為索引的對(duì)象止喷。 僅與DataFrame輸入相關(guān)。 as_index = False實(shí)際上是“SQL風(fēng)格”的分組輸出混聊;
sort:對(duì)組鍵進(jìn)行排序弹谁,關(guān)閉它可以獲得更好的性能,請(qǐng)注意,這不會(huì)影響每組內(nèi)觀察的順序预愤,groupby保留每個(gè)組中的行順序沟于;
group_keys:調(diào)用apply時(shí),將組鍵添加到索引以標(biāo)識(shí)片段植康;
squeeze:如果可能旷太,減少返回類型的維度,否則返回一致類型销睁;
observed:這僅適用于任何group是分類的情況供璧。 如果為True:僅顯示分l類group的觀察值。 如果為False:顯示分類group的所有值冻记;
**Kwargs:可選睡毒,只接受關(guān)鍵字參數(shù)'mutated'并傳遞給groupby。
輸出參數(shù):取決于調(diào)用對(duì)象并返回包含有關(guān)組的信息的groupby對(duì)象檩赢。
import pandas as pd
data = pd.DataFrame({'Animal':['Falcon','Falcon','Parrot','Parrot'],
'Max Speed':[380,370,24,26]})
data.groupby(['Animal']).mean()
data:
結(jié)果:
將這種方法與線性組合等基礎(chǔ)特征工程方法結(jié)合(僅適用于決策樹)吕嘀,可以得到更多有意義的特征。
e.g.
N1 - median(N1)_by(C1)
N1 - mean(N1)_by(C1)
- 用基因編程創(chuàng)造新的特征
目前贞瞒,Python環(huán)境下最好用的基因編程庫(kù)是gplearn偶房。
基因編程的兩大用法:
3.a 轉(zhuǎn)換:將已有特征進(jìn)行組合轉(zhuǎn)換,組合的方式(一元军浆,二元棕洋,多元算子)可以由用戶自行定義,也可以使用庫(kù)中自帶的函數(shù)(e.g. 加減乘除乒融,min掰盘,max,三角函數(shù)赞季,對(duì)數(shù)等)愧捕。組合的目的是為了創(chuàng)造出與目標(biāo)值最相關(guān)的新特征。這種相關(guān)程度可以用spearman或者pearson的相關(guān)系數(shù)進(jìn)行測(cè)量申钩。spearman多用于決策樹(免疫單特征單調(diào)變換)次绘,pearson多用于線性回歸等其他算法。
3.b 回歸:原理同上撒遣,只不過直接用于回歸而已邮偎。
關(guān)于gplearn的中文介紹:https://zhuanlan.zhihu.com/p/31185882
官方文檔說明:https://gplearn.readthedocs.io/en/stable/intro.html#initialization - 用決策樹創(chuàng)造新的特征
在決策樹系列算法中(單顆決策樹,GBDT义黎,隨機(jī)森林中)禾进,每一個(gè)樣本都會(huì)被映射到?jīng)Q策樹的一片葉子上。因此廉涕,我們可以把樣本經(jīng)過每一棵決策樹映射后的index(自然數(shù))或one-hot-vector(啞編碼得到的稀疏矢量)作為一項(xiàng)新的特征泻云,加入到模型中艇拍。
具體實(shí)現(xiàn):apply()以及decision_path()方法,在scikit-learn和xgboost里都可以用宠纯。 - 決策樹淑倾,基于決策樹的ensemble
5.a spearman correlation coefficient
- 特征選擇
當(dāng)數(shù)據(jù)預(yù)處理完后,我們需要選擇有意義的特征輸入機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練征椒。通常來說,從兩個(gè)方面考慮來選擇特征:
- 特征是否發(fā)散:如果一個(gè)特征不發(fā)散湃累,例如方差接近于0勃救,也就是說樣本在這個(gè)特征上基本上沒有差異,這個(gè)特征對(duì)于樣本的區(qū)分并沒有什么用治力。
- 特征與目標(biāo)的相關(guān)性:這點(diǎn)比較顯而易見蒙秒,與目標(biāo)相關(guān)性高的特征,應(yīng)當(dāng)優(yōu)選選擇宵统。
根據(jù)特征選擇的形式又可以將特征選擇方法分為三種晕讲。
2.a Filter:過濾法,按照發(fā)散性或者相關(guān)性對(duì)各個(gè)特征進(jìn)行評(píng)分马澈,設(shè)定閾值或者待選擇閾值的個(gè)數(shù)瓢省,選擇特征。
aa. 方差選擇法痊班。使用方差選擇法勤婚,先要計(jì)算各個(gè)特征的方差,然后根據(jù)閾值涤伐,選擇方差大于閾值的特征馒胆;
bb. 相關(guān)系數(shù)法。使用相關(guān)系數(shù)法凝果,先要計(jì)算各個(gè)特征對(duì)目標(biāo)值的相關(guān)系數(shù)以及相關(guān)系數(shù)的P值祝迂。 e.g. 使用pearson相關(guān)系數(shù)法
cc. 卡方檢驗(yàn)。 (這一部分不太能理解器净,待補(bǔ))
dd. 互信息法型雳。 (這個(gè)也是,不太能理解為啥這個(gè)能選擇出來)掌动。
補(bǔ)充下個(gè)人的其它看法四啰,這個(gè)過濾法,感覺只要能算出屬性的什么什么值粗恢,然后用閾值去截?cái)嗑秃昧烁躺梗究飘呍O(shè)里面對(duì)BP神經(jīng)網(wǎng)絡(luò)加了個(gè)灰色關(guān)聯(lián)度去截?cái)鄬傩阅軌颢@得比BP神經(jīng)網(wǎng)絡(luò)更好的效果,現(xiàn)在理解就是這么個(gè)意思
2.b Wrapper:包裝法眷射,根據(jù)目標(biāo)函數(shù)(通常是預(yù)測(cè)效果評(píng)分)匙赞,每次選擇若干特征佛掖,或者排除若干特征。
aa. 遞歸消除法:遞歸消除特征法使用一個(gè)基模型來進(jìn)行多輪訓(xùn)練涌庭,每輪訓(xùn)練后芥被,消除若干權(quán)值系數(shù)的特征,再基于新的特征集進(jìn)行下一輪訓(xùn)練坐榆。
2.c Embedded:嵌入法拴魄,先使用某些機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練,得到各個(gè)特征的權(quán)值系數(shù)席镀,根據(jù)系數(shù)從大到小選擇特征匹中。類似于Filter方法,但是是通過訓(xùn)練來確定特征的優(yōu)劣豪诲。
aa. 基于懲罰項(xiàng)的特征選擇法顶捷。
參考資料:
https://zhuanlan.zhihu.com/p/26444240
https://blog.csdn.net/fisherming/article/details/80105891
https://zhuanlan.zhihu.com/p/26308272
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html
https://zhuanlan.zhihu.com/p/31185882
https://www.cnblogs.com/peizhe123/p/7412364.html