日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

机器学习 特征工程

發(fā)布時(shí)間:2024/9/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习 特征工程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

特征和數(shù)據(jù)決定了機(jī)器學(xué)習(xí)效果的上限,而算法和模型不過是接近這個(gè)上限而已,因此特征工程對(duì)于機(jī)器學(xué)習(xí)是及其重要的。
一圖勝前言[1]:

數(shù)據(jù)清洗

在實(shí)際的應(yīng)用過程中,數(shù)據(jù)是十分的雜亂的,可能包含大量的噪音,缺失值等,所以需要通過一些方法,盡可能提高數(shù)據(jù)質(zhì)量。一般包括:

  • 分析數(shù)據(jù)
  • 缺失值處理
  • 異常值處理
  • 噪音數(shù)據(jù)處理
  • 去重處理

    分析數(shù)據(jù)

    python的pandas包含了一些統(tǒng)計(jì)和匯總統(tǒng)計(jì),如:

    可參見《利用Python進(jìn)行數(shù)據(jù)分析》Wes Mckinney著,P144.

    缺失值處理

    缺失值在實(shí)際數(shù)據(jù)中不可避免,可以將缺失的數(shù)據(jù)直接刪除,或者賦值為0/NaN,其實(shí)有更多的處理方法。

  • 判斷缺失值:pd.isnull(DataFrame)或者pd.notnull(DataFrame)
    樣例:

  • 處理缺失值常用方法:

    1.直接刪除。適合缺失值數(shù)量較小,并且是隨機(jī)出現(xiàn)的情況,刪除它們對(duì)整體數(shù)據(jù)影響不大

    2.使用一個(gè)全局常量填充。譬如將缺失值用np.nan等填充,但是效果不一定好,因?yàn)樗惴赡軙?huì)把它識(shí)別為一個(gè)新的類別,一般很少用

    3.使用均值或中位數(shù)代替----優(yōu)點(diǎn):不會(huì)減少樣本信息,處理簡(jiǎn)單。缺點(diǎn):當(dāng)缺失數(shù)據(jù)不是隨機(jī)數(shù)據(jù)時(shí)會(huì)產(chǎn)生偏差.對(duì)于正常分布的數(shù)據(jù)可以使用均值代替,如果數(shù)據(jù)是傾斜的,使用中位數(shù)可能更好。

    4.插補(bǔ)法
      1)隨機(jī)插補(bǔ)法----從總體中隨機(jī)抽取某個(gè)樣本代替缺失樣本
      2)多重插補(bǔ)法----通過變量之間的關(guān)系對(duì)缺失數(shù)據(jù)進(jìn)行預(yù)測(cè),利用蒙特卡洛方法生成多個(gè)完整的數(shù)據(jù)集,在對(duì)這些數(shù)據(jù)集進(jìn)行分析,最后對(duì)分析結(jié)果進(jìn)行匯總處理
      3)熱平臺(tái)插補(bǔ)----指在非缺失數(shù)據(jù)集中找到一個(gè)與缺失值所在樣本相似的樣本(匹配樣本),利用其中的觀測(cè)值對(duì)缺失值進(jìn)行插補(bǔ)。
        優(yōu)點(diǎn):簡(jiǎn)單易行,準(zhǔn)去率較高
        缺點(diǎn):變量數(shù)量較多時(shí),通常很難找到與需要插補(bǔ)樣本完全相同的樣本。但我們可以按照某些變量將數(shù)據(jù)分層,在層中對(duì)缺失值實(shí)用均值插補(bǔ)
      4)拉格朗日差值法和牛頓插值法
    5.建模法
    可以用回歸、使用貝葉斯形式化方法的基于推理的工具或決策樹歸納確定。例如,利用數(shù)據(jù)集中其他數(shù)據(jù)的屬性,可以構(gòu)造一棵判定樹,來預(yù)測(cè)缺失值的值。

    使用python處理示例:
  • 直接刪除
    DataFrame.dropna(),該方法的how參數(shù)可以控制刪除存在缺失值還是全部缺失值的行或者列。參見pandas.DataFrame.dropna
    使用樣例:
  • 填充缺失值
    DataFrame.fillna,詳細(xì)使用參見:pandas.DataFrame.fillna
    重要參數(shù):
  • value:用于填充缺失值的值
  • method:可選:bfill/backfill/pad/ffill。bfill/backfill,后向填充,使用下一個(gè)有效值填充‘空洞’。pad/ffill,前向填充,使用前一個(gè)有效值填充‘空洞’。
  • inplace:是否原地操作
  • axis:0,按列填充;1,按行填充

    異常值處理

    異常值也稱為“離群點(diǎn)”,如何發(fā)現(xiàn)異常值?如何處理?

    發(fā)現(xiàn)異常值
  • 簡(jiǎn)單的統(tǒng)計(jì)分析
    可以使用python的describe()統(tǒng)計(jì)分析,如果發(fā)現(xiàn)有數(shù)據(jù)超過的合理范圍,如年齡為負(fù)數(shù),身高大于400cm,顯然是不合理,應(yīng)該去除的。
  • 3?原則
    若數(shù)據(jù)服從正態(tài)分布,在3?原則下,異常值為:觀測(cè)值與平均值的偏差超過3倍標(biāo)準(zhǔn)差的數(shù)值。若數(shù)據(jù)不服從正態(tài)分布,也可以用遠(yuǎn)離平均值多少倍標(biāo)準(zhǔn)差的方式描述異常值。
  • 箱型圖分析
    箱型圖提供了識(shí)別異常值的標(biāo)準(zhǔn),一個(gè)正常的箱型圖從上至下分別為:上邊緣(最小值),上四分位數(shù)(前25%),中位數(shù),下四分位數(shù)(后25%)和下邊緣,超脫此范圍的被視為異常值,使用plt.boxplot()可以很容易畫出箱型圖。參見:箱型圖

  • 基于模型檢測(cè)
    首先建立一個(gè)數(shù)據(jù)模型,異常值是那些無法完美擬合模型的對(duì)象。如果模型是簇的集合,異常值就是不顯著屬于某個(gè)簇的對(duì)象,如果模型是回歸模型,則異常值是遠(yuǎn)離預(yù)測(cè)值的對(duì)象。
  • 基于距離
  • 基于密度
  • 基于聚類

    處理方法

    1.刪除異常值
    2.不處理。如果算法對(duì)異常值不敏感,則可以不處理。但如果算法是類似kMeans,knn之類對(duì)異常值敏感的,則最好丟棄異常值。
    3.按照缺失值處理。將異常值當(dāng)作缺失值,填充平均值,前向填充等。

    噪音處理

    噪音和上述的異常值的區(qū)別在于,噪音包括錯(cuò)誤值,而異常值屬于遠(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ū)間縮放到某個(gè)特定的范圍,例如[0, 1]等。

2.1.1標(biāo)準(zhǔn)化

標(biāo)準(zhǔn)化是需要標(biāo)準(zhǔn)差和平均值。公式表達(dá):

from sklearn.preprocessing import StandardScalar StandardScalar().fit_transform(X)#標(biāo)準(zhǔn)化,返回值為標(biāo)準(zhǔn)化后的值
2.1.2歸一化

標(biāo)準(zhǔn)化和歸一化的區(qū)別在于:標(biāo)準(zhǔn)化是依照特征矩陣的列處理數(shù)據(jù),將樣本的特征值轉(zhuǎn)化到同一量綱下。而歸一化是依照特征矩陣的行處理數(shù)據(jù),其目的在于樣本向量在點(diǎn)乘運(yùn)算或者其他核運(yùn)算計(jì)算相似度是,擁有統(tǒng)一的標(biāo)準(zhǔn),也即是都轉(zhuǎn)化為“單位向量”。規(guī)則為l2 的歸一化公式為:

from sklearn.preprocessing import Normalizer Normalizer().fit_transform(iris.data)
2.1.3區(qū)間縮放法

利用兩個(gè)最值對(duì)所有值進(jìn)行縮放,公式表達(dá):

from sklearn.preprocessing import MinMaxScalar MinMaxScalar().fit_transform(iris.data)
2.2對(duì)定量數(shù)據(jù)二值化

設(shè)定一個(gè)閾值,大于閾值賦值為1,小于等于閾值賦值為0,公式表達(dá):

from sklearn.preprocessing import Binarizer Binarizer(threshold=3).fit_transform(iris.data)#二值化,閾值為3,返回值為二值化后的數(shù)據(jù)
2.3獨(dú)熱編碼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ù)變換有基于多項(xiàng)式,指數(shù)函數(shù),對(duì)數(shù)函數(shù)的。
4個(gè)特征,度為2的多項(xiàng)式轉(zhuǎn)換公式如下:

from sklearn.preprocessing import PolynomialFeatures #多項(xiàng)式轉(zhuǎn)化,其中參數(shù)degree為“度”,默認(rèn)值為2 PolynomialFeatures().fit_transform(iris.data)

特征選擇

當(dāng)數(shù)據(jù)預(yù)處理后,我們需要選擇有意義的特征輸入機(jī)器學(xué)習(xí)算法中訓(xùn)練,通常來說,從兩個(gè)方面選擇特征:

  • 特征是否發(fā)散。

機(jī)器學(xué)習(xí)基礎(chǔ)與實(shí)踐(一)----數(shù)據(jù)清洗
使用sklearn做單機(jī)特征工程

轉(zhuǎn)載于:https://www.cnblogs.com/mengnan/p/9307598.html

總結(jié)

以上是生活随笔為你收集整理的机器学习 特征工程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。