xxdd123321

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

字典特征提取

  • 目的:我们所采集到样本中的特征数据往往很多时候为字符串或其它类型的数据,我们知道电脑可以识别二进制数值型的数据,如果把字符串给电脑,电脑是看不懂的,机器学习如果不是数值型数据,是识别不了的

  • from sklearn.feature_extraction.text import CountVectorizer

    vector = CountVectorizer()
    res = vector.fit_transform(['lift is short,i love python', 'lift is too long,i hate python'])
    print(res.toarray())

    [[0 1 1 0 1 1 1 0]
    [1 1 1 1 0 1 0 1]]

    Process finished with exit code 0
  • 特征抽取对文本等数据进行特征值话

字典特征提取

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

  • API:from sklearn.feature_extraction import DictVectorizer

    • fit_transform(x):x为字典过包含字典的迭代器,返回值为sparse矩阵

    • inverse_transform(x):x为sparse矩阵或array数组,返回值为转换之前的数据格式

    • transform(x):按照原先的转换标准

    • get_feature_names():返回类别名称

  • alist = [
      {'city': 'BeiJing', 'temp': 33},
      {'city': 'GZ', 'temp': 42},
      {'city': 'SH', 'temp': 40},
    ]
    # 实例化一个工具类对象
    d = DictVectorizer()
    # 返回的是一个sparse矩阵
    feature = d.fit_transform(alist)
    print(feature)
    print(d.inverse_transform(feature))

    print("============================================")

    # 实例化一个工具类对象
    d = DictVectorizer(sparse=False)
    # 返回的是一个二维列表
    feature = d.fit_transform(alist)
    print("输出为One_Hot编码:")
    print(feature)
    print(d.inverse_transform(feature))


    (0, 0) 1.0
     (0, 3) 33.0
    (1, 1) 1.0
     (1, 3) 42.0
    (2, 2) 1.0
     (2, 3) 40.0
    [{'city=BeiJing': 1.0, 'temp': 33.0}, {'city=GZ': 1.0, 'temp': 42.0}, {'city=SH': 1.0, 'temp': 40.0}]
    ============================================
    输出为One_Hot编码:
    [[ 1.  0.  0. 33.]
    [ 0.  1.  0. 42.]
    [ 0.  0.  1. 40.]]
    [{'city=BeiJing': 1.0, 'temp': 33.0}, {'city=GZ': 1.0, 'temp': 42.0}, {'city=SH': 1.0, 'temp': 40.0}]

    Process finished with exit code 0
  • 为什么需要onehot编码:

    特征抽取主要目的就是对非数值型的数据进行特征值化,如果对文本类进行手动特征值化为数字,如1和4.则1和4有优先级或权重大小之分会影响机器学习

文本特征提取

  • 作用:对文本数据进行特征值化

  • API:from sklearn.feature_extraction.text import CountVectorizer

  • fit_transform(x):x为文本或包含文本字符串的可迭代对象,返回sparse矩阵

  • inverse_transform(x):x为array数组或者sparse矩阵,返回转换之前的格式数据

  • 英文

  • vector = CountVectorizer()
    res = vector.fit_transform(['lift is short,i love python', 'lift is too long,i hate python'])
    print(res)  # sparse
    print(vector.get_feature_names())
    print(res.toarray())

    (0, 2) 1
     (0, 1) 1
    (0, 6) 1
     (0, 4) 1
    (0, 5) 1
     (1, 2) 1
    (1, 1) 1
     (1, 5) 1
    (1, 7) 1
     (1, 3) 1
    (1, 0) 1
    ['hate', 'is', 'lift', 'long', 'love', 'python', 'short', 'too']
    [[0 1 1 0 1 1 1 0]
    [1 1 1 1 0 1 0 1]]
    ============================================

    Process finished with exit code 0
  • 中文

  • 对有标点且有空格分隔的中文文本进行特征提取

  • res = vector.fit_transform(['人生苦短,我用python', '人生漫长,不用python'])
    # print(res) # sparse
    print(vector.get_feature_names())
    print(res.toarray())

    ['不用python', '人生漫长', '人生苦短', '我用python']
    [[0 0 1 1]
    [1 1 0 0]]
  • 目前CountVectorizer只可以对有标点符号和用分隔符的文本进行特征提取,显然这是满足不了我们日常需求的:

    • 因为在自然语言处理中,我们是需要将一段中文文本中相关的词语成语形容词等等都要进行抽取

  • jieba‘分词:

    • 对中文文章进行分词处理

    • pip install jieba

    • import jieba

  •  

  • res = vector.fit_transform(['人生苦短,我用python', '人生漫长,不用python'])
    # print(res) # sparse
    print(vector.get_feature_names())
    print(res.toarray())

    print("============================================")

    # jieba分词
    jb = jieba.cut('人生苦短,我用python,人生漫长,不用python')
    content = list(jb)
    print(content)
    ct = ' '.join(content)
    print(ct) # 返回空格区分的词语
    print("============================================")
    jieba_res = vector.fit_transform([ct])
    print(vector.get_feature_names())
    print(jieba_res.toarray())
    print("============================================")


    ['不用python', '人生漫长', '人生苦短', '我用python']
    [[0 0 1 1]
    [1 1 0 0]]
    ============================================
    ['人生', '苦短', ',', '我用', 'python', ',', '人生', '漫长', ',', '不用', 'python']
    人生 苦短 我用 python 人生 漫长 不用 python
    ============================================
    ['python', '不用', '人生', '我用', '漫长', '苦短']
    [[2 1 2 1 1 1]]
    ============================================
posted on   xxdd123321  阅读(338)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
 
点击右上角即可分享
微信分享提示