(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

相关文章

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取