scikit-learn中的OneHotEncoder用法
OneHotEncoder 可用于将分类特征的每个元素转化为一个可直接计算的数值,也即特征值数字化,常用于特征工程中的数据预处理。
其本质是One-Hot编码在scikit-learn中的实现。
One-Hot
One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候只有一位有效。
One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值,然后,每个整数值被表示为二进制向量,将整数索引标记为1,其余都标为0。
sklearn 中的 OneHotEncoder
直达官网: sklearn.preprocessing.OneHotEncoder
基本参数:
# Encode categorical integer features as a one-hot numeric array.
OneHotEncoder(n_values=None,
categorical_features=None,
categories=None,
drop=None,
sparse=True,
dtype=np.float64,
handle_unknown='error')
示例:
#-*- coding: utf-8 -*-
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit([[0, 0, 3],
[1, 1, 0],
[0, 2, 1],
[1, 0, 2]])
ans = enc.transform([[0, 1, 3]]).toarray()
'''
如果不加 toarray() 的话,输出的是稀疏的存储格式,即索引加值的形式,也可以通过参数指定 sparse = False 来达到同样的效果
'''
print(ans)
#输出 [[ 1. 0. 0. 1. 0. 0. 0. 0. 1.]]
解释:
对于输入数组,依旧是把每一行当作一个样本,每一列当作一个特征,
先来看第一个特征,即第一列 [0,1,0,1],也就是说它有两个取值 0 或者 1,那么 one-hot 就会使用两位来表示这个特征,[1,0] 表示 0, [0,1] 表示 1,在上例输出结果中的前两位 [1,0…] 也就是表示该特征为 0;
第二个特征,第二列 [0,1,2,0],它有三种值,那么 one-hot 就会使用三位来表示这个特征,[1,0,0] 表示 0, [0,1,0] 表示 1,[0,0,1] 表示 2,在上例输出结果中的第三位到第六位 […0,1,0,0…] 也就是表示该特征为 1;
第二个特征,第三列 [3,0,1,2],它有四种值,那么 one-hot 就会使用四位来表示这个特征,[1,0,0,0] 表示 0, [0,1,0,0] 表示 1,[0,0,1,0] 表示 2,[0,0,0,1] 表示 3,在上例输出结果中的最后四位 […0,0,0,1] 也就是表示该特征为 3;
注意:
在scikit-learn 0.20版本中有一个比较重要的改动,就是sklearn.preprocessing.OneHotEncoder 除了支持整数外,还支持字符串。
否则如果特征是字符串,就需要先使用 sklearn.preprocessing.LabelEncoder 将离散特征值转换为数字。
常用参数解释
- n_values=’auto’
-(scikit-learn 0.20 中以categories替代,也即: categories=’auto’ )
表示每个特征使用几维的数值由数据集自动推断,即几种类别就使用几位来表示。当然也可以自己指定,示例:
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(categories= [2, 3, 4])
enc.fit([[0, 0, 3],
[1, 1, 0]])
ans = enc.transform([[0, 2, 3]]).toarray()
print(ans)
#输出 [[ 1. 0. 0. 0. 1. 0. 0. 0. 1.]]
drop=None
-用于从每个特征中舍去特定的分类,默认为None,且不能与categories、n_values同用。
dtype=np.float64
表示编码数值格式,默认是浮点型。
sparse=True
表示编码的格式,默认为 True,即为稀疏的格式,指定 False 则就不用 toarray() 了
handle_unknown=’error’
,其值可以指定为 “error” 或者 “ignore”,即如果碰到未知的类别,是返回一个错误还是忽略它。
categorical_features = 'all’
这个参数指定了对哪些特征进行编码,默认对所有类别都进行编码。也可以自己指定选择哪些特征,通过索引或者 bool 值来指定,看下例:
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(categorical_features = [0,2]) # 等价于 [True, False, True]
enc.fit([[0, 0, 3],
[1, 1, 0],
[0, 2, 1],
[1, 0, 2]])
ans = enc.transform([[0, 2, 3]]).toarray()
print(ans)
#输出 [[ 1. 0. 0. 0. 0. 1. 2.]]
以下为jupyter notebook 输出示例,可以看到运行结果之外,还有一串Warnings
出现 警告的原因 是:
scikit-learn 0.20 中将此参数进行了剥离,后续的OneHotEncoder将不再支持categorical_features 参数,但新增了sklearn.compose.ColumnTransformer 类,
通过这个类我们可以对输入的特征分别做不同的预处理,并且最终的结果还在一个特征空间里面。
ColumnTransformer 的具体使用方法在此不再展开,
下面示例演示 利用OneHotEncoder结合ColumnTransformer ,实现categorical_features 参数 对指定的特征类编码
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
categorical_features = [0,2]
enc = OneHotEncoder(handle_unknown='ignore')
clt = ColumnTransformer([('name',enc,categorical_features)],remainder='passthrough')
clt.fit([[0, 0, 3],
[1, 1, 0],
[0, 2, 1],
[1, 0, 2]])
ans = clt.transform([[0, 2, 3]]) # 此处不能再使用toarray()
print(ans)
#输出 [[1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2]]
[color=rgba(0, 0, 0, 0.75)]fit_transform()
[color=rgba(0, 0, 0, 0.75)]方法 transform( X ) 就是对 X 进行编码了。在实际应用中,我们更常用方法fit_transform( ) ,它相当于fit( X ).transform( X ) ,也就是一步到位,看下例:
[color=rgba(0, 0, 0, 0.749019607843137)]from sklearn.preprocessing import OneHotEncoder
[color=rgba(0, 0, 0, 0.749019607843137)]
[color=rgba(0, 0, 0, 0.749019607843137)]enc = OneHotEncoder(sparse = False)
[color=rgba(0, 0, 0, 0.749019607843137)]ans = enc.fit_transform([[0, 0, 3],
[color=rgba(0, 0, 0, 0.749019607843137)] [1, 1, 0],
[color=rgba(0, 0, 0, 0.749019607843137)] [0, 2, 1],
[color=rgba(0, 0, 0, 0.749019607843137)] [1, 0, 2]])
[color=rgba(0, 0, 0, 0.749019607843137)]
[color=rgba(0, 0, 0, 0.749019607843137)]print(ans)
[color=rgba(0, 0, 0, 0.749019607843137)] ''' 输出
[color=rgba(0, 0, 0, 0.749019607843137)] [[ 1. 0. 1. ..., 0. 0. 1.]
[color=rgba(0, 0, 0, 0.749019607843137)] [ 0. 1. 0. ..., 0. 0. 0.]
[color=rgba(0, 0, 0, 0.749019607843137)] [ 1. 0. 0. ..., 1. 0. 0.]
[color=rgba(0, 0, 0, 0.749019607843137)] [ 0. 1. 1. ..., 0. 1. 0.]]
[color=rgba(0, 0, 0, 0.749019607843137)] '''
结束:
以上只是OneHotEncoder的基本用法演示,更多高级的应用,有待进一步研究学习。
scikit-learn中的OneHotEncoder用法相关推荐
- 机器学习与Scikit Learn学习库
摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...
- Scikit Learn: 在python中机器学习
Warning 警告:有些没能理解的句子,我以自己的理解意译. 翻译自:Scikit Learn:Machine Learning in Python 作者: Fabian Pedregosa, Ga ...
- [转载]Scikit Learn: 在python中机器学习
原址:http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据集大小的示例:数码 ...
- python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别
之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...
- sql语句中的in用法示例_示例中JavaScript in操作符
sql语句中的in用法示例 One of the first topics you'll come across when learning JavaScript (or any other prog ...
- 【scikit-learn】如何用Python和SciKit Learn 0.18实现神经网络
本教程的代码和数据来自于 Springboard 的博客教程.本文的作者为 Jose Portilla,他是网络教育平台 Udemy 一门数据科学类课程的讲师. GitHub 链接:https://g ...
- python scikit learn 关闭开源_scikit learn 里没有神经网络?
本教程的代码和数据来自于 Springboard 的博客教程,希望能为你提供帮助.作者为 Jose Portilla,他是网络教育平台 Udemy 一门数据科学类课程的讲师. GitHub 链接:ht ...
- scikit - learn 做文本分类
文章来源: https://my.oschina.net/u/175377/blog/84420 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的句子,我以自 ...
- mysql中change用法,mysql 中alter的用法以及一些步骤
mysql 中alter的用法以及一些方法 在用到alter的时间,查到了这个文章,就copy下来了,详细进入下面链接: MySQL之alter语句用法总结 1:删除列 ALTER TABLE [表名 ...
- mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法
Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...
最新文章
- SAP 销售与分销模块定价完全实施手册(SAP SD Pricing Handbook)
- 深入理解springMVC
- Android Jetpack组件之数据库Room详解(三)
- LLVM4更新--简化对象定义
- 201673020127 词频统计软件项目报告
- code128条码c语言,C#生成code128条形码的方法
- JDK源码(15)-Class
- mysql 服务账号_MySql 账号管理
- 上传到服务器的图片访问的时候提示403 You don't have permission to access
- Linux下安装AliSQL(MySQL)及相关环境配置
- socket连接测试工具,window和linux下
- 计算机在网络通信方面的应用,分析计算机技术在通信中的应用
- blender建模制作课堂笔记
- web期末网站设计大作业 HTML+CSS+JS仿爱奇艺官网影视网站
- 网络安全 (九 缓冲区溢出metasploit)
- python接受键盘输入_Python读取键盘输入的2种方法
- 网吧无盘服务器2021,云更新无盘客户端
- Sametime SDK
- php获取当前日期所在自然周周一周末以及前后自然周始末
- Java 实现替换文件的指定内容