机器学习——特征工程

利用Scikit-learn进行特征抽取

sklearn特征抽取API

sklearn.feature_extraction

字典特征抽取

  • 类:sklearn.feature_extraction.DictVectorizer

  • 作用:对字典数据进行特征值化

  • 语法:DictVectorizer(sparse=Ture,...)

    • DictVectorizer.fit_transform(X) X表示字典或包含字典的迭代器;返回sparse矩阵
    • DictVectorizer.inverse_transform(X) X表示array数组或sparse矩阵;返回原先的数据格式
    • DictVectorizer.get_feature_names() 返回类别名称
    • DictVectorizer.transform(X) 按照原先的标准转换

示例:

from sklearn.feature_extraction import DictVectorizer

def dictvec():
    '''
    字典数据抽取
    return : None
    '''
    # 实例化
    dict = DictVectorizer(sparse=True)
    
    # 调用fit_transform
    data = dict.fit_transform([{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}])
    
    print(data)
    
    print(dict.get_feature_names())
    return None


if __name__ == '__main__':
    dictvec()

输出:

  (0, 1)	1.0
  (0, 3)	100.0
  (1, 0)	1.0
  (1, 3)	60.0
  (2, 2)	1.0
  (2, 3)	30.0
['city=上海', 'city=北京', 'city=深圳', 'temperature']

文本特征抽取

  • 类:CountVectorizer()
  • 作用:返回词频矩阵
    • CountVectorizer.fit_transform(X)
      • X:文本或者包含文本字符串的可迭代对象
      • 返回值:返回sparse矩阵
    • CountVectorizer.inverse_transform(X)
      • X:array数组或者sparse矩阵
      • 返回值:转换之前的数据格式
    • CountVectorizer.get_feature_names()
      • 返回值:单词列表

示例:

'''
文本数据抽取
'''
from sklearn.feature_extraction.text import CountVectorizer

def countvec():
    # 实例化
    count = CountVectorizer()
    # 调用fit_transform
data = count.fit_transform(['life is short,I like python','life is too long, I dislike python'])

print(data)

print(count.get_feature_names())
return None

if __name__ == "__main__":
    countvec()

输出:

  (0, 2)	1
  (0, 1)	1
  (0, 6)	1
  (0, 3)	1
  (0, 5)	1
  (1, 2)	1
  (1, 1)	1
  (1, 5)	1
  (1, 7)	1
  (1, 4)	1
  (1, 0)	1
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

注意看输出结果,connt.fit_transfrom不会统计单个的字母(比如上文中的’I’)

注意:中文是不能自动进行分词的,所以如果要使用中文分词,则需要用jieba分词器(可用pip3 install jieba下载)

例如:

import jieba
jieba.cut('人生苦短,我用python')

返回值:词语生成器

文本特征分析中的tf和idf

在文本特征分析中,我们最终的目的往往是进行文本分类或情感分析。但有些词是所有文章都会常用的词(比如’我们’、‘所以’…)所以我们用tf和idf来排除这种干扰

  • tf:term frequency 词频
  • idf:inverse document frequency 逆文档频率
    • idf = log(总文档数量/该词出现的文档数)
  • 单词重要性 = tf * idf

我们可以通过词的重要性来进行文本分析和情感分析

语法:

  • 类:sklearn.feature_exctraction.text.TfidfVectorizer
    • 返回词的权重矩阵
    • TfidfVectorizer.fit_transform(X)
      • X:文本或包含文本字符的可迭代对象
      • 返回值:sparse矩阵
    • TfidfVectorizer.inverse_transform(X)
      • X:array数组或sparse矩阵
      • 返回值:转换为之前的格式
    • TfidfVectorizer.get_feature_names()
      • 返回值:单词列表
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐