特征工程

sklearn特征抽取API

  • sklearn.feature_extraction

字典特征抽取

  • 把字典中一些类别数据分别进行转换成特征
  • 数组形式,有类别的这些特征先要转换字典数据
  • 作用:对字典数据进行特征值化
  • 类:sklearn.feature_extraction.DictVectorizer
  • 语法:
    • DictVertorizer(sparse=True,…)
      • DictVertorizer.fit_transform(X)
        • X:字典或者包含字典的迭代器
        • 返回值:返回sparse矩阵
      • DictVertorizer.inverse_transform(X)
        • X:array数组或者sparse矩阵
        • 返回值:转换之前数据格式
      • DictVertorizer.get_feature_names()
        • 返回类别名称
      • DictVertorizer.transform(X)
        • 按照原先的标准转换

文本特征抽取

  • 作用:对文本数据进行特征值化
  • 文本特征抽取:Count统计次数,对于单个英文字母不统计(没有分类的依据)
  • 类:sklern.feature_extraction.text.CountVertorizer
  • 语法:
    • CountVertorizer()
      • 返回词频矩阵
      • CountVertorizer.fit_transform(X)
        • X:文本或者包含文本字符串的可迭代对象
        • 返回值:返回sparse矩阵
      • CountVertorizer.inverse_transform(X)
        • X:array数组或者sparse矩阵
        • 返回值:转换之前数据格式
      • CountVertorizer.get_feature_names()
        • 返回值:单词列表
  • jieba分词工具库

特征抽取的方式

  • TF - IDF
    • 主要思想:如果某个词或短语在一篇文章中出现概率高,并且在其他文章中很少出现,则认为该词或者短语具有很好的类别区分能力,适合用来分类。
    • 作用:用以评估一个词对于一个文件集或者一个语料库中的其中一份文件的重要程度。
    • 类:sklearn.feature_extraction.text.TfidfVectorizer
    • tf:term frequency—>词的频率
    • idf:逆文档频率inverse document frequency
      • 公式:log(总文档数量/该词出现的文档数量)
      • log(数值):输入的数值越小,结果越小
      • tf*idf----->结果称为重要性程度
    • TfidfVectorizer语法
      • TfidfVectorizer(stop_words=None,…)
        • 返回词的权重矩阵
      • TfidfVectorizer.fit_transform(X)
        • X:文本或者包含文本字符串的可迭代对象
        • 返回值:返回parse矩阵
      • TfidfVectorizer.inverse_transform(X)
        • X:array数组或者sparse矩阵
        • 返回值:转换之前数据格式
      • TfidfVectorizer.get_feature_names()
        • 返回值:单词列表

字典特征抽取

from sklearn.feature_extraction import DictVectorizer


def dictvec():
    '''
    字典数据抽取
    :return: None
    '''
    # 实例化
    dict = DictVectorizer(sparse=False)

    # 调用fit_transform
    data = dict.fit_transform(
        [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}])

    print(dict.get_feature_names())
    print(dict.inverse_transform(data))
    print(data)

    return None


if __name__ == '__main__':
    dictvec()

数据特征抽取

# 特征抽取

from sklearn.feature_extraction.text import CountVectorizer

# 实例化CountVectorizer
vector = CountVectorizer()

# 调用fit_transform输入并转换数据
res = vector.fit_transform(['life is short,i like python', 'life is too long,i dislike python'])

# 打印结果
print(vector.get_feature_names())
print(res.toarray())

文本特征抽取


from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer


def countvec():
    '''
    文本数据特征抽取
    :return: None
    '''
    # 实例化
    cv = CountVectorizer()

    # 调用fit_transform
    # data = cv.fit_transform(['life is short,i like python', 'life is too long,i dislike python'])
    data = cv.fit_transform(["人生 苦短,我 喜欢 python", "人生漫长,不用 python"])
    print(cv.get_feature_names())  # 提取文渣中的单词,不重复,其实就相当于文章的特征
    # 对每篇文章,在词的列表里面进行统计每个词出现的次数,单个字母不统计

    print(data.toarray())  # toarray()方法将结果转换为数组形式
    return None


if __name__ == '__main__':
    countvec()

jieba分词

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import jieba


def cutword():
    con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")

    con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")

    con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")

    # 转换成列表
    content1 = list(con1)
    content2 = list(con2)
    content3 = list(con3)

    # 把列表转换成字符串
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)

    return c1, c2, c3


def hanzivec():
    """
    中文特征值化
    :return:
    """
    c1, c2, c3 = cutword()
    print(c1, c2, c3)

    cv = CountVectorizer()

    data = cv.fit_transform([c1, c2, c3])

    print(cv.get_feature_names())

    print(data.toarray())

    return None


def tfidfvec():
    """
    中文特征值化,tfidf
    :return:
    """
    c1, c2, c3 = cutword()
    print(c1, c2, c3)

    tf = TfidfVectorizer()

    data = tf.fit_transform([c1, c2, c3])

    print(tf.get_feature_names())

    print(data.toarray())

    return None


if __name__ == '__main__':
    tfidfvec()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值