Python-机器学习(一)——特征工程

发布于:2025-08-13 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

特征工程

一、特征提取

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的核心目标是从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴上的投影能够最大程度地保留数据的方差,同时减少数据的维度


网站公告

今日签到

点亮在社区的每一天
去签到