数据的特征工程

article/2025/8/15 19:32:03

数据的特征工程

1.特征工程是什么

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

2.特征工程的意义

更好的特征意味着更强的鲁棒性

更好的特征意味着只需用简单模型

更好的特征意味着更好的结果

3.scikit-learn库介绍

Python语言的机器学习工具

Scikit-learn包括许多知名的机器学习算法的实现

基于NumPy、SciPy和matplotlib构建

开源、商业可用 - BSD许可

Scikit-learn文档完善,容易上手,丰富的API,使其在学术界颇受欢迎。

4.数据的特征抽取

4.1 定义

特征抽取:将任意数据格式(例如文本和图像)转换为机器学习的数字特征

特征抽取针对非连续型数据

特征抽取对文本等进行特征值化

特征值化是为了计算机更好的去理解数据

4.2 sklearn特征抽取API

sklearn.feature_extraction

4.3 字典特征抽取

定义:将字典中的一些类别数据,分别进行转换成特征

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

类:sklearn.feature_extraction.DictVectorizer

分类特征变量/字典提取语法

sklearn.feature_extraction.DictVectorizer(sparse = True)----将映射列表转换为Numpy数组或scipy.sparse矩阵

sparse :是否转换为scipy.sparse矩阵表示,默认开启

方法:

DictVectorizer.fit_transform(X)

X:字典或者包含字典的迭代器----返回值:返回sparse矩阵

DictVectorizer.inverse_transform(X)

X:array数组或者sparse矩阵----返回值:转换之前数据格式

DictVectorizer.get_feature_names()

返回类别名称

DictVectorizer.transform(X)

按照原先的标准转换

from sklearn.feature_extraction import DictVectorizer
def dictver():"""字典数据抽取"""dict = DictVectorizer()data = dict.fit_transform([{'city': '北京','temperature':100},{'city': '上海','temperature':60},{'city': '深圳','temperature':30}])print(data)print(dict.get_feature_names())print(data.toarray()) # 转化为数组print(dict.inverse_transform(data))
if __name__ == '__main__':dictver()

结果为:

在这里插入图片描述

4.4 文本特征提取(只限于英文)

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

类:sklearn.feature_extraction.text.CountVectorizer

语法:

sklearn.feature_extraction.text.CountVectorizer()----将文本文档的集合转换为计数矩阵

方法:

CountVectorizer.fit_transform(X,y)

X:文本或者包含文本字符串的可迭代对象----返回值:返回sparse矩阵

CountVectorizer.inverse_transform(X)

X:array数组或者sparse矩阵----返回值:转换之前数据格式

CountVectorizer.get_feature_names()

返回值:单词列表

from sklearn.feature_extraction.text import CountVectorizer
def countvec():"""对文本进行特征值化"""cv = CountVectorizer()data = cv.fit_transform(["life is short,i like python","life is too long,i dislike python"])print(cv.get_feature_names())  # 返回词的列表,重复的只统计一次,单个字母不统计print(data.toarray())  # 对每篇文章,在词的列表里面进行统计每个词出现的次数
if __name__ == '__main__':countvec()

结果为:
在这里插入图片描述

4.5 中文文本特征值化

from sklearn.feature_extraction.text import CountVectorizer
import jieba
def cutword():con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")# 转换成列表content1 = list(con1)content2 = list(con2)content3 = list(con3)# 把列表转换成字符串c1 = " ".join(content1)c2 = " ".join(content2)c3 = " ".join(content3)return  c1,c2,c3
def zwvec():"""对中文文本的特征值化"""c1,c2,c3 = cutword()cv = CountVectorizer()data = cv.fit_transform([c1,c2,c3])print(cv.get_feature_names())print(data.toarray())
if __name__ == '__main__':zwvec()

结果为:
在这里插入图片描述

4.6 TF-IDF

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

TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

类:sklearn.feature_extraction.text.TfidfVectorizer

语法:sklearn.feature_extraction.text.TfidfVectorizer(stop_words=None,…)-----返回词的权重矩阵

方法:

TfidfVectorizer.fit_transform(X,y)

X:文本或者包含文本字符串的可迭代对象-----返回值:返回sparse矩阵

TfidfVectorizer.inverse_transform(X)

X:array数组或者sparse矩阵------返回值:转换之前数据格式

TfidfVectorizer.get_feature_names()

返回值:单词列表

from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cutword():con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")# 转换成列表content1 = list(con1)content2 = list(con2)content3 = list(con3)# 把列表转换成字符串c1 = " ".join(content1)c2 = " ".join(content2)c3 = " ".join(content3)return  c1,c2,c3
def tfidfvec():"""对中文文本的特征值化"""c1,c2,c3 = cutword()tf = TfidfVectorizer()data = tf.fit_transform([c1,c2,c3])print(tf.get_feature_names())print(data.toarray())
if __name__ == '__main__':tfidfvec()

结果为:
在这里插入图片描述
为什么需要TfidfVectorizer?

分类机器学习算法的的重要依据

5.数据的特征处理

特征处理:通过特定的统计方法(数学方法)将数据转换成算法要求的数据。

5.1 特征处理的方法

数值型数据:

标准缩放:1.归一化 2.标准化

3.缺失值

类别型数据:one-hot编码

时间类型:时间的切分

5.2 sklearn特征处理API

sklearn. preprocessing

5.3 归一化

特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间

目的:使得某一个特征对最终结果不会造成更大影响
公式:
在这里插入图片描述

注:作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,mx、mi分别为指定区间值默认mx为1,mi为0

sklearn归一化API: sklearn.preprocessing.MinMaxScaler

语法:

sklearn.preprocessing.MinMaxScalar(feature_range=(0,1)…)------每个特征缩放到给定范围(默认[0,1])

方法:

MinMaxScalar.fit_transform(X)

X:numpy array格式的数据[n_samples,n_features]

返回值:转换后的形状相同的array

注意:在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

from sklearn.preprocessing import MinMaxScaler
def mm():"""归一化处理"""mm = MinMaxScaler()data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])print(data)
if __name__ == '__main__':mm()

结果为:
在这里插入图片描述

5.4 标准化

特点:通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内

公式:在这里插入图片描述
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变

对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。

sklearn标准化API: scikit-learn.preprocessing.StandardScaler

语法:

scikit-learn.preprocessing.StandardScaler

处理之后每列来说所有数据都聚集在均值0附近方差为1

方法:

StandardScaler.fit_transform(X,y)

X:numpy array格式的数据[n_samples,n_features]

返回值:转换后的形状相同的array

StandardScaler.mean

原始数据中每列特征的平均值

from sklearn.preprocessing import StandardScaler
def stand():"""标准化缩放"""std = StandardScaler()data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])print(data)print(std.mean_)
if __name__ == '__main__':stand()

结果为:
在这里插入图片描述
在已有样本足够多的情况下比较稳定,标准化适合现代嘈杂大数据场景。

5.5 缺失值处理

缺失值处理方法:

删除—如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列

插补—可以通过缺失值每行或者每列的平均值、中位数来填充

sklearn缺失值API: sklearn.Imputer.SimpleImputer

语法:

SimpleImputer(missing_values=np.nan, strategy=‘mean’)

完成完成缺失值插补

方法:

SimpleImpute.fit_transform(X,y)

X:numpy array格式的数据[n_samples,n_features]

返回值:转换后的形状相同的array

from sklearn.impute import SimpleImputer
import numpy as np
def sim():"""缺失值处理"""im = SimpleImputer(missing_values=np.nan,strategy='mean')data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])print(data)
if __name__ == '__main__':sim()

结果是:
在这里插入图片描述

6.降维

维度:特征的数量

6.1 数据的特征选择

特征选择:是在已有的特征中选择更好的特征。

特征选择原因

冗余:部分特征的相关度高,容易消耗计算性能

噪声:部分特征对预测结果有负影响

sklearn特征选择API:klearn.feature_selection.VarianceThreshold

语法:

klearn.feature_selection.VarianceThreshold(threshold = 0.0)----删除所有低方差特征

方法:

Variance.fit_transform(X,y)

X:numpy array格式的数据[n_samples,n_features]

返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。

from sklearn.feature_selection import VarianceThresholddef var():"""特征选择---删除低方差数据"""vart = VarianceThreshold()data = vart.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])print(data)
if __name__ == '__main__':var()

结果是:
在这里插入图片描述

6.2 主成分分析

本质:PCA是一种分析、简化数据集的技术

目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

作用:可以削减回归分析或者聚类分析中特征的数量

注意:高维度数据容易出现的问题—特征之间通常是线性相关的

PCA的API:sklearn.decomposition.PCA

语法:sklearn.decomposition.PCA(n_components=None)----将数据分解为较低维数空间

n_components:一般在0.9-0.95之间

方法:

PCA.fit_transform(X)

X:numpy array格式的数据[n_samples,n_features]

返回值:转换后指定维度的array

from sklearn.decomposition import PCA
def pca():"""主成分分析进行特征降维"""pca = PCA(n_components=0.9)data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])print(data)
if __name__ == '__main__':pca()

结果为:

在这里插入图片描述
探究:用户对物品类别的喜好细分降维

1.获取数据

数据来源:https://www.kaggle.com/c/instacart-market-basket-analysis/data

数据:

products.csv 商品信息

order_products__prior.csv 订单与商品信息

orders.csv 用户的订单信息

aisles.csv 商品所属具体物品类别

2.数据处理

2.1 合并表格

通过网站中的数据描述可知:

表一:order_products__prior.csv:订单与商品信息

字段:order_id, product_id

表二:products.csv:商品信息

字段:product_id, aisle_id

表三:orders.csv:用户的订单信息

字段:order_id,user_id

表四:aisles.csv:商品所属具体物品类别

字段: aisle_id, aisle

合并过程:

表一与表二通过相同字段(特征)product_id进行合并,合并后的表再与表三通过相同字段order_id进行合并,最后表一二三合并后的表与表四通过相同字段aisle_id合并为一张表

2.2 交叉表(特殊的分组工具)

pd.pd.crosstab(指定的行,指定的列)

2.3 主成分分析

import pandas as pd
from sklearn.decomposition import PCA
# 读取四张表的数据----数据与.py文件在同一目录下
prior = pd.read_csv("order_products__prior.csv")
products = pd.read_csv("products.csv")
orders = pd.read_csv("orders.csv")
aisles = pd.read_csv("aisles.csv")
# 合并为一张表
mt = pd.merge(prior,products,on=['product_id','product_id'])
mt = pd.merge(mt,orders,on=['order_id','order_id'])
mt = pd.merge(mt,aisles,on=['aisle_id','aisle_id'])
# 交叉表(特殊的分组工具)
cross = pd.crosstab(mt['user_id'],mt['aisle'])
# 主成分分析
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross)
print(data)

http://chatgpt.dhexx.cn/article/PRnhSnXm.shtml

相关文章

机器学习中的特征建模(特征工程)和算法选型建模 - 以暴力破解识别为例

catalogue 1. 特征工程是什么?有什么作用? 2. 特征获取方案 - 如何获取这些特征? 3. 特征观察 - 运用各种统计工具、图标等工具帮助我们从直观和精确层面认识特征中的概率分布 4. 特征处理 - 特征清洗 5. 特征护理 - 特征预处理 6. 特征处理 …

机器学习之特征工程

机器学习之特征工程 转载自: 点击打开链接 在这个振奋人心的程序员节日里,我决定认真地写一篇文章来纪念一下自己这长达六年程序员史。o(╯□╰)o 本文是一篇关于特征工程的总结类文章,如有不足之处或理解有偏差的地方,还望多多指…

Python机器学习—特征工程

文章目录 1、数据集1.1 可用数据集1.2 scikit-learn数据集sklearn小数据集sklearn大数据集 1.3 数据集的划分数据集划分API 2.特征工程2.1特征工程包含内容 3.特征提取3.1字典特征提取3.2 文本特征提取3.3中文文本特征提取3.4 Tf-idf文本特征提取公式 4.特征预处理4.1 归一化4.…

特征工程全过程

文章目录 简介数据预处理 无量纲化 标准化区间缩放法标准化与归一化的区别对定量特征二值化对定性特征哑编码缺失值计算数据变换回顾特征选择 Filter 方差选择法相关系数法卡方检验互信息法Wrapper 递归特征消除法Embedded 基于惩罚项的特征选择法基于树模型的特征选择法总结降…

特征工程与自动特征工程

目录 1. 什么是特征工程 2. 什么是自动特征工程 2.1 自动方法有哪些 3. 文献说明 4、参考文献 1. 什么是特征工程 特征工程,是指用一系列工程化的方式从原始数据中提取出更好的数据特征,以提升模型的训练效果。特征工程是机器学习中不可或缺的一部…

特征工程常用方法

特征工程 ●特征(feature) :数据中抽取出来的对结果预测有用的信息。 ●特征的个数就是数据的观测维度 ●特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程, ●特征工程一般包括特征清…

特征工程——文本特征

目录 文本特征 1.expansion编码 2.consolidation编码 3.文本长度特征 4.标点符号特征 5.词汇属性特征 6.特殊词汇特征 7.词频特征 8.TF-IDF特征 9.LDA特征 注意: 1. 本系列所有的文章主要是梯度提升树模型展开的,抽取的特征主要为帮助梯度提升…

时间序列特征工程

关注微信公众号“时序人”获取更好的阅读体验 时间序列知识整理系列 时间序列统计分析时间序列聚类时间序列预测时间序列回归时间序列特征工程时间序列补缺时间序列异常检测 前几次的文章分享,我们了解了时间序列分析的基础方法以及预测方法。但在使用这些方法一般…

机器学习——特征工程——交互特征(多项式特征)

一、交互特征定义 两个特征的乘积可以组成一对简单的交互特征,这种相乘关系可以用逻辑操作符AND来类比,它可以表示出由一对条件形成的结果:“该购买行为来自于邮政编码为98121的地区”AND“用户年龄在18和35岁之间”。这种特征在基于决策树的…

特征工程到底是什么?

特征工程是一个过程,它首先在概念上,然后在程序上将一个原始样本转化为特征向量。它包括将一个特征概念化,然后编写程序代码,可能借助一些间接数据,将整个原始样本转化为一个特征。 4.1 为什么要进行特征工程 具体来…

什么是特征工程?如何进行特征工程?

1 特征工程是什么? 有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。那特征工程到底是什么呢?顾名思义,其本质是一项工程活动,目的是最大限度地从原始数据中…

特征工程

文章目录 一、特征工程概述二、特征选择1.什么是特征选择2.为什么要做特征选择3.特征选择的基本原则4.特征选择常用的四种方法4.1 方差选择法4.2 相关系数法4.3 递归特征消除法4.4 模型选择法 参考: 三、特征构造1.什么是好?2.常见做法3.两个变量组合而成…

机器学习——特征工程(3分钟的超详细介绍)

目录 1 什么是特征工程?2 数据预处理和特征处理2.1 数据预处理2.2 特征处理 3 特征降维3.0 什么是特征降维?3.1 特征选择3.2 线性降维3.2.1 主成分分析法(PCA)3.2.2 线性判别分析法(LDA) 1 什么是特征工程&…

机器学习之特征工程详解

特征工程是指使用专业的背景知识和技巧处理数据,使得特征能在机器学习算法上发生更好的作用的过程。更好的特征意味着更强的灵活性,只需简单模型就能得到更好的结果,因此,特征工程在机器学习中占有相当重要的地位,可以…

【特征工程】呕心之作——深度了解特征工程

【博客地址】:https://blog.csdn.net/sunyaowu315 【博客大纲地址】:https://blog.csdn.net/sunyaowu315/article/details/82905347 对数据分析、机器学习、数据科学、金融风控等感兴趣的小伙伴,需要数据集、代码、行业报告等各类学习资料&am…

python右键idel消失问题

由于先安装的是的python2.7,后来改用python3.4出现了idel不见的问题: cmd:regedit SystemFileAssociations 新建项: ‘.py’右侧键值不管,‘shell’,edit的键值均为‘Edit with IDLE’即可 将’command‘的键值设置…

分析及解决:虚拟机无法连接虚拟设备idel 0:1 问题

虚拟机无法连接虚拟设备 问题背景解决过程一次性永久解决方式 问题背景 在学习大数据集群开发的时候,按照要求需要配置多个使用Ubuntu操作系统的虚拟机组合集群:master,slave1,slave2。但在我按照要求配置好三个虚拟机后&#xf…

python的使用方法图解_python开发之IDEL(Python GUI)的使用方法图文详解

本文讲述了python开发之IDEL(Python GUI)的使用方法。分享给大家供大家参考,具体如下: 在安装完Python后,我们希望能够运用python GUI来运行一些我们编写的程序,那么Python GUI怎样用呢? 看完这篇blog,也…

python、idel、pycharm的安装使用

python的安装 Python 3的安装 idle的使用 Python安装的过程中默认自动安装了idle,idl是python自带的集成开发环境。 交互环境 如何启动idle 第一种,开始菜单所有应用点击idle 第二种,在搜索栏当中直接输入idle 集成开发环境PyCham…

在anaconda设置Python的IDEL编辑器

在电脑中安装了anaconda(如果没有,可参考博客),anaconda会自动安装Python,可是想要用Python的IDEL编辑器还不知道怎么弄。百度了下终于查找到了具体的设置方法。主要分为两步。 1、修改注册表中信息,将.py…