精华内容
下载资源
问答
  • 什么是OneHotEncoder2. 为什么使用OneHotEncoder来处理离散型特征?3. 不需要使用OneHotEncoder来处理的情况4. scikit-learn 中 OneHotEncoder 解析 1. 什么是OneHotEncoder One-Hot编码,又称为一位有效编码,主要...

    1. 什么是OneHotEncoder

    OneHotEncoder,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码(每个特征值都是一个状态),每个状态都由他独立的寄存器位,并且在任意时候只有一位有效(为1)。

    OneHotEncoder是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。

    2. 为什么使用OneHotEncoder来处理离散型特征?

    在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。而我们使用OneHotEncoder,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用OneHotEncoder,确实会让特征之间的距离计算更加合理。

    比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用OneHotEncoder,其表示分别是 x 1 = ( 1 ) , x 2 = ( 2 ) , x 3 = ( 3 ) x_1 = (1), x_2 = (2), x_3 = (3) x1=(1),x2=(2),x3=(3)。两个工作之间的距离是, ( x 1 , x 2 ) = 1 , d ( x 2 , x 3 ) = 1 , d ( x 1 , x 3 ) = 2 (x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2 (x1,x2)=1,d(x2,x3)=1,d(x1,x3)=2。那么 x 1 x_1 x1 x 3 x_3 x3工作之间就越不相似吗?显然这样的表示,计算出来的特征的距离是不合理。那如果使用OneHotEncoder,则得到 x 1 = ( 1 , 0 , 0 ) , x 2 = ( 0 , 1 , 0 ) , x 3 = ( 0 , 0 , 1 ) x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1) x1=(1,0,0),x2=(0,1,0),x3=(0,0,1),那么两个工作之间的距离就都是 2 \sqrt2 2 .即每两个工作之间的距离是一样的,显得更合理。

    3. 不需要使用OneHotEncoder来处理的情况

    将离散型特征进行OneHotEncoder的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行OneHotEncoder。

    比如,该离散特征共有1000个取值,我们分成两组,分别是400和600,两个小组之间的距离有合适的定义,组内的距离也有合适的定义,那就没必要用one-hot 编码。

    离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。

    4. scikit-learn 中 OneHotEncoder 解析

    在 sklearn 包中,OneHotEncoder 函数非常实用,它可以实现将分类特征的每个元素转化为一个可以用来计算的值。本篇详细讲解该函数的用法,也可以参考官网 sklearn.preprocessing.OneHotEncoder

    该函数在 sklearn.preprocessing 类中,格式为:

    OneHotEncoder(n_values=’auto’,  categorical_features=all,  dtype=<class ‘numpy.float64’>,  sparse=True,  handle_unknown=’error’)
    

    下面解释一下函数中参数的意思

    1. n_values=’auto’
      表示每个特征使用几维的数值由数据集自动推断,即几种类别就使用几位来表示。当然也可以自己指定,看下面这个例子:
    from sklearn.preprocessing import  OneHotEncoder
    enc = OneHotEncoder(n_values = [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.]]
    

    注意到训练样本中第二个特征列没有类别 2,但是结果中依然将类别 2 给编码了出来,这就是自己指定维数的作用了(我们使用 3 位来表示第二个特征,自然包括了类别 2),第三列特征同样如此。这也告诫我们,如果训练样本中有丢失的分类特征值,我们就必须显示地设置参数 n_values 了,这样防止编码出错。

    1. 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.]]
    

    输出结果中前两位 [1,0] 表示 0,中间四位 [0,0,0,1] 表示对第三个特征 3 编码,第二个特征 2 没有进行编码,就放在最后一位。

    1. dtype=<class ‘numpy.float64’>
      表示编码数值格式,默认是浮点型。

    2. sparse=True
      表示编码的格式,默认为 True,即为稀疏的格式,指定 False 则就不用 toarray() 了

    3. handle_unknown=’error’
      其值可以指定为 “error” 或者 “ignore”,即如果碰到未知的类别,是返回一个错误还是忽略它。

    4. transform(X) 方法和 fit_transform(X) 方法
      对 X 进行编码。在实际应用中,我们更常用方法 fit_transform(),也就是一步到位,看下例:

    from sklearn.preprocessing import  OneHotEncoder
    
    enc = OneHotEncoder(sparse = False) 
    ans = enc.fit_transform([[0, 0, 3],
                             [1, 1, 0],
                             [0, 2, 1],
                             [1, 0, 2]])
    
    print(ans) # 输出 [[ 1.  0.  1. ...,  0.  0.  1.]
               #      [ 0.  1.  0. ...,  0.  0.  0.]
               #      [ 1.  0.  0. ...,  1.  0.  0.]
               #      [ 0.  1.  1. ...,  0.  1.  0.]]
    

    5. 举个栗子

    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…] 也就是表示该特征为 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 中 OneHotEncoder 解析

    展开全文
  • 初始化OneHotEncoder实例时,默认sparse参数为True,编码后返回的是一个稀疏矩阵的对象,如果要使用一般要调用toarray()方法转化成array对象。若将sparse参数设置为False,则直接生成array对象,可直接使用。 ...

    初始化OneHotEncoder实例时,默认sparse参数为True,编码后返回的是一个稀疏矩阵的对象,如果要使用一般要调用toarray()方法转化成array对象。若将sparse参数设置为False,则直接生成array对象,可直接使用。

    展开全文
  • 在 sklearn 包中,OneHotEncoder 函数非常实用,它可以实现将分类特征的每个元素转化为一个可以用来计算的值。本篇详细讲解该函数的用法,也可以参考官网sklearn.preprocessing.OneHotEncoder

    概要

    在 sklearn 包中,OneHotEncoder 函数非常实用,它可以实现将分类特征的每个元素转化为一个可以用来计算的值。本篇详细讲解该函数的用法,也可以参考官网 sklearn.preprocessing.OneHotEncoder

    解析

     
    该函数在 sklearn.preprocessing 类中,格式为:

    OneHotEncoder(
        n_values=’auto’, 
        categorical_features=’all’,  
        dtype=<class ‘numpy.float64’>,  
        sparse=True,  
        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 = Fa
    展开全文
  • Sklearn 中 OneHotEncoder 解析

    千次阅读 2020-06-23 21:36:29
    将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编码后,编码后的特征,其实...OneHotEncoder(n_values=’auto’, categorical_features=’all’, dtype=<class ‘numpy.float.

    将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。 

    from sklearn.preprocessing import OneHotEncode

    参数:

    OneHotEncoder(n_values=’auto’,  categorical_features=’all’,  dtype=<class ‘numpy.float64’>,  sparse=True,  handle_unknown=’error’)

    handle_unknown是一个比较有用的参数,默认是"error",指定为"ignore”更好,这个参数的目的是数据在转化为one-hot编码时,如果遇到一个属性值没有事先指定,程序应该怎么办?如果是error的话,程序就报错停止了,其实不方便处理数据,反而是ignore更好,程序可以继续执行
    一个例子:

    enc = OneHotEncoder()
    
    enc.fit([["男", 0, 3], ["男", 1, 0], ["女", 2, 1], ["女", 0, 2]])

    首先训练一下数据集,提取每一列的属性种类:

    print(enc.categories_)
    [array(['女', '男'], dtype=object), array([0, 1, 2], dtype=object), array([0, 1, 2, 3], dtype=object)]

    一个例子:

    from sklearn.preprocessing import  OneHotEncoder
    
    enc = OneHotEncoder()
    enc.fit([[0, 0, 3],
             [1, 1, 0],
             [0, 2, 1],
             [1, 0, 2]])
    
    # 如果不加 toarray() 的话,输出的是稀疏的存储格式,即索引加值的形式,也可以通过参数指定 sparse = False 来达到同样的效果
    ans = enc.transform([[0, 1, 3]]).toarray()  
    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
    • 虽然训练样本中的数值仅仅代表类别,但是也必须使用数值格式的数据,如果使用字符串格式的数据会报错。

     n_values=’auto’,表示每个特征使用几维的数值由数据集自动推断,即几种类别就使用几位来表示。

    展开全文
  • 官方文档:sklearn.preprocessing.OneHotEncoder 官方示例: 更多参数,查阅官方文档。 完。
  • sklearn.preprocessing.OneHotEncoder

    千次阅读 2017-07-12 08:52:42
    sklearn.preprocessing.OneHotEncoder(n_values=’auto’, categorical_features=’all’,dtype=, sparse=True,handle_unknown=’error’)用于处理分类变量,将变量的特征值转换为稀疏矩阵 主要参数说明: n_values...
  • sklearn:OneHotEncoder的简单用法

    千次阅读 2019-06-29 00:10:34
    将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的...enc = OneHotEncoder() 在新版本中,初始化参数有5个,分别是c...
  • sklearn之OneHotEncoder

    2019-12-13 17:05:25
    OneHotEncoder(n_values = 'auto',categorical_features='all',dtype=<class 'numpy.float64'),sparse=True,handle_unknown = 'error') 1、One-Hot编码也称为“独热”式编码,既然独热是只能有一位是“发光...
  • 为什么要独热编码?...使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编...
  • 在 sklearn 包中,OneHotEncoder 函数非常实用,它可以实现将分类特征的每个元素转化为一个可以用来计算的值。本篇详细讲解该函数的用法,也可以参考官网 sklearn.preprocessing.OneHotEncoder。 解析 该函数在 ...
  • scikit-learn中的OneHotEncoder用法小结

    千次阅读 2019-07-18 13:59:08
    OneHotEncoder 可用于将分类特征的每个元素转化为一个可直接计算的数值,也即特征值数字化,常用于特征工程中的数据预处理。 其本质是One-Hot编码在scikit-learn中的实现。 One-Hot One-Hot编码,又称为一位有效编码...
  • (sklearn自带的实例sklearn.preprocessing.OneHotEncoder) 给定具有三个特征和四个样本的数据集,让编码器找到每个特征的最大值并将数据转换为二进制one-hot encoding。 """ Given a dataset with three features ...
  • sklearn.preprocessing.OneHotEncoder()函数介绍 sklearn.preprocessing.OneHotEncoder(categories=‘auto’, drop=None, sparse=True,dtype=np.float64, handle_unknown=‘error’) 本博客主要想对categories参数的...
  • 1.OneHotEncoder from sklearn.preprocessing import OneHotEncoder,LabelEncoder #enc=OneHotEncoder() #enc.fit(data_100) #ans=enc.transform(data_200).toarray() le = LabelEncoder() le.fit(data_100) a.....
  • 1)在采用MLPRegressor()以前是不是要针对这几列数据进行OneHotEncoder(); 2)怎么对数据集对象单独几列进行独热编码,baidu都是清一色的整个数据集对象OneHotEncoder() 2.源码 new_data =np.array...
  • pyspark 代码练习8 —— OneHotEncoder

    千次阅读 2019-09-14 19:56:01
    不使用pipeline版本 ...from pyspark.ml.feature import OneHotEncoder, StringIndexer df = spark.createDataFrame([ (0, "a"), (1, "b"), (2, "c"), (3, "a"), (4, "a"), (5, "c") ], ["id", "v...
  • 1、获取编码后的特征名称 ...将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。...enc = OneHotEncoder() 1 在新版本
  • scikit-learn中的OneHotEncoder用法

    千次阅读 2019-12-11 11:06:36
    OneHotEncoder 可用于将分类特征的每个元素转化为一个可直接计算的数值,也即特征值数字化,常用于特征工程中的数据预处理。其本质是One-Hot编码在scikit-learn中的实现。One-HotOne-Hot编码,又称为一位有效编码,...
  • LabelEncoder与OneHotEncoder

    2019-07-25 13:48:21
    注意:在使用OneHotEncoder进行OneHot编码的时候,需要先将字符串转换成为整数之后才能进行OneHot编码,不然会报错。 使用pandas来实现oneHot编码 import pandas as pd import numpy as np from sklearn....
  • LabelEncoder和OneHotEncoder

    2019-01-03 10:25:06
    oneHotEncoder = OneHotEncoder ( ) x = oneHotEncoder . fit_transform ( [ [ 2 ] , [ 1 ] , [ 3 ] , [ 4 ] ] ) . toarray ( ) ''' [[0. 1. 0. 0.] [1. 0. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1...
  • OneHotEncoder ( ) enc . fit ( [ [ 0 , 0 , 3 ] , [ 1 , 1 , 0 ] , [ 0 , 2 , 1 ] , [ 1 , 0 , 2 ] ] ) # fit来学习编码 enc . transform ( [ [ 0 , 1 , 3 ] ] ) . toarray ( ) # ...
  • OneHotEncoder()函数

    千次阅读 2020-11-07 20:50:47
    编码类别 1. OrdinalEncoder 哑编码 作用 有时候特征不是连续值而是间断值,例如一个人的性别的值域为["male", "female"],国籍的值域为["from Europe", "from US", "from Asia"],常用浏览器的值域为["uses Firefox...
  • pyspark OneHotEncoder用法实例

    千次阅读 2019-10-10 21:29:43
    def encode_columns(df, col_list): indexers = [ StringIndexer(inputCol=c, outputCol=f'{c}_indexed').setHandleInvalid("keep") ... encoder = OneHotEncoderEstimator( inputCols = [in...
  • OneHotEncoder独热编码和LabelEncoder标签编码

    万次阅读 多人点赞 2018-09-22 14:51:20
    OneHotEncoder独热编码 学习sklearn和kagggle时遇到的问题,什么是独热编码?为什么要用独热编码?什么情况下可以用独热编码?以及和其他几种编码方式的区别。 首先了解机器学习中的特征类别:连续型特征和离散型...
  • OneHotEncoder独热编码和 LabelEncoder标签编码 学习sklearn和kagggle时遇到的问题,什么是独热编码?为什么要用独热编码?什么情况下可以用独热编码?以及和其他几种编码方式的区别。 首先了解机器学习中的特征...
  • 概要 sklearn包中的OneHotEncder又称独热编码,作用:将定性特征转化为定量特征。 解析 该函数在sklearn.preprocessing类中,格式为: ...OneHotEncoder(n_values=’auto’, categorical_features=’...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,900
精华内容 2,360
关键字:

onehotencoder参数