在利⽤机器学习或者深度学习解决分类问题时,我们需要将标签进⾏编码,有时也需要将离散的⾃变量进⾏分类编码,特别是做神经⽹络或回归预测时,对离散的⾃变量也进⾏One-hot编码扩维是⼀种很好办法,例如我们预测租房市场单个房源的价钱时,假设装修程度是影响其价格的因素,有豪装、精装、中装、简装四种,如果我们将其视为⼀个变量X1不同的值,即分别编码维1,2,3,4,那么做神经⽹络预测时给予这⼀个变量权重,就不是很合适,除⾮事先知道这四种对价格影响的排序,否则不能给予很好的权重,此时应该对其扩维,成为X1、X2、X3、X4,对应的豪装=[1,0,0,0]、精装=[0,1,0,0]...以此类推。如果视为⼀个变量,则豪装=[1]、精装=[2]...以此类推,这样的算法做分类预测或者回归预测是不合适的。此时我们需要对离散的⾃变量X或者标签Y进⾏One-hot编码。 本⽂采⽤Python在Liunx环境下,安装Anaconda3的环境下,进⾏编程实现,值得⼀提的是Anaconda3包含了numpy、pandas、sklearn等科学计算、数据分析、机器学习包,也可以在再次基础上安装tensorflow框架进⾏深度神经⽹络研究。假设有⼀组样本的标签y= [0,1,2,3,1,2,0,1],我们将其进⾏One-hot编码,则代码实现如下松岗罗田
from sklearn.preprocessing import OneHotEncoder
import numpy as np
y=np.array([0,1,2,3,1,2,0,1])
氮化硅ohe = OneHotEncoder()
ohe.fit([[0],[1],[2],[3]])工业建筑设计手册
shape(-1,1)).toarray())
我们会看到输出结果为
/home/ubuntu/anaconda3/bin/python /home/ubuntu/PycharmProjects/Testpycharm/liyang2.py
[[1. 0. 0. 0.]
马家老鸡铺[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]上海银河宾馆
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[1. 0. 0. 0.]
[0. 1. 0. 0.]]
工业经济
Process finished with exit code 0