精华内容
下载资源
问答
  • 独热编码
    2021-08-31 19:08:19

    有些数据集给的标签是字符串形式,比如wisdm,在放进网络之前,需要转为数字型的编码

    这可以通过pd.Categorical(a).codes实现

    import numpy as np
    import pandas as pd
    
    a = ["standing", "sitting", "jogging", "walking", "upstairs", "downstairs", "standing"]
    num_label = pd.Categorical(a).codes
    print(num_label)

    输出结果是

    [3 2 1 5 4 0 3]

    顺便提一下如何转为独热编码以及独热编码如何转为普通编码

    转独热

    a_one_hot = np.asarray(pd.get_dummies(a), dtype=np.int8)
    print(a_one_hot)

    输出

    [[0 0 0 1 0 0]
     [0 0 1 0 0 0]
     [0 1 0 0 0 0]
     [0 0 0 0 0 1]
     [0 0 0 0 1 0]
     [1 0 0 0 0 0]
     [0 0 0 1 0 0]]

    pytorch中scatter() 和 scatter_()也可以用来转独热

    PyTorch笔记之 scatter() 函数 - 那少年和狗 - 博客园

    独热转普通编码

    print(np.array([np.argmax(i)for i in a_one_hot]))
    # 或者
    print(np.argmax(a_one_hot, axis=-1))

    输出

    [3 2 1 5 4 0 3]
    [3 2 1 5 4 0 3]

    更多相关内容
  • 下面将给出两种预测onehot编码方法,其中模型用LinearRegression。 汽车数据 密码:7izi 2.训练+预测 2.1.get_dummies方法 import pandas as pd df = pd.read_csv('carprices.csv') dummies = pd.get_dummies(df['Car...
  • softmax分类 独热编码

    2021-01-20 11:58:38
    对数几率回归解决的是二分类的问题, 对于多个选项的问题,我们可以使用softmax函数,它是对数几率回归在 N 个可能不同的值上的推广。 神经网络的原始输出不是一个概率值,实质上只是输入的数值做了复杂的加权和...
  • 下图展示如何进行独热编码,把Team变量转为新的变量:下面把原始变量转为独热编码形式:R 有多种方式很容易实现独热编码。可以使用工具包提供函数实现,也可以手动实现。下面定义演示数据: 我们先看caret包中提供

    大部分机器学习算法是基于向量空间中度量来进行计算的,使用独热编码(One-hot encoding, 也称为哑变量 dummy variable)会让特征之间的距离计算更加合理。通过独热编码把类别变量转换为机器学习算法可使用的格式,其基本思想是对原始类别变量的每个值创建新的变量,并赋值为 1 和 0
    在这里插入图片描述

    示例说明

    下图展示如何进行独热编码,把Team变量转为新的变量:

    TeamPoints
    A25
    A12
    B15
    B14
    B19
    B23
    C25
    C29

    下面把原始变量转为独热编码形式:

    Team_ATeam_BTeam_CPoints
    10025
    10012
    01015
    01014
    01019
    01023
    00125
    00129

    R 语言实现

    R 有多种方式很容易实现独热编码。可以使用工具包提供函数实现,也可以手动实现。下面定义演示数据:

    # 定义数据框
    df <- data.frame(team=c('A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'),
                     points=c(25, 12, 15, 14, 19, 23, 25, 29))
    
    # 查看数据
    df
    
    #   team points
    # 1    A     25
    # 2    A     12
    # 3    B     15
    # 4    B     14
    # 5    B     19
    # 6    B     23
    # 7    C     25
    # 8    C     29
    

    我们先看caret包中提供了dummyVars()函数,它可以方便实现独热编码:

    library(caret)
    
    # 定义独热编码函数
    dummy <- dummyVars(" ~ .", data=df)
    
    # 在数据框df上执行独热编码函数
    final_df <- data.frame(predict(dummy, newdata=df))
    
    # 查看结果
    final_df
    
    #  teamA teamB teamC points
    # 1     1     0     0     25
    # 2     1     0     0     12
    # 3     0     1     0     15
    # 4     0     1     0     14
    # 5     0     1     0     19
    # 6     0     1     0     23
    # 7     0     0     1     25
    # 8     0     0     1     29 
    

    另外fastDummies包提供的dummy_cols也可以轻松完成:

    library(fastDummies)
    
    df2 <- dummy_cols(df, select_columns = "team")
    df2
    
    #  team_A team_B team_C points
    # 1     1     0     0     25
    # 2     1     0     0     12
    # 3     0     1     0     15
    # 4     0     1     0     14
    # 5     0     1     0     19
    # 6     0     1     0     23
    # 7     0     0     1     25
    # 8     0     0     1     29 
    

    当然我们也可以手动实现:

    df$teamA <- ifelse(df$team=='A',1,0)
    df$teamB <- ifelse(df$team=='B',1,0)
    df$teamC <- ifelse(df$team=='C',1,0)
    df
    
    #   team points teamA teamB teamC
    # 1    A     25     1     0     0
    # 2    A     12     1     0     0
    # 3    B     15     0     1     0
    # 4    B     14     0     1     0
    # 5    B     19     0     1     0
    # 6    B     23     0     1     0
    # 7    C     25     0     0     1
    # 8    C     29     0     0     1
    

    Python实现

    import pandas as pd
    
    # 定义数据框
    df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'],
                       'points': [25, 12, 15, 14, 19, 23, 25, 29]})
    
    # 查看结果
    print(df)
    

    sklearn 库提供的OneHotEncoder() 函数用于对pandas数据框实现独热编码:

    from sklearn.preprocessing import OneHotEncoder
    
    # 创建实例
    encoder = OneHotEncoder(handle_unknown='ignore')
    
    # 对team列执行独热编码
    encoder_df = pd.DataFrame(encoder.fit_transform(df[['team']]).toarray())
    
    # 往源数据框中合并独热编码列
    final_df = df.join(encoder_df)
    
    # 查看数据
    print(final_df)
    
    #   team  points    0    1    2
    # 0    A      25  1.0  0.0  0.0
    # 1    A      12  1.0  0.0  0.0
    # 2    B      15  0.0  1.0  0.0
    # 3    B      14  0.0  1.0  0.0
    # 4    B      19  0.0  1.0  0.0
    # 5    B      23  0.0  1.0  0.0
    # 6    C      25  0.0  0.0  1.0
    # 7    C      29  0.0  0.0  1.0
    
    # 删除 'team' 列
    final_df.drop('team', axis=1, inplace=True)
    
    # 重命名列
    final_df.columns = ['points', 'teamA', 'teamB', 'teamC']
    
    print(final_df)
    
    #    points  teamA  teamB  teamC
    # 0      25    1.0    0.0    0.0
    # 1      12    1.0    0.0    0.0
    # 2      15    0.0    1.0    0.0
    # 3      14    0.0    1.0    0.0
    # 4      19    0.0    1.0    0.0
    # 5      23    0.0    1.0    0.0
    # 6      25    0.0    0.0    1.0
    # 7      29    0.0    0.0    1.0
    
    展开全文
  • 特征工程-独热编码

    2021-09-06 15:34:42
    ,axis=1))####去掉目标变量之后,进行独热编码 clusters=drug["Drug"]###只是替换了训练特征,目标特征倒是不用独热编码,不然会替换原有特征,无法训练 ###目标变量就和之前监督学习里面的训练一样,作为独立的一列...

    到目前为止,我们一直假设数据是由浮点数组成的二维数组,其中每一列是描述数据点的连续特征。对于许多应用而言,数据的收集方式并不是这样。一种特别常见的特征类型就是分类特征,也叫离散特征。这种特征通常并不是数值。分类特征与连续特征之间的区别类似于分类和回归之间的区别,只是前者在输入端而不是输出端。其实,无论你的数据包含哪种类型的特征,数据表示方式都会对机器学习模型的性能产生巨大影响。譬如说我们之前讲过的数据缩放

    对于某个特定的应用来说,如何找到最佳数据表示,这个问题被称为特征工程,它是数据科学家和机器学习从业者在尝试解决现实世界问题时的主要任务之一。用正确的方式表示数据,对监督模型性能的影响比所选择的精确参数还要大。

    One-Hot编码(虚拟变量)

    到目前为止,表示分类变量最常用的方法就是使用one-hot编码N取一编码,也叫虚拟变量。虚拟变量背后的思想是将一个分类变量替换为一个或多个新特征,新特征取值为0或1.对于线性二分类(以及scikit-learn中其他所有模型)的公式而言,0和1这两个值是有意义的,我们可以像这样对每个类别引入一个新特征,从而表示任意数量的类别。

    接下来,我用实际数据来讲解一下独热编码。

    数据来源

    药品分类:https://www.kaggle.com/prathamtripathi/drug-classification
    在这里插入图片描述
    该数据集有200条特征记录,包含患者年龄,性别,血压水平 (BP),胆固醇水平,钠钾比共5个特征值,而我们所需要做的就是通过这些特征值,对患者的用药(Drug)进行分类。

    数据处理

    1.读取数据

    import pandas as pd
    import winreg
    ###################
    real_address = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',)
    file_address=winreg.QueryValueEx(real_address, "Desktop")[0]
    file_address+='\\'
    file_origin=file_address+"\\源数据-分析\\drug200.csv"###https://www.kaggle.com/prathamtripathi/drug-classification
    drug=pd.read_csv(file_origin)
    #设立桌面绝对路径,读取源数据文件,这样将数据直接下载到桌面上就可以了,省得还要去找
    ###################
    

    因为之前每次下载数据之后都要将文件转移到python根目录里面,或者到下载文件夹里面去读取,很麻烦。所以我通过winreg库,来设立绝对桌面路径,这样只要把数据下载到桌面上,或者粘到桌面上的特定文件夹里面去读取就好了,不会跟其它数据搞混。
    其实到这一步都是在走流程,基本上每个数据挖掘都要来一遍,没什么好说的。

    2.检查分类数据

    读取完数据集之后,最好先检查每一列是否包含有意义的分类数据。在处理人工(比如用户调查)输入的数据时,可能没有固定的类别,拼写和大小写也存在差异,因此可能需要预处理。比如,有人可能将性别填为”M“,有人可能填为”m“,虽然他们都代表男性,但是对于电脑来说,他们却是分属两个类别。

    检查列的内容有一个好办法,就是使用pandas_Series的value_counts函数,以显示唯一值及其出现次数:
    在这里插入图片描述
    可以看到,在这个数据集中Drug刚好有5个值,这说明数据格式已经很好,可以用one-hot编码来表示。在实际应用中,你应该查看并检查所有列的值。为简洁起见,这里我们将跳过这一步。

    独热编码

    用pandas编码数据有一种非常简单的方法,就是使用get_dummies函数。get_dummies函数自动变换所有具有对象类型(比如字符串)的列或所有分类的列:

    drug_dummies=pd.get_dummies(drug)
    

    结果如下所示:
    在这里插入图片描述
    可以看到,连续特征Age和Na_to_K没有发生变化,而分类特征的每个可能取值都被扩展为一个新特征。实际上,就是利用多个新特征对一个分类特征进行编码(如Sex_F和Sex_M)。在机器学习中使用此数据时,我们将会删除原有特征,仅保证0-1特征(有点类似于统计学里面的离散变量)。

    接下来,我们在变化后的数据集上训练一个Logistic回归分类器。

    训练模型

    之前,我在LogisticRegression算法中已经讲解过算法原理了,这里就不再赘述了,感兴趣的朋友可以点击链接去查看下。

    我们已经知道Logistic回归利用下列公式进行预测,预测值为y:

    y=w[0]*x[0]+w[1]x[1]+w[2]x[2]+…+w[p]x[p]+b

    其中w[i]和b是从训练集中学到的系数,X[i]是输入特征。显然,只有当x[i]是数字时这个公式才有意义。所以,独热编码的作用就体现出来了。

    接下来,我们开始训练模型:

    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LogisticRegression
    from sklearn.metrics import accuracy_score
    train=pd.get_dummies(drug.drop(["Drug"],axis=1))####去掉目标变量之后,进行独热编码
    clusters=drug["Drug"]###只是替换了训练特征,目标特征倒是不用独热编码,不然会替换原有特征,无法训练
    ###目标变量就和之前监督学习里面的训练一样,作为独立的一列变量存在就好,独热编码只是用来修改训练特征变量,就跟连续变量一样
    X_train,X_test,y_train,y_test=train_test_split(train,clusters,random_state=1)
    logistic=LogisticRegression(C=20,solver='lbfgs',max_iter=10000)
    logistic.fit(X_train,y_train)
    print("Logistic训练模型评分:"+str(accuracy_score(y_train,logistic.predict(X_train))))
    print("Logistic待测模型评分:"+str(accuracy_score(y_test,logistic.predict(X_test))))
    

    结果如下所示:
    在这里插入图片描述
    在这个例子中,我们对同时包含训练数据和测试数据的数据框调用get_dummies。这一点很重要,可以确保训练集和测试集中分类变量的表示方式相同。

    数字可以编码分类变量

    在上面的例子中,分类变量被编码为字符串。一方面,可能会有拼写错误;但另一方面,它明确地将一个变量标记为分类变量。无论是为了便于存储还是因为数据的收集方式,分类变量通常被编码为整数。例如,在性别Sex这一特征中,用1指代男性,用2指代女性等等。现在该列包含数字1和2,而不是像“F”和“M”这样的字符串。如果有人观察表示数据集的表格,很难一眼看出这个变量应该被视为连续变量还是分类变量。但是,如果知道这些数字表示的是性别,那么很明显它们是不同的状态,不应该用单个连续变量来建模。

    pandas的get_dummies函数将所有数字看作是连续的,不会为其创建虚拟变量。为了解决这个问题,你也可以使用scikit-learn的OneHotEncoder,指定哪些变量是连续的,哪些变量是离散的,你也可以将数据框转换为字符串。为了说明这一点,我们创建一个两列的DataFrame对象,其中一列包含字符串,另一列包含整数:
    在这里插入图片描述
    如果使用get_dummies只会编码字符串特征,不会改变整数特征:
    在这里插入图片描述
    如果你向为“整数特征”这一列创建虚拟变量,可以使用columns参数显式地给出想要编码的列。于是两个特征都会被当作分类特征处理:
    在这里插入图片描述
    个人博客:https://www.yyb705.com/
    欢迎大家来我的个人博客逛一逛,里面不仅有技术文,也有系列书籍的内化笔记。
    有很多地方做的不是很好,欢迎网友来提出建议,也希望可以遇到些朋友来一起交流讨论。

    展开全文
  • 独热编码

    千次阅读 2017-07-24 21:26:55
    针对这个问题,一种可能的解决方案是采用独热编码( One-Hot Encoding ),独热,顾名思义,就是编码中只有一个位是有效的,所以又称为“一位有效编码”。   例如上面的特征 “性别”,有 2 个可能的分类: ...

    在数据样本中,有些特征不是连续值,而是一些离散值。举个网站访问数据例子:


    1 网站访问数据集

    序号

    性别

    所属区域

    使用浏览器

    1.

    Male

    Europe

    Firefox

    2.

    Female

    US

    Chrome

    3.

    Male

    Asia

    Safari

    4.

    Female

    Europe

    IE

    5.

    Female

    US

    Firefox

    6.

    Female

    Asia

    Chrome

    7.

    Male

    Europe

    Safari

    8.

    Male

    US

    Chrome

    ......

    ......

    ......

    ......

     

    其中性别、所属区域、使用浏览器都是分类值。这在机器学习算法中不太好处理,所以一般将特征的离散值用数字表示。例如将male编码为0female编码为1Europe编码为0US编码为1Asia编码为2Firefox编码为0Chrome编码为1Safari编码为2IE编码为3

     

    则上表中的8条记录可以表示成:

    序号

    性别

    所属区域

    使用浏览器

    1. 

    0

    0

    0

    2. 

    1

    1

    1

    3. 

    0

    2

    2

    4. 

    1

    0

    3

    5. 

    1

    1

    0

    6. 

    1

    2

    1

    7. 

    0

    0

    2

    8. 

    0

    1

    1

    ......

    ......

    ......

    ......

     

    但是,即使转化为数字,上述数据也不能直接用在我们的分类模型中。因为,分类器默认的输入数据是连续的,并且是有序的。

     

    针对这个问题,一种可能的解决方案是采用独热编码(One-Hot Encoding),独热,顾名思义,就是编码中只有一个位是有效的,所以又称为“一位有效编码”。

     

    例如上面的特征“性别”,有2个可能的分类:malefemale。那么就可以用2位编码来表示:1001,每次只有1个位激活。

     

    “所属区域”,有3个可能的分类:即EuropeUSAsia。那么就用3位编码来表示:100010001,每次只有1个位激活。

     

    “使用浏览器”,有4个可能的分类:即FirefoxChromeSafariIE。那么就用4位编码来表示:1000010000100001,每次只有1个位激活。

     

    那么一条数据记录[‘male’,’Asia’,’Safari’],通过独热编码后就成为:[1,0,0,0,1,0,0,1,0]

     

    这样,每一条记录都被映射到欧式空间,可以用于计算特征之间的距离与相似度等,能够用于各种机器学习算法了。

     

    将上面的8条记录进行独热编码,则[‘male’,’Asia’,’Safari’]对应的独热编码是:[ 1.  0.  0.  0.  1.  0.  0.  1.  0.],程序如下:

     

    from sklearn.preprocessing import OneHotEncoder
    enc = OneHotEncoder()
    enc.fit([[0, 0, 0], [1, 1, 1], [0, 2, 2], [1, 0, 3], [1, 1, 0], [1, 2, 1], [0, 0, 2], [0, 1, 1]])
    print enc.transform([[0, 2, 2]]).toarray()

     

     当然,还可以使用pandas中的get_dummies进行one-hot编码。

     

     

    展开全文
  • pytorch独热编码

    2022-04-22 20:21:53
    将数【1,3,4,2】变成独热编码的形式,torch.zeros(4,5)中的4是数的个数,5表示数的最大值加1
  • 当我们的lable是顺序标签的时候,使用sparse_categorical_crossentropy作为损失函数,当我们的label是独热编码的时候,我们使用categorical_crossentropy作为损失函数。这个时候5元的标签也就编码为[1,0,0],10元的...
  • 独热编码(one-hot coding)

    千次阅读 2021-02-12 08:53:45
    1 为什么需要独热编码?直接上案例,一份数据,特征为[“颜色”, “尺码”, “喜欢度”, “类别”],具体数据为[[‘green’,’M’, 10.1,’class1′], [‘red’,’L’, 13.5,’class2′], [‘blue’,’XL’, 15.3,’...
  • 独热编码(One-Hot Encoding)

    千次阅读 2022-03-25 14:06:07
    一、独热编码出现之前:针对无序离散的分类特征,机器学习算法的分类器并不能直接进行数据处理。因为,分类器通常处理的数据是连续且有序的。 但是我们可以对这些离散的特征数据建立映射表来让其有序并且连续起来。...
  • 如果我们有一个5类分类问题,我们有数据 (Xi,Yi)(X_i,Y_i)(Xi​,Yi​),其中类别YiY_iYi​有5种取值(因为是5分类问题),所以如果YjY_jYj​为第1类那么其独热编码为: [1,0,0,0,0][1,0,0,0,0][1,0,0,0,0],如果是第...
  • 参考以下链接独热编码(One-Hot)及其代码_一个很水的计算机研究生的博客-CSDN博客_独热编码 机器学习:数据预处理之独热编码(One-Hot) - 知乎 机器学习特征处理——独热编码(One-Hot Encoding) - 简书 机器...
  • python pandas 独热编码

    千次阅读 2022-01-07 11:43:43
    python pandas 独热编码 import pandas as pd df1 = pd.DataFrame( { '姓名': ['周', '武', '郑'], '成绩': [100, 96, 77], '年龄': [17, 15, 19], '班级': ['1班', '3班', '4班'], }, index=[0, 1, 2 ]) ...
  • 独热编码(one-hot encoding) 基于数据集的某一特征的N个状态值,用N位编码来作区别 例如将人群基于年龄特征分为:婴儿,幼儿,少年,青年,中年,老年六个状态,则需六位编码来做区分,如下图: 婴儿 幼儿 ...
  • 独热编码类别特征原数据特征特征列表独热编码转换后数据特征文本特征原数据特征特征列表独热编码转换后数据特征代码 独热编码主要是对一些非数字的文本进行类别表示,便于计算机进行计算与分类 常见的有类别特征...
  • 很多人开始接触深度学习,数据处理遇到第一个专业英文术语就是one-hot encode(独热编码),很多初学者就会迷茫,这个东西是什么意思,其实说的直白点所谓的独热编码最重要的就是把一组字符串或者数字转为一组向量而且...
  • 特征工程是数据科学模型...分类特征可以编码成数字格式,独热编码就是其中一种方式。 什么是独热编码? 独热编码,又称虚拟编码,是一种将分类变量转换为数值向量格式的方法。每个类别在数值向量中都有自己的列或特征.
  • Python机器学习之独热编码(一)

    千次阅读 2021-02-03 04:21:10
    什么是独热编码 独热编码(One-Hot Encoding),又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。即,只有一位是1,其余都是...
  • 例如: 自然状态码为:000,001,010,011,100,101 独热编码为:000001,000010,000100,001000,010000,100000 可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征(如成绩这个...
  • 独热编码-通过python代码讲解

    千次阅读 2022-02-09 09:57:53
    通过3个独热编码实验,理解独热编码
  • python实现数据编码,对离散型变量进行独热编码,对数值型变量进行归一化处理。
  • 独热编码,是一种将分类变量转换为若干二进制列的方法,其中1表示属于该类别的行。这种方法有效的诠释了分类变量的含义且去除了类别对应的值的大小在机器学习过程中对结果产生的影响。 以下python代码是对数据框...
  • 独热编码、顺序编码与softMax多分类

    千次阅读 2020-09-14 21:30:15
    使得标签由原来的顺序编码变为独热编码,在训练新的模型 train_label_onehot = tf.keras.utils.to_categorical(train_label) test_label_onehot = tf.keras.utils.to_categorical(test_label) print('独热编码的...
  • 数据预处理-独热编码

    2021-05-16 11:17:06
    独热编码介绍优点举例说明 介绍 独热编码通常是用来处理稀疏而又散乱的分布空间的数值。其方法是使用N状态寄存器来对N个状态进行编码,每个状态都有独自的寄存器位,在任意时候只有一位有效,只有一位是1,其余的都...
  • 独热编码(one-hot)是什么?什么数据类型需要进行独热编码?pandas如何进行独热编码(one-hot)? 独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由...
  • 其中,OneHotEncoder是我们实现独热编码的关键模块。 接下来,导入并显示数据前五行。 test_data_1=pd.read_csv('G:/CropYield/03_DL/00_Data/onehot_test.csv',header=0) test_data_1.head(5) 关于这里导入数据...
  • 独热编码OneHotEncoder 若原数据有n个不同的元素,则将原数据的元素映射为n维向量,向量中只有一位1,其余全0,这个“1”在向量中的位置索引就是标签编码的值。例如, ‘autumn’-–0–100, ‘spring’–—1–010,...
  • 机器学习:数据预处理之独热编码(One-Hot)详解

    千次阅读 多人点赞 2020-01-03 14:18:14
    什么是独热编码? ———————————————————————————————————————— 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等。 这些特征...
  • 独热编码 (One-Hot) 为样本特征的每个值建立一个由一个1和若干个0组成的序列, 用该序列对所有的特征值进行编码. 1 3 2 7 5 4 1 8 6 7 3 9 为每一个数字进行独热编码: 1-10 3-100 2-1000 7-01 5-010 4-0100...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,579
精华内容 16,631
关键字:

独热编码