本文转自https://www.cnblogs.com/cnkai/p/7755097.html

标称型特征编码(Encoding categorical feature)

有些情况下,某些特征的取值不是连续的数值,而是离散的标称变量(categorical)。

比如一个人的特征描述可能是下面的或几种:

features ['male', 'female'], ['from Europe', 'from US', 'from Asia'], ['use Firefox', 'use Chorme', 'use Safari', 'Use IE']

这样的特征可以被有效的编码为整型特征值(interger number)。

['male', 'US', 'use IE']  -->>  [0,1,3]
['femel', 'Asia', 'use Chrome']  -->> [1,2,1]

但是这些整数型的特征向量是无法直接被sklearn的学习器使用的,因为学习器希望输入的是连续变化的量或者可以比较大小的量,但是上述特征里面的数字大小的比较是没有意义的。

一种变换标称型特征(categorical features)的方法是使用one-of-K或者叫one-hot encoding,在类OneHotEncoder里面就已经实现了。这个编码器将每一个标称型特征编码成一个m维二值特征,其中每一个样本特征向量就只有一个位置是1,其余位置全是0。

enc = preprocessing.OneHotEncoder()
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])

enc.transform([[0,1,3]]).toarray()


第一列的取值有两个,使用两个数字编码;第二列取值有单个,使用三个数字编码;第三列取值有4个,使用四个数字编码。一共使用九个数字进行编码。

默认情况下,每个特征分量需要多少个值是从数据集中自动推断出来的。我们还可以通过参数n_values进行显式的指定。上面的数据集中,有两个性别,三个可能的地方以及四个浏览器。然后fit之后在对每一个样本进行变换。结果显示,前两个值编码了性别,接下来的三个值编码了地方,最后的四个值编码了浏览器。

注意:如果训练数据中某个标称型特征分量的取值没有完全覆盖其所有可能的情况,则必须给OneHotEncoder指定每一个标称型特征分量的取值个数,设置参数:n_values。

enc = preprocessing.OneHotEncoder(n_values=[2,3,4])
enc.fit([[1,2,3],[0,2,0]])

enc.transform([[1,0,0]]).toarray()

缺失值处理(Imputation of missing values)

由于各种各样的原因,很多真实世界中的数据集包含有缺失值,通常使用blanks,NaNs or other placeholders来代替。这样的数据集是无法直接被sklearn的学习器模型处理的。

一个解决的办法是将包含缺失值得整行或者整列直接丢弃。然而这样可能会丢失很多有价值的数据。

一个更好的办法是补全缺失值,也就是从已知的部分数据推断出未知的数据。

Imputer类提供了补全缺失值得基本策略: 使用一行或者一列的均值,中值,出现次数最多的值来补全,该类也允许不同缺失值得编码。

from sklearn.preprocessing import Imputerimp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1,2], [np.nan,3], [7,6]])

X = [[np.nan,2], [6, np.nan], [7,6]]
imp.transform(X)


使用训练得数据来进行补全。

Imputer类支持稀疏矩阵:

import scipy.sparse as sp
X = sp.csc_matrix([[1,2], [0,3], [7,6]])
imp = Imputer(missing_values=0, strategy='mean', axis=0)
imp.fit(X)X_test = sp.csc_matrix([[0,2], [6,0], [7,6]])
imp.transform(X_test)

多项式特征(Generating polynominal features)

为输入数据添加非线性特征可以增加模型的复杂度,实现这一点的常用的简单方法是使用多项式特征(polynominal features),他可以引入特征的高阶项和互乘积项。

sklearn的PolynominalFeatures类可以用来在出入数据的基础上构造多项式特征。

from sklearn.preprocessing import PolynomialFeaturesX = np.arange(6).reshape(3,2)
poly = PolynomialFeatures(2)   # 二阶
poly.fit_transform(X)


有些情况下,我们只想要原始输入特征分量之间的互乘积项,这时可以设置参数:interaction_only=True,这时将不会出现次方项。

自定义转换器(Custom transformers)

有时候,你需要把一个已经有的Python函数变为一个变换器transformer来进行数据的清理和预处理。

借助于FunctionTransformer类,你可以从任意的Python函数实现一个transformer。比如,构造一个transformer实现对数变换。

from sklearn.preprocessing import FunctionTransformertransformer = FunctionTransformer(np.log1p)
X = np.array([[0,1], [2,3]])
transformer.transform(X

数据预处理:标称型特征的编码和缺失值处理相关推荐

  1. 四、数据预处理——处理连续型特征:二值化与分段

    四.数据预处理--处理连续型特征:二值化与分段 点击标题即可获取文章相关的源代码文件哟! - sklearn.preprocessing.Binarizer 根据阈值将数据二值化(将特征值设置为0或1 ...

  2. CatBoost 模型中标称型特征转换成数字型特征

    接上一篇文章 CatBoost 模型中标称特征的处理 ,这篇说一下CatBoot中实现的标称特征处理方法. 可以查看官网原文 Transforming categorical features to ...

  3. ML:通过数据预处理(分布图/箱型图/模型寻找异常值/热图/散点图/回归关系/修正分布正态化/QQ分位图/构造交叉特征/平均数编码)利用十种算法模型调优实现工业蒸汽量回归预测(交叉训练/模型融合)之详

    ML之LightGBM:通过数据预处理(分布图/箱型图/模型寻找异常值/热图/散点图/回归关系/修正分布正态化/QQ分位图/构造交叉特征/平均数编码)利用十种算法模型调优实现工业蒸汽量回归预测(交叉训 ...

  4. 数值型数据和标称型数据

    在学习机器学习的工程中,发现有一种名为标称型的数据,具体如下: 标称型:一般在有限的数据中取,而且只存在'是'和'否'两种不同的结果(一般用于分类) 数值型:可以在无限的数据中取,而且数值比较具体化, ...

  5. 数据预处理之One-Hot(独热编码)编码

    数据预处理之One-Hot(独热编码)编码 为什么使用One-Hot编码 对于机器学习任务中,特征并不总是连续值,很多是分类值.这些分类值本身没有大小的意义.为了将数据集中一个分类变量替换为一个或多个 ...

  6. 使用Categorical_endcoder包对标称变量进行个性化编码

    使用Categorical_endcoder包对标称变量进行个性化编码 Categorical Encoding扩展了很多实现 scikit-learn 数据转换器接口的分类编码方法,并实现了常见的分 ...

  7. Tricks(三十四)—— 判断某一属性列是数值型还是标称型

    # 这时还未将标称型属性从字符串转化为 int if isinstance(x[feat], int) or isinstance(x[feat], float):... else:...

  8. 系列文章(一):机器学习与深度学习——数据预处理(数值型数据)

    系列文章(一):机器学习与深度学习中的数据预处理(数值型数据) 目录 系列文章(一):机器学习与深度学习中的数据预处理(数值型数据) 一.引言 1.1 为何预处理(Why preprocessing? ...

  9. 【python数据挖掘课程】二十九.数据预处理之字符型转换数值型、标准化、归一化处理

    这是<Python数据挖掘课程>系列文章,前面很多文章都讲解了数据挖掘.机器学习,这篇文章主要讲解数据分析预处理中字符特征转换为数值特征.数据标准化.数据归一化,这都是非常基础的工作.最后 ...

最新文章

  1. python3数字全排列怎么搞_python3实现字符串的全排列的方法(无重复字符)
  2. 号称最强“抓取”工具,没有搞不到的资源!
  3. 【SPFA】重建道路(jzoj 1212)
  4. MySQL访问行更新慢、用户线程大量堆积竟是因为它
  5. 内存中的栈空间与堆空间
  6. jwt (JSON Web Token)官方说明
  7. 拓客系统专用服务器,北京拓客系统
  8. 中小企业信息化建设管理方案规划设计1
  9. 基于Matlab/Simulink的1/4车辆系统动力学模型的两种建模方法(动力学建模入门知识)
  10. matlab高斯滤波器
  11. 移动平均法,加权平均法
  12. AM5SE-IS防孤岛保护装置如何解决分布式光伏发电过程中的影响?
  13. HTML5教程之FileList文件列表对象的应用
  14. 路由器概述(作用功能、工作过程、内部组成【RAM、ROM区别】、接口)
  15. 登陆服务器时显示安全登陆,怎么登陆服务器,都有哪些安全问题?
  16. git stash暂存操作
  17. 五线谱编辑Demo(MFC)
  18. 转行做数据分析的心路历程
  19. 【fecmall】fecyo-1.5.1开源版本发布 - 重构优惠券部分
  20. 中国蚁剑(antSword)加载不出来!

热门文章

  1. 计算机中丢失safeengine.dll,safeengine.dll
  2. 多目标优化之帕累托最优
  3. Ubuntu16.04搜索不到wifi
  4. Zhong__Go随机密码生成器
  5. 俺是郭德纲先生的忠实非现场 听众+观众
  6. ios研发Mini LED技术 iPad/MacBook尺寸将更大
  7. 把《把时间当作朋友》读薄
  8. 淘宝UA算法中的核心函数
  9. java高级之JDBC的基本操作知识
  10. 长URL链接转短链接算法