宝贝腿开大点我添添你视频男男,中文字幕熟女人妻av一区二区三区,爱色成人网,大地资源高清播放在线观看在线电影在线观看 ,777米奇影视第四色

集團(tuán)站切換校區(qū)

驗(yàn)證碼已發(fā)送,請(qǐng)查收短信

復(fù)制成功
微信號(hào):togogoi
添加微信好友, 詳細(xì)了解課程
已復(fù)制成功,如果自動(dòng)跳轉(zhuǎn)微信失敗,請(qǐng)前往微信添加好友
打開(kāi)微信
圖標(biāo)

業(yè)界新聞

當(dāng)前位置:首頁(yè) > >業(yè)界新聞 > >

人工智能AI培訓(xùn)_機(jī)器學(xué)習(xí)之特征工程

發(fā)布時(shí)間: 2019-09-19 10:12:28

  人工智能AI培訓(xùn)_機(jī)器學(xué)習(xí)之特征工程

  1.    特征工程概覽

特征是數(shù)據(jù)中抽取出來(lái)的對(duì)結(jié)果預(yù)測(cè)有用的信息,可以是文本或者數(shù)據(jù)。特征工程是使用專業(yè)背景知識(shí)和技巧處理數(shù)據(jù),使得特征能在機(jī)器學(xué)習(xí)算法上發(fā)揮更好的作用的過(guò)程。過(guò)程包含了特征抽取、特征預(yù)處理、特征選擇等過(guò)程。

2.    sklearn

sklearn是機(jī)器學(xué)習(xí)中一個(gè)常用的python第三方模塊,網(wǎng)址:http://scikit-learn.org/stable/index.html ,里面對(duì)一些常用的機(jī)器學(xué)習(xí)方法進(jìn)行了封裝,在進(jìn)行機(jī)器學(xué)習(xí)任務(wù)時(shí),并不需要每個(gè)人都實(shí)現(xiàn)所有的算法,只需要簡(jiǎn)單的調(diào)用sklearn里的模塊就可以實(shí)現(xiàn)大多數(shù)機(jī)器學(xué)習(xí)任務(wù)。

機(jī)器學(xué)習(xí)任務(wù)通常包括特征工程、分類(Classification)和回歸(Regression),常用的分類器包括SVM、KNN、貝葉斯、線性回歸、邏輯回歸、決策樹(shù)、隨機(jī)森林、xgboost、GBDTboosting、神經(jīng)網(wǎng)絡(luò)NN。

常見(jiàn)的降維方法包括TF-IDF、主題模型LDA、主成分分析PCA等等

       以下特征工程使用sklearn來(lái)實(shí)現(xiàn)

3.    數(shù)據(jù)的準(zhǔn)備過(guò)程

數(shù)據(jù)準(zhǔn)備包括數(shù)據(jù)采集、清洗、采樣

1,數(shù)據(jù)采集:數(shù)據(jù)采集前需要明確采集哪些數(shù)據(jù),一般的思路為:

哪些數(shù)據(jù)對(duì)最后的結(jié)果預(yù)測(cè)有幫助?

數(shù)據(jù)我們能夠采集到嗎?

線上實(shí)時(shí)計(jì)算的時(shí)候獲取是否快捷?

 

2,數(shù)據(jù)清洗: 數(shù)據(jù)清洗就是要去除臟數(shù)據(jù),就是對(duì)有問(wèn)題的數(shù)據(jù)進(jìn)行預(yù)處理。(在特征處理的時(shí)候會(huì)對(duì)空值等進(jìn)行處理,這里主要是對(duì)一些不合理的數(shù)據(jù)先處理掉,比如一個(gè)有33天),常用的異常點(diǎn)檢測(cè)算法包括*

偏差檢測(cè):聚類、最近鄰等

基于統(tǒng)計(jì)的異常點(diǎn)檢測(cè):例如極差,四分位數(shù)間距,均差,標(biāo)準(zhǔn)差等,這種方法適合于挖掘單變量的數(shù)值型數(shù)據(jù)。全距(Range),又稱極差,是用來(lái)表示統(tǒng)計(jì)資料中的變異量數(shù)(measures of variation) ,其較大值與最小值之間的差距;四分位距通常是用來(lái)構(gòu)建箱形圖,以及對(duì)概率分布的簡(jiǎn)要圖表概述。

基于距離的異常點(diǎn)檢測(cè):主要通過(guò)距離方法來(lái)檢測(cè)異常點(diǎn),將數(shù)據(jù)集中與大多數(shù)點(diǎn)之間距離大于某個(gè)閾值的點(diǎn)視為異常點(diǎn),主要使用的距離度量方法有絕對(duì)距離 ( 曼哈頓距離 ) 、歐氏距離和馬氏距離等方法。

基于密度的異常點(diǎn)檢測(cè):考察當(dāng)前點(diǎn)周圍密度,可以發(fā)現(xiàn)局部異常點(diǎn),例如LOF算法

 

3,數(shù)據(jù)采樣:采集、清洗過(guò)數(shù)據(jù)以后,正負(fù)樣本是不均衡的,要進(jìn)行數(shù)據(jù)采樣。采樣的方法有隨機(jī)采樣和分層抽樣。但是隨機(jī)采樣會(huì)有隱患,因?yàn)榭赡苣炒坞S機(jī)采樣得到的數(shù)據(jù)很不均勻,更多的是根據(jù)特征采用分層抽樣。

4.    特征抽取

就是從原始的數(shù)據(jù)中構(gòu)造特征集,原始數(shù)據(jù)可能是時(shí)間戳、文本、圖片、音頻等。我們需要從這些數(shù)據(jù)中構(gòu)建特征集

4.1. 類別型數(shù)據(jù)特征抽取

對(duì)于類別型數(shù)據(jù)不能用數(shù)值表示。(比如顏色{紅、綠、藍(lán)},數(shù)字12、3可以表示,但是顏色本身沒(méi)有數(shù)學(xué)關(guān)系,這會(huì)誤導(dǎo)我們的數(shù)學(xué)模型)。常用的方法是熱編碼-(one-hot方法)(OneHotEncoder類)

from sklearn.feature_extraction import DictVectorizer
  '''
  數(shù)據(jù)字典特征抽取
'''
  def dictvec():
    # 實(shí)例化DictVectorizer,數(shù)據(jù)字典特征提取
    '''
    稀疏矩陣在Python科學(xué)計(jì)算中的實(shí)際意義
    稀疏矩陣庫(kù)scipy.sparse

    對(duì)于那些零元素?cái)?shù)目遠(yuǎn)遠(yuǎn)多于非零元素?cái)?shù)目,并且

非零元素的分布沒(méi)有規(guī)律的矩陣稱為稀疏矩陣(sparse)。

    由于稀疏矩陣中非零元素較少,零元素較多,因此可以采用

只存儲(chǔ)非零元素的方法來(lái)進(jìn)行壓縮存儲(chǔ)。對(duì)于一個(gè)用二維數(shù)組

存儲(chǔ)的稀疏矩陣Amn,如果假設(shè)存儲(chǔ)每個(gè)數(shù)組元素需要L個(gè)字節(jié),

那么存儲(chǔ)整個(gè)矩陣需要m*n*L個(gè)字節(jié)。但是,這些存儲(chǔ)空間的

大部分存放的是0元素,從而造成大量的空間浪費(fèi)。為了節(jié)省

存儲(chǔ)空間,可以只存儲(chǔ)其中的非0元素。大大減少了空間的存儲(chǔ)。

    另外對(duì)于很多元素為零的稀疏矩陣,僅存儲(chǔ)非零元素可使矩

陣操作效率更高。也就是稀疏矩陣的計(jì)算速度更快,因?yàn)橹粚?duì)

非零元素進(jìn)行操作,這是稀疏矩陣的一個(gè)突出的優(yōu)點(diǎn)。

    Python不能自動(dòng)創(chuàng)建稀疏矩陣,所以要用scipy中特殊的命令來(lái)得到稀疏矩陣。
 
    :return:
    '''
    #實(shí)體化DictVectorizer對(duì)象
    dict = DictVectorizer(sparse=False)
    #將字典特征值化

    data = dict.fit_transform([{'city': '北京','temperature': 10},

{'city': '上海','temperature':30}, {'city': '深圳','temperature': 28}])

    #dict.get_feature_names(),獲得特值名字
    print(dict.get_feature_names())
    print(data)
    return None

4.2. 文本數(shù)據(jù)特征抽取

1)詞袋:本數(shù)據(jù)預(yù)處理后,去掉停用詞,剩下的詞組成的list,在詞庫(kù)中的映射稀疏向量。Python中用CountVectorizer處理詞袋。 也就是考慮某個(gè)詞在當(dāng)前訓(xùn)練樣本中出現(xiàn)的頻率。

 

2)使用TF-IDF特征:TF-IDF是一種統(tǒng)計(jì)方法,用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語(yǔ)料庫(kù)中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時(shí)會(huì)隨著它在語(yǔ)料庫(kù)中出現(xiàn)的頻率成反比下降。TF(t) = (t在當(dāng)前文中出現(xiàn)次數(shù)) / (t在全部文檔中出現(xiàn)次數(shù)),IDF(t) = ln(總文檔數(shù)t的文檔數(shù))TF-IDF權(quán)重 = TF(t) * IDF(t)。自然語(yǔ)言處理中經(jīng)常會(huì)用到。(考慮到了這個(gè)詞語(yǔ)是不是在大部分文件都出現(xiàn)了,即包含這個(gè)詞語(yǔ)的文本條數(shù)的倒數(shù),這種詞語(yǔ)一般沒(méi)有什么作用,排除掉常用詞語(yǔ)的干擾)

from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
   import jieba
   import numpy as np
   import pandas as pd
 

def cutwords():
      
#拆分詞 tf-idf
      
con1 = jieba.cut("今天很殘酷,明天更殘酷,后天很美好,但絕對(duì)大部分是死在明天晚上,所以每個(gè)人不要放棄今天。")
      con2 = jieba.cut(
"我們看到的從很遠(yuǎn)星系來(lái)的光是在幾百萬(wàn)年之前發(fā)出的,這樣當(dāng)我們看到宇宙時(shí),我們是在看它的過(guò)去。")
      con3 = jieba.cut(
"如果只用一種方式了解某樣事物,你就不會(huì)真正了解它。了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯(lián)系。")
  
      
#將拆出來(lái)的詞轉(zhuǎn)成list集合
      
content1 = list(con1)
      content2 = 
list(con2)
      content3 = 
list(con3)
  
      
#將集合的數(shù)據(jù)轉(zhuǎn)成字符串
      
c1 = " ".join(content1)
      c2 = 
" ".join(content2)
      c3 = 
" ".join(content3)
      
return c1,c2,c3
  
'''
  
文本特征抽取
  '''
  
def   textvec():
      
#實(shí)體化CountVectorizer對(duì)象
      
count = CountVectorizer()
      #
中文的處理
      
c1,c2,c3 = cutwords()
      data =   count.fit_transform([c1,c2,c3])
      
print(count.get_feature_names())
      
print(data.toarray())
      
return None

'''
   計(jì)算詞的重要性
 '''
   def tfidvec():
     c1, c2, c3 = cutwords()
     tv = TfidfVectorizer()
     data = tv.fit_transform([c1,c2,c3])
     print(tv.get_feature_names())
     print(data.toarray())
     return None

 

5.    特征預(yù)處理

5.1. 歸一化

歸一化方法有兩種形式,一種是把數(shù)變?yōu)椋?/span>0,1)之間的小數(shù),一種是把有量綱表達(dá)式變?yōu)闊o(wú)量綱表達(dá)式。主要是為了數(shù)據(jù)處理方便提出來(lái)的,把數(shù)據(jù)映射到01范圍之內(nèi)處理,更加便捷快速,應(yīng)該歸到數(shù)字信號(hào)處理范疇之內(nèi)。

min-max標(biāo)準(zhǔn)化(Min-max normalization)/0-1標(biāo)準(zhǔn)化(0-1 normalization)

也叫離差標(biāo)準(zhǔn)化,是對(duì)原始數(shù)據(jù)的線性變換,使結(jié)果落到[0,1]區(qū)間,轉(zhuǎn)換函數(shù)如下:

圖片.png

注:作用于每一列,max為一列的較大值,min為一列的最小值,那么X’’為最終結(jié)果,mx,mi分別為指定區(qū)間值默認(rèn)mx1,mi0

from sklearn.preprocessing import MinMaxScaler,
'''
  歸一化的處理
'''
  def mm():
    mm = MinMaxScaler();
    data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
    print(data)
    return None

 

5.2. 標(biāo)準(zhǔn)化

通過(guò)對(duì)原始數(shù)據(jù)進(jìn)行變換把數(shù)據(jù)變換到均值為0,標(biāo)準(zhǔn)差為1范圍內(nèi)

圖片.png

from sklearn.preprocessing import StandardScaler
'''
  標(biāo)準(zhǔn)化的處理
'''
  def std():
    std = StandardScaler()
    data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
    print("原始數(shù)據(jù)平均值:",std.mean_)
    print("原始數(shù)據(jù)每列特征的方差:",std.var_)
    print(data)
    return None

5.3. 缺失值處理

對(duì)于缺失特征可以修改成新的特征,也可以刪除,常用有:

1)刪除:最簡(jiǎn)單的方法是刪除,刪除屬性或者刪除樣本。如果大部分樣本該屬性都缺失,這個(gè)屬性能提供的信息有限,可以選擇放棄使用該維屬性;如果一個(gè)樣本大部分屬性缺失,可以選擇放棄該樣本。雖然這種方法簡(jiǎn)單,但只適用于數(shù)據(jù)集中缺失較少的情況。

2 統(tǒng)計(jì)填充:對(duì)于缺失值的屬性,尤其是數(shù)值類型的屬性,根據(jù)所有樣本關(guān)于這維屬性的統(tǒng)計(jì)值對(duì)其進(jìn)行填充,如使用平均數(shù)、中位數(shù)、眾數(shù)、較大值、最小值等,具體選擇哪種統(tǒng)計(jì)值需要具體問(wèn)題具體分析。另外,如果有可用類別信息,還可以進(jìn)行類內(nèi)統(tǒng)計(jì),比如身高,男性和女性的統(tǒng)計(jì)填充應(yīng)該是不同的。

3 統(tǒng)一填充:對(duì)于含缺失值的屬性,把所有缺失值統(tǒng)一填充為自定義值,如何選擇自定義值也需要具體問(wèn)題具體分析。當(dāng)然,如果有可用類別信息,也可以為不同類別分別進(jìn)行統(tǒng)一填充。常用的統(tǒng)一填充值有:“空”、“0”、“正無(wú)窮”、“負(fù)無(wú)窮”等。

4 預(yù)測(cè)填充:我們可以通過(guò)預(yù)測(cè)模型利用不存在缺失值的屬性來(lái)預(yù)測(cè)缺失值,也就是先用預(yù)測(cè)模型把數(shù)據(jù)填充后再做進(jìn)一步的工作,如統(tǒng)計(jì)、學(xué)習(xí)等。雖然這種方法比較復(fù)雜,但是最后得到的結(jié)果比較好。

from sklearn.preprocessing import Imputer
import numpy as np
'''
  缺失值處理
'''
  def im():
    im = Imputer(missing_values="NaN", strategy="mean",axis=0)
    data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
    print(data)
    return None

 

5.4. 對(duì)時(shí)間戳數(shù)據(jù)

很多任務(wù)與時(shí)間維度有關(guān)系,比如用電量等,此時(shí)要將時(shí)間戳數(shù)據(jù)轉(zhuǎn)換為時(shí)間特征。常見(jiàn)的轉(zhuǎn)換有:

1day of weak(一周的星期幾)、day of month、day of year、week of year、month of yearhour of day、minute of day 、哪個(gè)季度。

2t_m24(前一天的數(shù)值)、t_m48(前兩天的數(shù)值)等。

3tdif(與親一天的數(shù)值的差值)等。

5.5. 特征選擇

當(dāng)數(shù)據(jù)預(yù)處理完成后,我們需要選擇有意義的特征輸入機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練。原始的特征可能有冗余(兩個(gè)特征說(shuō)的是一個(gè)問(wèn)題,相關(guān)性太強(qiáng))、噪聲(會(huì)影響問(wèn)題的效果)。通常來(lái)說(shuō),從兩個(gè)方面考慮來(lái)選擇特征:

特征是否發(fā)散:如果一個(gè)特征不發(fā)散,例如方差接近于0,也就是說(shuō)樣本在這個(gè)特征上基本上沒(méi)有差異,這個(gè)特征對(duì)于樣本的區(qū)分并沒(méi)有什么用。

特征與目標(biāo)的相關(guān)性:這點(diǎn)比較顯見(jiàn),與目標(biāo)相關(guān)性高的特征,應(yīng)當(dāng)優(yōu)選選擇。除方差法外,本文介紹的其他方法均從相關(guān)性考慮。

1,filter(過(guò)濾法):方法:評(píng)估單個(gè)特征和結(jié)果值之間的相關(guān)程度, 排序留下Top相關(guān)的特征部分。 評(píng)價(jià)方式: Pearson相關(guān)系數(shù), 互信息, 距離相關(guān)度。 缺點(diǎn):只評(píng)估了單個(gè)特征對(duì)結(jié)果的影響,沒(méi)有考慮到特征之間的關(guān)聯(lián)作用, 可能把有用的關(guān)聯(lián)特征誤踢掉。因此工業(yè)界使用比較少。

1)方差選擇:計(jì)算各個(gè)特征的方差,然后根據(jù)閾值,選擇方差大于閾值的特征。使用feature_selection庫(kù)的VarianceThreshold類。

2)相關(guān)系數(shù)法:計(jì)算各個(gè)特征對(duì)目標(biāo)值的相關(guān)系數(shù)以及相關(guān)系數(shù)的P值。用feature_selection庫(kù)的SelectKBest類結(jié)合相關(guān)系數(shù)來(lái)選擇。

(卡方檢驗(yàn)是檢驗(yàn)定性自變量對(duì)定性因變量的相關(guān)性,互信息是評(píng)價(jià)定性自變量對(duì)定性因變量的相關(guān)性,可以用這兩個(gè)值和SelectKBest類來(lái)選擇)

2wrapper(包裹法): 方法:把特征選擇看做一個(gè)特征子集搜索問(wèn)題, 篩選各種特 征子集, 用模型評(píng)估子集特征的效果。 典型算法:“遞歸特征刪除算法”,應(yīng)用在邏輯回歸的過(guò)程:

a.用全量特征跑一個(gè)模型;

b.根據(jù)線性模型的系數(shù)(體現(xiàn)相關(guān)性),刪掉5-10%的弱特征,觀察準(zhǔn)確率/auc的變化;

c.逐步進(jìn)行, 直至準(zhǔn)確率/auc出現(xiàn)大的下滑停止。

python中是RFE類)

3,嵌入法: 方法:根據(jù)模型來(lái)分析特征的重要性,最常見(jiàn)的方式為用正則化方式來(lái)做特征選擇。(這種方式在工業(yè)界很常用)

1)基于懲罰項(xiàng)的方法:就是用L1,L2正則化來(lái)做特征選擇。L1正則有截?cái)嘈?yīng):不重要的特征的參數(shù)權(quán)重為0,L1正則方法具有稀疏解的特性,因此天然具備特征選擇的特性,但是要注意,L1沒(méi)有選到的特征不代表不重要,原因是兩個(gè)具有高相關(guān)性的特征可能只保留了一個(gè),如果要確定哪個(gè)特征重要應(yīng)再通過(guò)L2正則方法交叉檢驗(yàn);;L2正則有縮放效應(yīng):拿到手的特征都比較小。SelectFromModel類來(lái)解決。

2)基于樹(shù)模型的特征選擇法:樹(shù)模型中GBDT也可用來(lái)作為基模型進(jìn)行特征選擇,使用feature_selection庫(kù)的SelectFromModel類結(jié)合GBDT模型。

from sklearn.feature_selection import VarianceThreshold
'''
  利用方差作特征選擇
'''
  def vt():
    vt = VarianceThreshold(threshold=0)
    data = vt.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
    print(data)
    return None

5.6. 特征降維

當(dāng)特征選擇完成后,可以直接訓(xùn)練模型了,但是可能由于特征矩陣過(guò)大,導(dǎo)致計(jì)算量大,訓(xùn)練時(shí)間長(zhǎng)的問(wèn)題,因此降低特征矩陣維度也是必不可少的。常見(jiàn)的降維方法除了以上提到的基于L1懲罰項(xiàng)的模型以外,另外還有主成分分析法(PCA)和線性判別分析(LDA),線性判別分析本身也是一個(gè)分類模型。PCALDA有很多的相似點(diǎn),其本質(zhì)是要將原始的樣本映射到維度更低的樣本空間中,但是PCALDA的映射目標(biāo)不一樣: PCA是為了讓映射后的樣本具有較大的發(fā)散性;而LDA是為了讓映射后的樣本有最好的分類性能。所以說(shuō)PCA是一種無(wú)監(jiān)督的降維方法,而LDA是一種有監(jiān)督的降維方法。PCALDA降維原理涉及到大量的數(shù)學(xué)推導(dǎo)過(guò)程,請(qǐng)自行查閱相關(guān)文檔

from sklearn.decomposition import PCA
'''
pca降維
'''
  def pca():
    pca = PCA()
    data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
    print(data)
    return None

 

上一篇: 思科認(rèn)證更新常見(jiàn)問(wèn)題FAQ

下一篇: 大數(shù)據(jù)培訓(xùn)_Flume海量日志采集快速入門

在線咨詢 ×

您好,請(qǐng)問(wèn)有什么可以幫您?我們將竭誠(chéng)提供最優(yōu)質(zhì)服務(wù)!