自慰套教室~女子全员妊娠,精品无码国产自产拍在线观看蜜桃,亚洲国产精品成人精品无码区,久别的草原在线看视频免费

集團站切換校區

驗證碼已發送,請查收短信

復制成功
微信號:togogoi
添加微信好友, 詳細了解課程
已復制成功,如果自動跳轉微信失敗,請前往微信添加好友
打開微信
圖標

業界新聞

當前位置:首頁 > >業界新聞 > >

人工智能AI培訓_機器學習之特征工程

發布時間: 2019-09-19 10:12:28

  人工智能AI培訓_機器學習之特征工程

  1.    特征工程概覽

特征是數據中抽取出來的對結果預測有用的信息,可以是文本或者數據。特征工程是使用專業背景知識和技巧處理數據,使得特征能在機器學習算法上發揮更好的作用的過程。過程包含了特征抽取、特征預處理、特征選擇等過程。

2.    sklearn

sklearn是機器學習中一個常用的python第三方模塊,網址:http://scikit-learn.org/stable/index.html ,里面對一些常用的機器學習方法進行了封裝,在進行機器學習任務時,并不需要每個人都實現所有的算法,只需要簡單的調用sklearn里的模塊就可以實現大多數機器學習任務。

機器學習任務通常包括特征工程、分類(Classification)和回歸(Regression),常用的分類器包括SVM、KNN、貝葉斯、線性回歸、邏輯回歸、決策樹、隨機森林、xgboost、GBDT、boosting、神經網絡NN。

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

       以下特征工程使用sklearn來實現

3.    數據的準備過程

數據準備包括數據采集、清洗、采樣

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

哪些數據對最后的結果預測有幫助?

數據我們能夠采集到嗎?

線上實時計算的時候獲取是否快捷?

 

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

偏差檢測:聚類、最近鄰等

基于統計的異常點檢測:例如極差,四分位數間距,均差,標準差等,這種方法適合于挖掘單變量的數值型數據。全距(Range),又稱極差,是用來表示統計資料中的變異量數(measures of variation) ,其較大值與最小值之間的差距;四分位距通常是用來構建箱形圖,以及對概率分布的簡要圖表概述。

基于距離的異常點檢測:主要通過距離方法來檢測異常點,將數據集中與大多數點之間距離大于某個閾值的點視為異常點,主要使用的距離度量方法有絕對距離 ( 曼哈頓距離 ) 、歐氏距離和馬氏距離等方法。

基于密度的異常點檢測:考察當前點周圍密度,可以發現局部異常點,例如LOF算法

 

3,數據采樣:采集、清洗過數據以后,正負樣本是不均衡的,要進行數據采樣。采樣的方法有隨機采樣和分層抽樣。但是隨機采樣會有隱患,因為可能某次隨機采樣得到的數據很不均勻,更多的是根據特征采用分層抽樣。

4.    特征抽取

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

4.1. 類別型數據特征抽取

對于類別型數據不能用數值表示。(比如顏色{紅、綠、藍},數字1、2、3可以表示,但是顏色本身沒有數學關系,這會誤導我們的數學模型)。常用的方法是熱編碼-(one-hot方法)(OneHotEncoder類)

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

    對于那些零元素數目遠遠多于非零元素數目,并且

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

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

只存儲非零元素的方法來進行壓縮存儲。對于一個用二維數組

存儲的稀疏矩陣Amn,如果假設存儲每個數組元素需要L個字節,

那么存儲整個矩陣需要m*n*L個字節。但是,這些存儲空間的

大部分存放的是0元素,從而造成大量的空間浪費。為了節省

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

    另外對于很多元素為零的稀疏矩陣,僅存儲非零元素可使矩

陣操作效率更高。也就是稀疏矩陣的計算速度更快,因為只對

非零元素進行操作,這是稀疏矩陣的一個突出的優點。

    Python不能自動創建稀疏矩陣,所以要用scipy中特殊的命令來得到稀疏矩陣。
 
    :return:
    '''
    #實體化DictVectorizer對象
    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. 文本數據特征抽取

1)詞袋:本數據預處理后,去掉停用詞,剩下的詞組成的list,在詞庫中的映射稀疏向量。Python中用CountVectorizer處理詞袋。 也就是考慮某個詞在當前訓練樣本中出現的頻率。

 

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

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

'''
   計算詞的重要性
 '''
   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.    特征預處理

5.1. 歸一化

歸一化方法有兩種形式,一種是把數變為(0,1)之間的小數,一種是把有量綱表達式變為無量綱表達式。主要是為了數據處理方便提出來的,把數據映射到01范圍之內處理,更加便捷快速,應該歸到數字信號處理范疇之內。

min-max標準化(Min-max normalization)/0-1標準化(0-1 normalization)

也叫離差標準化,是對原始數據的線性變換,使結果落到[0,1]區間,轉換函數如下:

圖片.png

注:作用于每一列,max為一列的較大值,min為一列的最小值,那么X’’為最終結果,mx,mi分別為指定區間值默認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. 標準化

通過對原始數據進行變換把數據變換到均值為0,標準差為1范圍內

圖片.png

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

5.3. 缺失值處理

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

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

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

3 統一填充:對于含缺失值的屬性,把所有缺失值統一填充為自定義值,如何選擇自定義值也需要具體問題具體分析。當然,如果有可用類別信息,也可以為不同類別分別進行統一填充。常用的統一填充值有:“空”、“0”、“正無窮”、“負無窮”等。

4 預測填充:我們可以通過預測模型利用不存在缺失值的屬性來預測缺失值,也就是先用預測模型把數據填充后再做進一步的工作,如統計、學習等。雖然這種方法比較復雜,但是最后得到的結果比較好。

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. 對時間戳數據

很多任務與時間維度有關系,比如用電量等,此時要將時間戳數據轉換為時間特征。常見的轉換有:

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

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

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

5.5. 特征選擇

當數據預處理完成后,我們需要選擇有意義的特征輸入機器學習的算法和模型進行訓練。原始的特征可能有冗余(兩個特征說的是一個問題,相關性太強)、噪聲(會影響問題的效果)。通常來說,從兩個方面考慮來選擇特征:

特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什么用。

特征與目標的相關性:這點比較顯見,與目標相關性高的特征,應當優選選擇。除方差法外,本文介紹的其他方法均從相關性考慮。

1,filter(過濾法):方法:評估單個特征和結果值之間的相關程度, 排序留下Top相關的特征部分。 評價方式: Pearson相關系數, 互信息, 距離相關度。 缺點:只評估了單個特征對結果的影響,沒有考慮到特征之間的關聯作用, 可能把有用的關聯特征誤踢掉。因此工業界使用比較少。

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

2)相關系數法:計算各個特征對目標值的相關系數以及相關系數的P值。用feature_selection庫的SelectKBest類結合相關系數來選擇。

(卡方檢驗是檢驗定性自變量對定性因變量的相關性,互信息是評價定性自變量對定性因變量的相關性,可以用這兩個值和SelectKBest類來選擇)

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

a.用全量特征跑一個模型;

b.根據線性模型的系數(體現相關性),刪掉5-10%的弱特征,觀察準確率/auc的變化;

c.逐步進行, 直至準確率/auc出現大的下滑停止。

python中是RFE類)

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

1)基于懲罰項的方法:就是用L1,L2正則化來做特征選擇。L1正則有截斷效應:不重要的特征的參數權重為0,L1正則方法具有稀疏解的特性,因此天然具備特征選擇的特性,但是要注意,L1沒有選到的特征不代表不重要,原因是兩個具有高相關性的特征可能只保留了一個,如果要確定哪個特征重要應再通過L2正則方法交叉檢驗;;L2正則有縮放效應:拿到手的特征都比較小。SelectFromModel類來解決。

2)基于樹模型的特征選擇法:樹模型中GBDT也可用來作為基模型進行特征選擇,使用feature_selection庫的SelectFromModel類結合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. 特征降維

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

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

 

上一篇: 思科認證更新常見問題FAQ

下一篇: 大數據培訓_Flume海量日志采集快速入門

在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優質服務!

<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>