特征抽取: sklearn.feature_extraction.DictVectorizer


sklearn.featture_extraction.DictVectorizer:
  將特征與值的映射字典組成的列表轉換成向量。
  DictVectorizer通過使用scikit-learn的estimators,將特征名稱與特征值組成的映射字典構成的列表轉換成Numpy數組或者Scipy.sparse矩陣。
  當特征的值是字符串時,這個轉換器將進行一個二進制One-hot編碼。One-hot編碼是將特征所有可能的字符串值構造成布爾型值。例如: 特征f有一個值ham,一個值spam,轉換后會變成兩個特征f=ham和f=spam。
  注意,轉換器只會將字符串形式的特征值轉換成One-hot編碼,數值型的不會轉換。
  一個字典中樣本沒有的特征在結果矩陣中的值是0.

構造參數:
  class sklearn.feature_extraction.DictVectorizer(dtype=<class‘numpy.float64’>, separator=’=’, sparse=True, sort=True)

  dtype:callable, 可選參數, 默認為float。特征值的類型,傳遞給Numpy.array或者Scipy.sparse矩陣構造器作為dtype參數。
  separator: string, 可選參數, 默認為"="。當構造One-hot編碼的特征值時要使用的分割字符串。分割傳入字典數據的鍵與值的字符串,生成的字符串會作為特征矩陣的列名。
  sparse: boolearn, 可選參數,默認為True。transform是否要使用scipy產生一個sparse矩陣。DictVectorizer的內部實現是將數據直接轉換成sparse矩陣,如果sparse為False, 再把sparse矩陣轉換成numpy.ndarray型數組。
  sort:boolearn,可選參數,默認為True。在擬合時是否要多feature_names和vocabulary_進行排序。

屬性:
  vocabulary_: 特征名稱和特征列索引的映射字典。
  feature_names_: 一個包含所有特征名稱的,長度為特征名稱個數的列表。
方法:
  fit(X,y=None): 計算出轉換結果中feature name與 列索引之間的對照字典vocabulary_,同時會計算出特征名稱列表 feature_names_。這里的參數y沒有任何作用。
  fit_transform(X,y=None): 包含fit函數的功能,並且會將X轉換成矩陣。
  get_feature_names(): 返回feature_names_
  get_params(deep=True): 返回當前DictVectorizer對象的構造參數。
  inverse_transform(X[,dict_type]): 將矩陣還原成特征字典列表。還原出來的字典跟原數據並不是完全一樣。傳入的X必須是這個DictVectorizer經過transform或者fit_transform產生的X。
  restrict(support, indicies=False): 根據傳入的support參數,對特征矩陣進行篩選。
  set_params(**params): 設置DictVectorizer的參數
  transform(X): 將X轉換為numpy.ndarray或者Scipy.sparse

   

使用樣例:

    from sklearn.feature_extraction import DictVectorizer
 
    # 設置sparse=False獲得numpy ndarray形式的結果
    v = DictVectorizer(sparse=False)
    D = [{"foo": 1, "bar": 2}, {"foo": 3, "baz": 1}]
 
    # 對字典列表D進行轉換,轉換成特征矩陣
    X = v.fit_transform(D)
    # 特征矩陣的行代表數據,列代表特征,0表示該數據沒有該特征
    print(X)
    # 獲取特征列名
    print(v.get_feature_names())
 
    # inverse_transform可以將特征矩陣還原成原始數據
    print(v.inverse_transform(X) == D)
 
    # 直接進行轉換,不先進行擬合的話,無法識別新的特征
    print(v.transform([{"foo": 4, "unseen_feature": 3}]))

 

輸出:

[[2. 0. 1.]
 [0. 1. 3.]]
['bar', 'baz', 'foo']
True
[[0. 0. 4.]]

 

配合特征選擇:

    from sklearn.feature_selection import SelectKBest, chi2
    # 得到一個篩選器,使用卡方統計篩選出最好的2個特征
    support = SelectKBest(chi2, k=2).fit(X, [0, 1])
 
    # 進行篩選,篩選的結果會自動覆蓋原有的特征矩陣
    print(v.restrict(support.get_support()))
    print(v.get_feature_names())

 

輸出:

DictVectorizer(dtype=<class 'numpy.float64'>, separator='=', sort=True,
        sparse=False)
['bar', 'foo']

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM