机器学习 特征工程
特征和數(shù)據(jù)決定了機器學(xué)習(xí)效果的上限,而算法和模型不過是接近這個上限而已,因此特征工程對于機器學(xué)習(xí)是及其重要的。
一圖勝前言[1]:
數(shù)據(jù)清洗
在實際的應(yīng)用過程中,數(shù)據(jù)是十分的雜亂的,可能包含大量的噪音,缺失值等,所以需要通過一些方法,盡可能提高數(shù)據(jù)質(zhì)量。一般包括:
- 分析數(shù)據(jù)
- 缺失值處理
- 異常值處理
- 噪音數(shù)據(jù)處理
去重處理
分析數(shù)據(jù)
python的pandas包含了一些統(tǒng)計和匯總統(tǒng)計,如:
可參見《利用Python進行數(shù)據(jù)分析》Wes Mckinney著,P144.缺失值處理
缺失值在實際數(shù)據(jù)中不可避免,可以將缺失的數(shù)據(jù)直接刪除,或者賦值為0/NaN,其實有更多的處理方法。
判斷缺失值:pd.isnull(DataFrame)或者pd.notnull(DataFrame)
樣例:處理缺失值常用方法:
1.直接刪除。適合缺失值數(shù)量較小,并且是隨機出現(xiàn)的情況,刪除它們對整體數(shù)據(jù)影響不大
2.使用一個全局常量填充。譬如將缺失值用np.nan等填充,但是效果不一定好,因為算法可能會把它識別為一個新的類別,一般很少用
3.使用均值或中位數(shù)代替----優(yōu)點:不會減少樣本信息,處理簡單。缺點:當(dāng)缺失數(shù)據(jù)不是隨機數(shù)據(jù)時會產(chǎn)生偏差.對于正常分布的數(shù)據(jù)可以使用均值代替,如果數(shù)據(jù)是傾斜的,使用中位數(shù)可能更好。
4.插補法
1)隨機插補法----從總體中隨機抽取某個樣本代替缺失樣本
2)多重插補法----通過變量之間的關(guān)系對缺失數(shù)據(jù)進行預(yù)測,利用蒙特卡洛方法生成多個完整的數(shù)據(jù)集,在對這些數(shù)據(jù)集進行分析,最后對分析結(jié)果進行匯總處理
3)熱平臺插補----指在非缺失數(shù)據(jù)集中找到一個與缺失值所在樣本相似的樣本(匹配樣本),利用其中的觀測值對缺失值進行插補。
優(yōu)點:簡單易行,準(zhǔn)去率較高
缺點:變量數(shù)量較多時,通常很難找到與需要插補樣本完全相同的樣本。但我們可以按照某些變量將數(shù)據(jù)分層,在層中對缺失值實用均值插補
4)拉格朗日差值法和牛頓插值法
5.建模法
可以用回歸、使用貝葉斯形式化方法的基于推理的工具或決策樹歸納確定。例如,利用數(shù)據(jù)集中其他數(shù)據(jù)的屬性,可以構(gòu)造一棵判定樹,來預(yù)測缺失值的值。使用python處理示例:
- 直接刪除
DataFrame.dropna(),該方法的how參數(shù)可以控制刪除存在缺失值還是全部缺失值的行或者列。參見pandas.DataFrame.dropna
使用樣例: - 填充缺失值
DataFrame.fillna,詳細(xì)使用參見:pandas.DataFrame.fillna
重要參數(shù): - value:用于填充缺失值的值
- method:可選:bfill/backfill/pad/ffill。bfill/backfill,后向填充,使用下一個有效值填充‘空洞’。pad/ffill,前向填充,使用前一個有效值填充‘空洞’。
- inplace:是否原地操作
axis:0,按列填充;1,按行填充
異常值處理
異常值也稱為“離群點”,如何發(fā)現(xiàn)異常值?如何處理?
發(fā)現(xiàn)異常值
- 簡單的統(tǒng)計分析
可以使用python的describe()統(tǒng)計分析,如果發(fā)現(xiàn)有數(shù)據(jù)超過的合理范圍,如年齡為負(fù)數(shù),身高大于400cm,顯然是不合理,應(yīng)該去除的。 - 3?原則
若數(shù)據(jù)服從正態(tài)分布,在3?原則下,異常值為:觀測值與平均值的偏差超過3倍標(biāo)準(zhǔn)差的數(shù)值。若數(shù)據(jù)不服從正態(tài)分布,也可以用遠(yuǎn)離平均值多少倍標(biāo)準(zhǔn)差的方式描述異常值。 - 箱型圖分析
箱型圖提供了識別異常值的標(biāo)準(zhǔn),一個正常的箱型圖從上至下分別為:上邊緣(最小值),上四分位數(shù)(前25%),中位數(shù),下四分位數(shù)(后25%)和下邊緣,超脫此范圍的被視為異常值,使用plt.boxplot()可以很容易畫出箱型圖。參見:箱型圖 - 基于模型檢測
首先建立一個數(shù)據(jù)模型,異常值是那些無法完美擬合模型的對象。如果模型是簇的集合,異常值就是不顯著屬于某個簇的對象,如果模型是回歸模型,則異常值是遠(yuǎn)離預(yù)測值的對象。 - 基于距離
- 基于密度
基于聚類
處理方法
1.刪除異常值
2.不處理。如果算法對異常值不敏感,則可以不處理。但如果算法是類似kMeans,knn之類對異常值敏感的,則最好丟棄異常值。
3.按照缺失值處理。將異常值當(dāng)作缺失值,填充平均值,前向填充等。噪音處理
噪音和上述的異常值的區(qū)別在于,噪音包括錯誤值,而異常值屬于遠(yuǎn)離正常值的數(shù)據(jù)。噪音的處理和異常值處理類似。可以使用箱線圖和函數(shù)擬合方法,加以剔除。
去重處理
利用pandas中的DataFrame.drop_duplicates(),參見pandas.DataFrame.drop_duplicates
數(shù)據(jù)預(yù)處理
2.1無量綱化
無量綱化使不同規(guī)格的數(shù)據(jù)轉(zhuǎn)換到同一規(guī)格。常見的無量綱化方法有標(biāo)準(zhǔn)化和區(qū)間縮放法。標(biāo)準(zhǔn)化的前提是特征值服從正態(tài)分布,標(biāo)準(zhǔn)化后,其轉(zhuǎn)換成標(biāo)準(zhǔn)正態(tài)分布。區(qū)間縮放法利用了邊界值信息,將特征的取值區(qū)間縮放到某個特定的范圍,例如[0, 1]等。
2.1.1標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化是需要標(biāo)準(zhǔn)差和平均值。公式表達(dá):
2.1.2歸一化
標(biāo)準(zhǔn)化和歸一化的區(qū)別在于:標(biāo)準(zhǔn)化是依照特征矩陣的列處理數(shù)據(jù),將樣本的特征值轉(zhuǎn)化到同一量綱下。而歸一化是依照特征矩陣的行處理數(shù)據(jù),其目的在于樣本向量在點乘運算或者其他核運算計算相似度是,擁有統(tǒng)一的標(biāo)準(zhǔn),也即是都轉(zhuǎn)化為“單位向量”。規(guī)則為l2 的歸一化公式為:
2.1.3區(qū)間縮放法
利用兩個最值對所有值進行縮放,公式表達(dá):
2.2對定量數(shù)據(jù)二值化
設(shè)定一個閾值,大于閾值賦值為1,小于等于閾值賦值為0,公式表達(dá):
2.3獨熱編碼One-hot
from sklearn.preprocessing import OneHotEncoder OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))#One-hot編碼,編碼后為,樣本數(shù)*類別數(shù)大小的矩陣2.4數(shù)據(jù)變換
常見的數(shù)據(jù)變換有基于多項式,指數(shù)函數(shù),對數(shù)函數(shù)的。
4個特征,度為2的多項式轉(zhuǎn)換公式如下:
特征選擇
當(dāng)數(shù)據(jù)預(yù)處理后,我們需要選擇有意義的特征輸入機器學(xué)習(xí)算法中訓(xùn)練,通常來說,從兩個方面選擇特征:
- 特征是否發(fā)散。
機器學(xué)習(xí)基礎(chǔ)與實踐(一)----數(shù)據(jù)清洗
使用sklearn做單機特征工程
轉(zhuǎn)載于:https://www.cnblogs.com/mengnan/p/9307598.html
總結(jié)
- 上一篇: 页面滚动到指定class样式位置
- 下一篇: CentoS7 and MySql 5.