目录
特征工程
一、特征提取
1、字典特征提取
2、文本特征提取
2.1 英文文本提取
2.2 中文文本提取
3、TF-IDF文本特征词的重要程度特征提取
二、无量纲化-预处理
1 MinMaxScaler 归一化
2 normalize归一化
3 StandardScaler 标准化
三、特征降维
1、特征选择
1.1 VarianceThreshold 低方差过滤特征选择
1.2 主成份分析(PCA)
特征工程
就是对特征进行相关的处理,一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程。特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征。
步骤:特征提取(dataframe类型不用)---- 无量纲化(预处理)---- 降维
API:
DictVectorizer 字典特征提取
CountVectorizer 文本特征提取
TfidfVectorizer TF-IDF文本特征词的重要程度特征提取
MinMaxScaler 归一化
StandardScaler 标准化
VarianceThreshold 底方差过滤降维
PCA 主成分分析降维
一、特征提取
1、字典特征提取
稀疏矩阵:一个矩阵中大部分元素为零,只有少数元素是非零的矩阵。由于稀疏矩阵中零元素非常多,存储和处理稀疏矩阵时,通常会采用特殊的存储格式,以节省内存空间并提高计算效率
三元组表:一种稀疏矩阵类型数据,存储非零元素的行索引、列索引和值:(行,列)值
非稀疏矩阵(稠密矩阵):是指矩阵中非零元素的数量与总元素数量相比接近或相等,也就是说矩阵中的大部分元素都是非零的。通常采用二维数组形式存储
from sklearn.feature_extraction import DictVectorizer
示例:
(稀疏矩阵对象调用toarray()函数, 得到类型为ndarray的二维稀疏矩阵 )
2、文本特征提取
from sklearn.feature_extraction.text import CountVectorizer
构造函数关键字参数stop_words,值为list,表示词的黑名单(不提取的词) fit_transform函数的返回值为稀疏矩阵
2.1 英文文本提取
2.2 中文文本提取
中文文本不像英文文本,中文文本文字之间没有空格,所以要先分词,一般使用jieba分词
# 下载jieba组件
pip install jieba
示例:
3、TF-IDF文本特征词的重要程度特征提取
from sklearn.feature_extraction.text import TfidfVectorizer
词频(Term Frequency, TF), 表示一个词在当前篇文章中的重要性
逆文档频率(Inverse Document Frequency, IDF), 反映了词在整个文档集合中的稀有程度
逆文档频率衡量一个词的普遍重要性。如果一个词在许多文档中都出现,那么它的重要性就会降低。
代码与CountVectorizer的示例基本相同,仅仅把CountVectorizer改为TfidfVectorizer即可,继续上面中文文本提取的示例修改(把三段文字分别看成三份文档)
(这里方便对比数据,用的pandas做了个表)
根据输出结果可以看到,明明 “喜欢” 出现次数最多,反而在每一篇的重要性偏低,这是为什么?
这里要注意,TF-IDF 的核心假设:一个词如果在很多文档都出现,那它对区分文档就没有什么价值。IDF 的作用是抑制全局高频词的影响,以突出在某些文档中特有的、有区分度的词。
所以,“喜欢” 在每一份文档中都出现了,它的重要性反而比较低,“小明” 只在第一篇中出现过,所以 “小明” 在第一篇中的重要性很高
由此可见,TF-IDF有着严重的局限性,一定要注意其符不符合使用场景,误伤高频关键词!!
二、无量纲化-预处理
无量纲,即没有单位的数据,无量纲化包括"归一化"和"标准化", 为什么要进行无量纲化呢?
是为了去掉单位影响,提取本质参数,让方程、数据或现象在数值计算和理论分析中更简单、更稳定、更有可比性
1 MinMaxScaler 归一化
from sklearn.preprocessing import MinMaxScaler
通过对原始数据进行变换把数据映射到指定区间(默认为0-1)
归一化公式是:
示例:
(缺点:最大值和最小值容易受到影响,所以鲁棒性较差,常使用标准化的无量纲化 )
2 normalize归一化
from sklearn.preprocessing import normalize
normalize(data, norm='l2', axis=1)
# data是要归一化的数据
# norm是使用那种归一化:"l1" "l2" "max"
# axis=0是列 axis=1是行
normalize 归一化主要指把数据按某种规则缩放到一个统一的尺度(常见是 0~1 或者向量长度为 1),以减少量纲和数值范围对计算的影响
L1:绝对值相加作为分母,,特征值作为分子
L2:平方相加作为分母,特征值作为分子
max:max作为分母,特征值作为分子
示例:
3 StandardScaler 标准化
from sklearn.preprocessing import StandardScale
在机器学习中,标准化是一种数据预处理技术,也称为数据归一化或特征缩放。它的目的是将不同特征的数值范围缩放到统一的标准范围,以便更好地适应一些机器学习算法,特别是那些对输入数据的尺度敏感的算法
这是标准化前后分布的对比图:左边是原始数据(均值 50,标准差 10),右边是 StandardScaler
标准化后(均值变成 0,标准差变成 1)。就是把左边的分布“平移+缩放”成右边的形状
三、特征降维
实际数据中,有时候特征很多,会增加计算量,降维就是去掉一些特征,或者转化多个特征为少量个特征,特征降维其目的:是减少数据集的维度,同时尽可能保留数据的重要信息。
1、特征选择
1.1 VarianceThreshold 低方差过滤特征选择
from sklearn.feature_selection import VarianceThreshold
如果一个特征的方差很小,说明这个特征的值在样本中几乎相同或变化不大,包含的信息量很少,模型很难通过该特征区分不同的对象
1.2 主成份分析(PCA)
from sklearn.decomposition import PCA
PCA(n_components=None)n_components:实参为小数时:表示降维后保留百分之多少的信息实参为整数时:表示减少到多少特征
PCA的核心目标是从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴上的投影能够最大程度地保留数据的方差,同时减少数据的维度