机器学习:特征工程字典特征和文本特征抽取

简介: 机器学习:特征工程字典特征和文本特征抽取

1、数据集

mysql 性能瓶颈,读取速度

pandas 读取工具

numpy释放GIL

cpython 协程

sklearn

2、数据集结构

特征值 + 目标值

3、机器学习

重复值 不需要进行去重

缺失值 特殊处理

4、特征工程定义

将原始数据转换为更好代表预测模型的潜在问题的特征的过程,从而提高对未知数据的预测准确性

5、词汇

classification 分类

regression 回归

clustering 聚类

dimensionality reduction 降维

model selection 模型选择

preprocessing 特征工程

6、特征抽取

特征值化,让计算机更好的理解数据

文本 -> 数字

安装用到的库

pip install jieba scikit-learn numpy

6.1、字典特征抽取

把文本转换为数值

sparse矩阵,节约内存

ndarray 数组

One-hot编码 布尔值标记特征

代码示例

import numpy as np
from sklearn.feature_extraction import DictVectorizer
# 字典特征抽取
data = [
    {"city": "北京", "price": 2000},
    {"city": "上海", "price": 1500},
    {"city": "深圳", "price": 1000},
]
dict_vectorizer = DictVectorizer(dtype=np.int32, sparse=False)
result = dict_vectorizer.fit_transform(data)
print(dict_vectorizer.get_feature_names())
print(dict_vectorizer.inverse_transform(result))
print(result)
"""
['city=上海', 'city=北京', 'city=深圳', 'price']
[
    {'city=北京': 1, 'price': 2000}, 
    {'city=上海': 1, 'price': 1500}, 
    {'city=深圳': 1, 'price': 1000}
]
sparse = True 
(0, 1)  1.0
(0, 3)  2000.0
(1, 0)  1.0
(1, 3)  1500.0
(2, 2)  1.0
(2, 3)  1000.0
sparse = False    
[
    [   0    1    0 2000]
    [   1    0    0 1500]
    [   0    0    1 1000]
]
"""

6.2、文本特征抽取

Count 单词列表+出现次数统计

文本分类,情感分析

对单个字母不统计

代码示例

import logging
import jieba
from sklearn.feature_extraction.text import CountVectorizer
jieba.setLogLevel(logging.INFO)
def count_vector():
    """
    文本特征提取
    """
    words = [
        "今天的天气很好",
        "明天我要去逛街",
        "后天天气好我还去好天气逛街"
    ]
    data = []
    for word in words:
        word_cut = jieba.cut(word)
        data.append(" ".join(word_cut))
    print(data)
    cv = CountVectorizer()
    result = cv.fit_transform(data)
    print(cv.get_feature_names())
    print(result.toarray())
    """
    [
        '今天 的 天气 很 好', 
        '明天 我要 去 逛街', 
        '后天 天气 好 我 还 去 好 天气 逛街'
    ]
    ['今天', '后天', '天气', '我要', '明天', '逛街']
    [[1 0 1 0 0 0]
     [0 0 0 1 1 1]
     [0 1 2 0 0 1]]
    """

6.3、TF-IDF(词频-逆文档频率)

评估词的重要程度

思想:

如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类

tf: term frequency 词的频率 出现次数

idf: inverse document frequency 逆文档频率

image.png

说明:

n 文档中某个词的个数

N 文档总次数

D 文档总数

d 包含某个词的文档数

参考:https://baike.baidu.com/item/tf-idf/8816134?fr=aladdin

log(总文档数量N/该词出现的文档数量n)

log输入的值越小,输出值也越小

朴素贝叶斯

N >= n > 0

=> N/n >= 1

=> log定义域[1, 无穷)

=> 映射log值域[0, 1)

=> N固定 n 越大 -> N/n越小 -> log(N/n)越小


=> 单个文档中词频越高 tf越大

=> 出现文档越多 idf越小

=> 单个文档出现次数越多,出现文档数越少,重要程度越大

举例

# -*- coding: utf-8 -*-
from sklearn.feature_extraction.text import TfidfVectorizer
data = [
    "今天 天气 逛街",
    "明天 天气 逛街",
    "后天 天气 吃饭"
]
tf = TfidfVectorizer()
result = tf.fit_transform(data)
print(tf.get_feature_names())
print(result.toarray())
"""
    ['今天', '吃饭', '后天', '天气', '明天', '逛街']
[
    [0.72033345 0.         0.         0.42544054 0.         0.54783215]
    [0.         0.         0.         0.42544054 0.72033345 0.54783215]
    [0.         0.65249088 0.65249088 0.38537163 0.         0.        ]
]
"""

可以看到:

 "今天 天气 逛街", 今天 tf-idf值最大 0.72033345
 "明天 天气 逛街", 明天 tf-idf值最大 0.72033345
 "后天 天气 吃饭"  后天 和 吃饭 tf-idf值最大 0.65249088

代码示例

import logging
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
jieba.setLogLevel(logging.INFO)
def tfidf_vector():
    words = [
        "今天的天气很好",
        "明天我要去逛街",
        "后天天气好我还去好天气逛街"
    ]
    data = []
    for word in words:
        word_cut = jieba.cut(word)
        data.append(" ".join(word_cut))
    print(data)
    tf = TfidfVectorizer()
    result = tf.fit_transform(data)
    print(tf.get_feature_names())
    print(result.toarray())
    """
    去除单个字的词
    [
        '今天 天气', 
        '明天 我要 逛街', 
        '后天 天气 天气 逛街'
    ]
    ['今天', '后天', '天气', '我要', '明天', '逛街']
    [
        [0.79596054 0.         0.60534851 0.         0.         0.        ]
        [0.         0.         0.         0.62276601 0.62276601 0.4736296 ]
        [0.         0.50689001 0.77100584 0.         0.         0.38550292]
    ]
    """


相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 搜索推荐
【机器学习】揭秘!机器学习如何助力我们高效优化文本?
【机器学习】揭秘!机器学习如何助力我们高效优化文本?
31 3
|
1月前
|
机器学习/深度学习 自然语言处理 搜索推荐
【机器学习】揭秘!机器学习如何助力我们高效优化文本?
【机器学习】揭秘!机器学习如何助力我们高效优化文本?
33 0
|
4天前
|
机器学习/深度学习 数据采集 算法
探索机器学习中的特征工程
【5月更文挑战第10天】 在机器学习领域,特征工程扮演着至关重要的角色。它涉及选择、修改和创造从原始数据中提取的特征,旨在提高模型的性能。本文将深入探讨特征工程的多个方面,包括数据清洗、特征选择、维度缩减以及特征编码等,同时提供实用的技巧和策略,帮助读者构建出更有效的机器学习模型。
|
16天前
|
机器学习/深度学习 人工智能 并行计算
人工智能平台PAI产品使用合集之机器学习PAI中特征重要性的原理不知道如何解决
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
16天前
|
机器学习/深度学习 存储 人工智能
人工智能平台PAI产品使用合集之如何通过通用文本标记解决方案文档与PAI机器学习平台一起使用
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
4天前
|
机器学习/深度学习 算法
【机器学习】如何使用朴素贝叶斯分类器来处理类别特征?
【5月更文挑战第10天】【机器学习】如何使用朴素贝叶斯分类器来处理类别特征?
|
11天前
|
机器学习/深度学习 数据采集 搜索推荐
机器学习中的特征工程:提升模型性能的关键步骤
【5月更文挑战第3天】特征工程是提升机器学习模型性能的关键,涉及从原始数据中提取、选择和创造特征。它能提高模型预测准确率,简化模型复杂度,增强泛化能力。常用技术包括特征选择(Filter、Wrapper、Embedded方法)、特征构造(组合、多项式、文本特征提取)和特征变换(标准化、归一化、离散化)。通过优化特征工程,可找到最佳特征组合,提升模型性能。
|
14天前
|
机器学习/深度学习 Python
【Python机器学习专栏】时间序列数据的特征工程
【4月更文挑战第30天】本文探讨了时间序列数据的特征工程,强调其在捕捉季节性、揭示趋势、处理异常值和提升模型性能中的重要性。介绍了滞后特征、移动窗口统计特征、时间戳特征、频域特征和波动率特征等方法,并提供了Python实现示例。通过有效特征工程,可提高时间序列分析的准确性和预测可靠性。
|
14天前
|
机器学习/深度学习 自然语言处理 算法
【Python机器学习专栏】文本数据的特征提取与表示
【4月更文挑战第30天】本文探讨了文本特征提取与表示在机器学习和NLP中的重要性。介绍了词袋模型、TF-IDF和n-gram等特征提取方法,以及稀疏向量和词嵌入等表示方式。Python中可利用sklearn和gensim库实现这些技术。有效的特征提取与表示有助于将文本数据转化为可处理的数值形式,推动NLP和机器学习领域的进步。
|
14天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python 机器学习专栏】特征工程在机器学习中的重要性
【4月更文挑战第30天】特征工程是机器学习的关键,涉及数据转换为有意义特征的过程,对模型性能、数据理解、泛化能力和计算效率至关重要。其技术包括特征提取、选择和构建,以及归一化。Python的Pandas、Scikit-learn等工具为特征工程提供支持。面对数据复杂性、相关性和动态性挑战,需灵活应对。通过案例分析展示了特征工程如何提升模型性能,强调了其在构建高效机器学习模型中的作用。