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

目录

特征工程

一、特征提取

1、字典特征提取

2、文本特征提取

[2.1 英文文本提取](#2.1 英文文本提取)

[2.2 中文文本提取](#2.2 中文文本提取)

3、TF-IDF文本特征词的重要程度特征提取

二、无量纲化-预处理

[1 MinMaxScaler 归一化](#1 MinMaxScaler 归一化)

[2 normalize归一化](#2 normalize归一化)

[3 StandardScaler 标准化](#3 StandardScaler 标准化)

三、特征降维

1、特征选择

[1.1 VarianceThreshold 低方差过滤特征选择](#1.1 VarianceThreshold 低方差过滤特征选择)

[1.2 主成份分析(PCA)](#1.2 主成份分析(PCA))


特征工程

就是对特征进行相关的处理,一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程。特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征。

步骤:特征提取(dataframe类型不用)---- 无量纲化(预处理)---- 降维

API:

复制代码
DictVectorizer  	字典特征提取
CountVectorizer 	文本特征提取
TfidfVectorizer 	TF-IDF文本特征词的重要程度特征提取 
MinMaxScaler 		归一化
StandardScaler 		标准化
VarianceThreshold 	底方差过滤降维
PCA  				主成分分析降维

一、特征提取

1、字典特征提取

稀疏矩阵:一个矩阵中大部分元素为零,只有少数元素是非零的矩阵。由于稀疏矩阵中零元素非常多,存储和处理稀疏矩阵时,通常会采用特殊的存储格式,以节省内存空间并提高计算效率

三元组表 :一种稀疏矩阵类型数据,存储非零元素的行索引、列索引和值:(行,列)值

非稀疏矩阵(稠密矩阵) :是指矩阵中非零元素的数量与总元素数量相比接近或相等,也就是说矩阵中的大部分元素都是非零的。通常采用二维数组形式存储

python 复制代码
from sklearn.feature_extraction import DictVectorizer

示例:

(稀疏矩阵对象调用**toarray()**函数, 得到类型为ndarray的二维稀疏矩阵 )

2、文本特征提取

python 复制代码
from sklearn.feature_extraction.text import CountVectorizer

构造函数关键字参数stop_words值为list,表示词的黑名单(不提取的词) fit_transform函数的返回值为稀疏矩阵

2.1 英文文本提取

2.2 中文文本提取

中文文本不像英文文本,中文文本文字之间没有空格,所以要先分词,一般使用jieba分词

bash 复制代码
# 下载jieba组件
pip install jieba

示例:

3、TF-IDF文本特征词的重要程度特征提取

python 复制代码
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 归一化

python 复制代码
from sklearn.preprocessing import MinMaxScaler

通过对原始数据进行变换把数据映射到指定区间(默认为0-1)

归一化公式是:

示例:

(缺点:最大值和最小值容易受到影响,所以鲁棒性较差,常使用标准化的无量纲化 )

2 normalize归一化

python 复制代码
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 标准化

python 复制代码
from sklearn.preprocessing import StandardScale

在机器学习中,标准化是一种数据预处理技术,也称为数据归一化或特征缩放。它的目的是将不同特征的数值范围缩放到统一的标准范围,以便更好地适应一些机器学习算法,特别是那些对输入数据的尺度敏感的算法

这是标准化前后分布的对比图:左边是原始数据(均值 50,标准差 10),右边是 StandardScaler 标准化后(均值变成 0,标准差变成 1)。就是把左边的分布"平移+缩放"成右边的形状

三、特征降维

实际数据中,有时候特征很多,会增加计算量,降维就是去掉一些特征,或者转化多个特征为少量个特征,**特征降维其目的:**是减少数据集的维度,同时尽可能保留数据的重要信息。

1、特征选择

1.1 VarianceThreshold 低方差过滤特征选择

python 复制代码
from sklearn.feature_selection import VarianceThreshold

如果一个特征的方差很小,说明这个特征的值在样本中几乎相同或变化不大,包含的信息量很少,模型很难通过该特征区分不同的对象

1.2 主成份分析(PCA)

python 复制代码
from sklearn.decomposition import PCA
PCA(n_components=None)
    n_components:
            实参为小数时:表示降维后保留百分之多少的信息
            实参为整数时:表示减少到多少特征

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

相关推荐
这里有鱼汤18 分钟前
亲测可行!Streamlit项目完美打包成EXE分享教程(含xtquant坑点)
后端·python
许泽宇的技术分享37 分钟前
「让AI大脑直连Windows桌面」:深度解析Windows-MCP,开启操作系统下一代智能交互
人工智能·windows·交互
crushqqi1 小时前
【跨服务器的数据自动化下载--安装公钥,免密下载】
服务器·python·自动化
Baihai_IDP1 小时前
许多 AI 智能体评测基准并不可靠
人工智能·面试·llm
qq_463944861 小时前
如何将新建的Anaconda虚拟环境导入Juputer内核中?
linux·windows·python
钢铁男儿1 小时前
PyTorch基础(使用Tensor及Antograd实现机器学习)
人工智能·pytorch·机器学习
Shun_Tianyou1 小时前
Python Day28 HTML 与 CSS 核心知识点 及例题分析
开发语言·前端·css·python·算法·html
Hcoco_me1 小时前
【8】Transformers快速入门:Decoder 分支和统计语言模型区别?
人工智能·语言模型·自然语言处理
_oP_i1 小时前
Model Context Protocol (MCP)标准化应用程序向大型语言模型 (LLM) 提供上下文协议
人工智能·语言模型·自然语言处理
平行绳1 小时前
智能体一键生成火遍全网的火柴人视频,工作流详细搭建教程来了
人工智能·coze