在我们数据分析、建模的时候,首先要处理的就是各种数据,数据的类型也不仅仅局限于连续型数值。比如,性别、城市名等等此类的指标也是很多的。这种类型, 它是不具备序列性、也不能比较大小的,如果这个时候简单的用数字来替换,那么就给这种赋予了大小的属性,这就会影响权重矩阵的计算。这个时候,就可以用One-Hot编码(也有人称独热编码)这种特殊的编码方式了。

举例解释下为什么直接转变为数值型数据会有问题:对于分类型数据,如果种类较多,转变为分类1,2,3,4等来表示,带入到模型中,就被认为连续变量,并且如果同样的数据,一个分类被1代表,另一个分类被1000代表,1000和1对模型的影响明显不同,会影响统一特征在样本中的权重。

One-Hot编码是用N位状态寄存器来对N个状态进行编码。一个变量,共有3个分类值(ABC),那么N为3,对应的One-Hot编码可以表示为100,010,001。

对于连续型数据,有时候我们也需要做特征转换,比如说人的年龄,这个分布可能会从0一直到100,但其实他们的分布可能集中在10-40之间,那么我们可以将这种连续型的数据处理为分类变量。比如:0-18:1;19-30:2;30-40:3,40-60:4,60+:5,这样做的好处是提高模型运算的效率。比如用LR算法做模型,在数据处理过程中,可以先对连续变量进行离散化处理,然后对离散化后数据进行One-Hot编码,最后放入LR模型中。这样可以增强模型的非线性能力。

优缺点
(1)通过One-Hot编码,可以对特征进行了扩充。
(2)连续变量经过编码后,从一个权重变为多个权重,提升了模型的非线性能力。
(3)不需要多参数进行归一化处理。
(4)随着将大权重拆分成几个小权重管理特征,降低了异常值对模型的影响,增加了模型稳定性。
(5)生成了较大的稀疏矩阵。

接下来就是在Python中实现此方法:

from sklearn.preprocessing import OneHotEncoder#导入One-Hot编码
import pandas as pd#创建一个数据集,放入dataframe中
data = [['语文',125],['数学',140],['英语',130],['地理',80],['历史',90],['物理',80],['化学',90]]
data = pd.DataFrame(data,columns=['titile','分数'])
#把带title这一列转换为数值型,因为one-hot编码也需要先转换成数值型
list = data.ix[:,'titile'].unique()#取出唯一的列的值
#用简单的数字直接代表即可
for j in range(len(list )):data.ix[:,'titile'] = data.ix[:,'titile'].apply(lambda x:j if x==list [j] else x)
print(data)

这里先看一下转化的结果:

 titile   分数
0       0  125
1       1  140
2       2  130
3       3   80
4       4   90
5       5   80
6       6   90

然后用One-Hot编码来处理:

#进行one-hot编码
#先取出title这一列的值
tempdata = data[['titile']]#使用One-Hot编码
enc = OneHotEncoder()
enc.fit(tempdata)#one-hot编码的结果是比较奇怪的,最好是先转换成二维数组
tempdata = enc.transform(tempdata).toarray()
print(tempdata)
print('取值范围整数个数:',enc.n_values_)

先看下直接One-Hot的结果:

[[1. 0. 0. 0. 0. 0. 0.][0. 1. 0. 0. 0. 0. 0.][0. 0. 1. 0. 0. 0. 0.][0. 0. 0. 1. 0. 0. 0.][0. 0. 0. 0. 1. 0. 0.][0. 0. 0. 0. 0. 1. 0.][0. 0. 0. 0. 0. 0. 1.]]
取值范围整数个数: [7]

将这个结果转成dataframe中的列:

#再将二维数组转换为DataFrame,这里多列用一样的列名
tempdata = pd.DataFrame(tempdata,columns=['titile']*len(tempdata[0]))
print(tempdata)
titile  titile  titile  titile  titile  titile  titile
0     1.0     0.0     0.0     0.0     0.0     0.0     0.0
1     0.0     1.0     0.0     0.0     0.0     0.0     0.0
2     0.0     0.0     1.0     0.0     0.0     0.0     0.0
3     0.0     0.0     0.0     1.0     0.0     0.0     0.0
4     0.0     0.0     0.0     0.0     1.0     0.0     0.0
5     0.0     0.0     0.0     0.0     0.0     1.0     0.0
6     0.0     0.0     0.0     0.0     0.0     0.0     1.0

以上就是一个简单的独热编码的过程了~

【Python】数据处理之One-Hot编码相关推荐

  1. Python数据处理(一):处理 JSON、XML、CSV 三种格式数据

    Python 数据处理系列博客来啦! 本系列将以<Python数据处理>这本书为基础,以书中每章一篇博客的形式带大家一起学习 Python 数据处理.书中有些地方讲的不太详细,我会查阅其他 ...

  2. Python 数据处理工具 Pandas(上)

    序列与数据框的构造 外部数据的读取(文本文件读取.电子表格读取.数据库数据读取) 数据类型转换及描述统计 字符与日期数据的处理 数据清洗方法(重复观测处理.缺失值处理.异常值处理) 数据子集的获取 透 ...

  3. python数据处理模块pandas_数据处理工具--Pandas模块

    强大的数据处理模块Pandas,可以解决数据的预处理工作,如数据类型的转换.缺失值的处理.描述性统计分析和数据的汇总等 一.序列与数据框的构造 Pandas模块的核心操作对象为序列和数据框.序列指数据 ...

  4. Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式

    Python 对图像进行base64编码及解码读取为numpy.opencv.matplot需要的格式 1. 效果图 2. 源码 参考 这篇博客将介绍Python如何对图像进行base64编解码及读取 ...

  5. 【廖雪峰python入门笔记】Unicode编码_UnicodeDecodeError处理

    1.Unicode编码的由来 字符串还有一个编码问题. 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以, ...

  6. 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)

    机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding) 序号编码:序号编码通常用于处理类别间具有大小关系的数据 可以通过导入sklearn.preproce ...

  7. 对python 数据处理中的LabelEncoder 和 OneHotEncoder详解

    对python 数据处理中的LabelEncoder 和 OneHotEncoder详解_起飞的木木的博客-CSDN博客_labelencoder原理

  8. python numpy数组和one-hot编码相互转换

    a=[0,0,1,0,1,0,1]result=[] for i, x in enumerate(a):if x==1:result.append(i)print(result) python num ...

  9. python代码大全o-python文件编码及执行

    兼容中文编码 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码. 当Python解释器读取源代码时,为了让它按UTF-8编 ...

  10. python数据处理实例-Python数据处理numpy.median的实例讲解

    numpy模块下的median作用为: 计算沿指定轴的中位数 返回数组元素的中位数 其函数接口为: median(a, axis=None, out=None, overwrite_input=Fal ...

最新文章

  1. 弹性盒子内容体居右对其_CSS怎么实现弹性盒中的元素居中对齐
  2. Java面试经典题:线程池的成长之路
  3. 数据可视化(matplotlib绘图)
  4. python如何跳出外层循环_失去循环标签的Python,我这样实现跳出外层循环
  5. C语言 · 出栈次序
  6. Android 获取包名,版本信息及VersionName名称
  7. BZOJ 1001 狼捉兔子
  8. web的case点总结
  9. laravel5.5表单验证
  10. Tensorflow 中添加正则化项
  11. Cisco Equipment Configuration SSH login
  12. :visible.sync 的作用
  13. 拓端tecdat|sas神经网络:构建人工神经网络模型来识别垃圾邮件
  14. android虚拟pdf打印机,虚拟打印机PDF
  15. 软件分享:Everthing
  16. 加百列丨浅谈大水面水产养殖的几个误区及对策
  17. 基于中文语义词典的语义相关度量方法比较研究
  18. C++ 检索 IP地址
  19. Mysql查询时间段内数据,并处理相同日期或同类型的数据
  20. 6个免费PPT模板网站,简直不要太好用

热门文章

  1. C# XmlDocument.Save文件操作System.IO.IOException:The process cannot access the file because it is being
  2. OL3+中链家地图找房功能实现
  3. csm和uefi_如何以简单正确的姿势理解“UEFI”和“BIOS”?
  4. java二叉树详解_最全二叉树:完整详解二叉树的遍历以及完全二叉树等6种二叉树...
  5. 数据库篇--update触发器
  6. Android裁剪图片总结
  7. 纯干货:嘀嘀打车App初期是怎么推广的? 钱皓-互联网分析师,微信号(qianhaoapp)
  8. 如何成为一名优秀的程序员
  9. 96K的3d FPS游戏-毁灭杀手(kkrieger)
  10. 关于起点中文网的一个我自认为是BUG的BUG(花了我一毛三分钱才实验出来的)...