(Scikit-Learn)特征工程:分类特征,文本特征,衍生特征,缺省值填充,管道特征

本文主要是介绍(Scikit-Learn)特征工程:分类特征,文本特征,衍生特征,缺省值填充,管道特征,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

特征工程
(1)分类特征
浏览房屋数据的时候,除了看到“房价” (price)和“面积”(rooms)之类的数值特征,还会有“地点”(neighborhood)信息,数 据可能像这样:

data = [{'price': 850000, 'rooms': 4, 'neighborhood': 'Queen Anne'},{'price': 700000, 'rooms': 3, 'neighborhood': 'Fremont'},{'price': 650000, 'rooms': 3, 'neighborhood': 'Wallingford'},{'price': 600000, 'rooms': 2, 'neighborhood': 'Fremont'}]

你可能会把分类特征用映射关系编码成整数: {‘Queen Anne’: 1, ‘Fremont’: 2, ‘Wallingford’: 3};

但是,在 Scikit-Learn 中这么做并不是一个好办法:这个程序包的所有模块都有一个基本 假设,那就是数值特征可以反映代数量(algebraic quantities)。因此,这样映射编码可能 会让人觉得存在 Queen Anne < Fremont < Wallingford,甚至还有 Wallingford - Queen Anne = Fremont,这显然是没有意义的

常用的解决方法是独热编码。它可以有效增加额外的列,让 0 和 1 出现在 对应的列分别表示每个分类值有或无。当你的数据是像上面那样的字典列表时,用 ScikitLearn 的 DictVectorizer 类就可以实现:

from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False, dtype=int)
vec.fit_transform(data)

在这里插入图片描述
如果要看每一列的含义,可以用下面的代码查看特征名称:

vec.get_feature_names()

在这里插入图片描述
但这种方法也有一个显著的缺陷:如果你的分类特征有许多枚举值,那么数据集的维度就 会急剧增加。然而,由于被编码的数据中有许多 0,因此用稀疏矩阵表示会非常高效:

vec = DictVectorizer(sparse=True, dtype=int)
vec.fit_transform(data)

在这里插入图片描述
(2)文本特征
单词统计:给你几个文本,让你统计每个词出现的次数,然后放到表格中
用 Scikit-Learn 的 CountVectorizer 更是可以轻松实现:

sample = ['problem of evil','evil queen','horizon problem']
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
X = vec.fit_transform(sample)
X

在这里插入图片描述
结果是一个稀疏矩阵,里面记录了每个短语中每个单词的出现次数。
用带列标签的DataFrame 来表示这个稀疏矩阵

import pandas as pd
pd.DataFrame(X.toarray(),columns=vec.get_feature_names())

在这里插入图片描述
不过这种统计方法也有一些问题:原始的单词统计会让一些常用词聚集太高的权重,在分 类算法中这样并不合理。解决这个问题的方法就是通过 TF–IDF(term frequency–inverse document frequency,词频逆文档频率),通过单词在文档中出现的频率来衡量其权重。

TF-IDF的值与词在各个文档中的常见程度成反比

from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer()
X = vec.fit_transform(sample)
pd.DataFrame(X.toarray(),columns=vec.get_feature_names())

在这里插入图片描述
(3)衍生特征
一种有用的特征是输入特征经过数学变换衍生出来的新特征。
将一个线性回归转换成多项式回归时,并不是通过改变模型来实现,而是通过改变输入数据!

下面的数据显然不能用一条直线描述

%matplotlib inline
import numpy as np
import matplotlib.pyplot as pltx = np.array([1,2,3,4,5])
y = np.array([4,2,1,3,7])
plt.scatter(x,y)

在这里插入图片描述
用 LinearRegression 拟合出一条直线,并获得直线的最优解

from sklearn.linear_model import LinearRegression
X = x[:, np.newaxis]
model = LinearRegression().fit(X,y)
yfit = model.predict(X)
plt.scatter(x,y)
plt.plot(x,yfit)

在这里插入图片描述
对数据进行变换,并增加额外的特征来提升模型的复杂度。例如,可以在数据中增加多项式特征:

from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=3, include_bias=False)
X2 = poly.fit_transform(X)
X2

在这里插入图片描述
在衍生特征矩阵中,第 1 列表示 x,第 2 列表示 x2,第 3 列表示 x3。通过对这个扩展的输 入矩阵计算线性回归,就可以获得更接近原始数据的结果了

model = LinearRegression().fit(X2,y)
yfit = model.predict(X2)
plt.scatter(x,y)
plt.plot(x,yfit)

在这里插入图片描述
(4)缺失值填充

有如下一个数据集, NaN 通常用来表示缺失值。

from numpy import nan
X = np.array([[ nan, 0, 3 ],
[ 3, 7, 9 ],
[ 3, 5, 2 ],
[ 4, nan, 6 ],
[ 8, 8, 1 ]])
y = np.array([14, 16, -1, 8, -5])

对于一般的缺省值填充方法,如均值、中位数、众数, Scikit-Learn 有 Imputer 类可以实现

from sklearn.preprocessing import Imputer
imp = Imputer(strategy='mean') #均值代替
X2 = imp.fit_transform(X)
X2

在这里插入图片描述
(5)特征管道
如果经常需要手动应用前文介绍的任意一种方法,你很快就会感到厌倦,尤其是当你需要 将多个步骤串起来使用时。你要不断的对数据进行处理,不断的fit_transform…

可以通过定义一个管道对象(即一个对数据的执行序列流水线),之后模型会按照序列的顺序,依次执行序列中的操作 例如,我们可能需要对一些数据做如下操作。
(1) 用均值填充缺失值。
(2) 将衍生特征转换为二次方。
(3) 拟合线性回归模型。

from sklearn.pipeline import make_pipeline
model = make_pipeline(Imputer(strategy='mean'),PolynomialFeatures(degree=2),LinearRegression())
model.fit(X,y)#X带有缺省值
print(y)
print(model.predict(X))

在这里插入图片描述

这篇关于(Scikit-Learn)特征工程:分类特征,文本特征,衍生特征,缺省值填充,管道特征的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679440

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

Level3 — PART 3 — 自然语言处理与文本分析

目录 自然语言处理概要 分词与词性标注 N-Gram 分词 分词及词性标注的难点 法则式分词法 全切分 FMM和BMM Bi-direction MM 优缺点 统计式分词法 N-Gram概率模型 HMM概率模型 词性标注(Part-of-Speech Tagging) HMM 文本挖掘概要 信息检索(Information Retrieval) 全文扫描 关键词

用Pytho解决分类问题_DBSCAN聚类算法模板

一:DBSCAN聚类算法的介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,DBSCAN算法的核心思想是将具有足够高密度的区域划分为簇,并能够在具有噪声的空间数据库中发现任意形状的簇。 DBSCAN算法的主要特点包括: 1. 基于密度的聚类:DBSCAN算法通过识别被低密

PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图

文章目录 技巧一模14.敏捷--方法--看板(类似卡片)1、 [单选] 根据项目的特点,项目经理建议选择一种敏捷方法,该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用以下哪种方法? 易错14.敏捷--精益、敏捷、看板(类似卡片)--敏捷、精益和看板方法共同的重点在于交付价值、尊重人、减少浪费、透明化、适应变更以及持续改善等方面。

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正