zoukankan      html  css  js  c++  java
  • 特征抽取: 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']
  • 相关阅读:
    03-串联
    大数据项目之电商数仓(3电商数据仓库系统)V6.1.3
    JQuery实现tab页
    Java面试题之计算字符/字符串出现的次数
    ios 苹果内购订单验证 --- nodejs实现
    ios 苹果内购订单验证 --- php实现
    Android内购订单验证 --- nodejs实现
    Android内购订单验证 --- php实现
    Google Compute Engine VM自动调节
    php性能优化 --- laravel 性能优化
  • 原文地址:https://www.cnblogs.com/hufulinblog/p/10591339.html
Copyright © 2011-2022 走看看