Python机器学习—特征工程

article/2025/8/15 19:26:31

文章目录

  • 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.2 标准化
  • 5. 特征降维
    • 5.1 特征选择
      • 5.1.1 低方差特征过滤
      • 5.1.2 相关系数
  • 6. 主成分分析
  • 总结

1、数据集

1.1 可用数据集

在这里插入图片描述
Kaggle网址:https://www.kaggle.com/datasets
UCI数据集网址: http://archive.ics.uci.edu/ml/
scikit-learn网址:https://scikit-learn.org/stable/

1.2 scikit-learn数据集

  • load_* 获取小规模数据集,数据包含在datasets里
  • fetch_* 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/

sklearn小数据集

def datasets_demo():"""sklearn数据集使用:return:"""# 获取数据集iris = load_iris()print("鸢尾花数据集:\n", iris)print("查看数据集描述:\n", iris["DESCR"])print('鸢尾花的目标值:\n', iris.target)print("查看特征值的名字:\n", iris.feature_names)print("鸢尾花目标值的名字:\n", iris.target_names)print("查看特征值:\n", iris.data, iris.data.shape)# 数据集划分x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)print("训练集的特征值:\n", x_train, x_train.shape)return None

sklearn大数据集

sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
  • subset:‘train’或者’test’,‘all’,可选,选择要加载的数据集。
  • 训练集的“训练”,测试集的“测试”,两者的“全部”

1.3 数据集的划分

  • 训练数据:用于训练,构建模型
  • 测试数据:在模型检验时使用,用于评估模型是否有效,测试集一般在20%~30%

数据集划分API

sklearn.model_selection.train_test_split(arrays, *options)
  • x 数据集的特征值
  • y 数据集的标签值
  • test_size 测试集的大小,一般为float
  • random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
  • return 测试集特征训练集特征值值,训练标签,测试标签(默认随机取)
# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
print("训练集的特征值:\n", x_train, x_train.shape)

2.特征工程

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

  • 意义:会直接影响机器学习的效果

2.1特征工程包含内容

  • 特征抽取
  • 特征预处理
  • 特征降维

3.特征提取

特征提取是将任意数据(如文本或图像)转换为可用于机器学习的数字特征

  • 字典特征提取(特征离散化)
  • 文本特征提取
  • 图像特征提取(深度学习将介绍)

特征提取API:sklearn.feature_extraction

3.1字典特征提取

def dict_demo():"""字典特征提取:return:"""data = [{'city': '北京', 'temperature': 100},{'city': '上海', 'temperature': 60},{'city': '深圳', 'temperature': 30}]# 1.实例化一个转换器类transfer = DictVectorizer(sparse=False)# 2.调用fit_transform()data_new = transfer.fit_transform(data)print('data_new\n', data_new)print("特征名字: \n", transfer.get_feature_names())return None

3.2 文本特征提取

def count_demo():"""文本特征抽取:CountVecotrizer:return:"""data = ["Life is short, i like like python", "life is too long, i dislike python"]# 1.一个转换器类transfer = CountVectorizer(stop_words=['is', 'too'])  # 停用词不统计# 2.调用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray())print("特征名字:\n", transfer.get_feature_names())return None

3.3中文文本特征提取

def cut_word(text):"""进行中文分词:“我爱北京天安门”  --->"我 爱 北京 天安门":param text::return:"""text = " ".join(list(jieba.cut(text)))return textdef count_chinese_demo2():"""中文文本特征抽取,自动分词:return:"""# 1.将中文文本进行分词data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]data_new = []for sent in data:data_new.append(cut_word(sent))# print(data_new)# 2.实例化一个转换器类transfer = CountVectorizer(stop_words=['一种', '因为'])# 3.调用fit_transformdata_final = transfer.fit_transform(data_new)print("data_new:\n", data_final.toarray())print("特征名字:\n", transfer.get_feature_names())return None

3.4 Tf-idf文本特征提取

  • TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
  • TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

公式

  • 词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率
  • 逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到
    在这里插入图片描述
def tfidf_demo():"""用tfidf的方法进行文本特征提取:return:"""# 1.将中文文本进行分词data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]data_new = []for sent in data:data_new.append(cut_word(sent))# print(data_new)# 2.实例化一个转换器类transfer = TfidfVectorizer(stop_words=["一种", '因为'])# 3.调用fit_transformdata_final = transfer.fit_transform(data_new)print("data_new:\n", data_final.toarray())print("特征名字:\n", transfer.get_feature_names())return None

4.特征预处理

通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

原因:特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征

数值型数据的无量纲化:

  • 归一化
  • 标准化
API:sklearn.preprocessing

4.1 归一化

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

def minmax_demo():"""归一化:return:"""# 1.获取数据data = pd.read_csv('dating.txt')data = data.iloc[:, :3]# print("data:\n", data)# 2.实例化一个转换器类transfer = MinMaxScaler()# 3.调用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new)return None

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

4.2 标准化

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

  • 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
  • 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
def stand_demo():"""标准化:return:"""# 1. 获取数据data = pd.read_csv('dating.txt')data = data.iloc[:, :3]print('data:\n', data)# 2.实例化一个转换器类transfer = StandardScaler()# 3.调用fit_transform()data_new = transfer.fit_transform(data)print('data_new:\n', data_new)return None

在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

5. 特征降维

降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程

降维的两种方式

  • 特征选择
  • 主成分分析(可以理解一种特征提取的方式)

5.1 特征选择

数据中包含冗余或无关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。

方法:

  • Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
            方差选择法:低方差特征过滤
            相关系数
  • Embedded (嵌入式):算法自动选择特征(特征与目标值之间的关联)
            决策树:信息熵、信息增益
            正则化:L1、L2
            深度学习:卷积等
API:sklearn.feature_selection

5.1.1 低方差特征过滤

删除低方差的一些特征,前面讲过方差的意义。再结合方差的大小来考虑这个方式的角度。

  • 特征方差小:某个特征大多样本的值比较相近
  • 特征方差大:某个特征很多样本的值都有差别
def variance_demo():"""过滤低方差特征:return:"""# 1. 获取数据data = pd.read_csv('factor_returns.csv')data = data.iloc[:, 1:-2]print('data:\n', data)# 2. 实例化一个转换器类transfer = VarianceThreshold(threshold=10)# 3. 调用fit_transform()data_new = transfer.fit_transform(data)print('data_new:\n', data_new, data_new.shape)return None

5.1.2 相关系数

皮尔逊相关系数(Pearson Correlation Coefficient)

  • 反映变量之间相关关系密切程度的统计指标
def pearsonr_demo():"""相关系数计算:return: None"""data = pd.read_csv("factor_returns.csv")data = data.iloc[:, 1:-2]# 计算某两个变量之间的相关系数r1 = pearsonr(data['pe_ratio'], data['pb_ratio'])print('pe_ratio与pb_ratio相关系数:\n', r1)r2 = pearsonr(data['revenue'], data['total_expense'])print('revenue与total_expense相关系数:\n', r2)return None

6. 主成分分析

  • 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量

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

  • 应用:回归分析或者聚类分析当中

def pca_demo():"""PCA降维:return:"""data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]# 1.实例化一个转换器类transfer = PCA(n_components=2)# 2. 调用fit_transform()data_new = transfer.fit_transform(data)print('data_new:\n', data_new)return None

总结

在这里插入图片描述
关于本节所有代码及数据集相关文件参考如下链接:
https://download.csdn.net/download/qq_45625499/21048609?spm=1001.2014.3001.5501


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

相关文章

特征工程全过程

文章目录 简介数据预处理 无量纲化 标准化区间缩放法标准化与归一化的区别对定量特征二值化对定性特征哑编码缺失值计算数据变换回顾特征选择 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…

idel部署的问题

war和war exploded的区别 转载地址:https://blog.csdn.net/xlgen157387/article/details/56498938 在使用IDEA开发项目的时候,部署Tomcat的时候通常会出现下边的情况: 是选择war还是war exploded 这里首先看一下他们两个的区别:…

python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐

在了解python中的tkinter模块的时候,你需要了解一些tkinter的相关知识 下面是python的API文档中的一个简单例子: 1 import tkinter as tk2 3 class Application(tk.Frame):4 def __init__(self, masterNone):5 tk.Frame.__init__(self, mast…

解决idel连接mysql数据库报错问题

使用idel来连接mysql数据库时出现: Server returns invalid timezone. Need to set ‘serverTimezone’ property报错信息。 查询相关资料后发现,我们本地使用的idel连接mysql时,使用的时区有问题而导致的报错。 解决方式: 修…