数据预处理之独热编码(One-Hot转载https://www.imooc.com/article/35900在机器学习算法中我们经常会遇到分类特征例如人的性别有男女祖国有中国美国法国等。这些特征值并不是连续的而是离散的无序的。通常我们需要对其进行特征数字化。那什么是特征数字化呢例子如下性别特征[“男”“女”]祖国特征[“中国”美国“法国”]运动特征[“足球”“篮球”“羽毛球”“乒乓球”]假如某个样本某个人他的特征是这样的[“男”,“中国”,“乒乓球”]我们可以用 [0,0,4] 来表示但是这样的特征处理并不能直接放入机器学习算法中。因为类别之间是无序的运动数据就是任意排序的。什么是独热编码One-Hot————————————————————————————————————————One-Hot编码又称为一位有效编码主要是采用N位状态寄存器来对N个状态进行编码每个状态都由他独立的寄存器位并且在任意时候只有一位有效。One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后每个整数值被表示为二进制向量除了整数的索引之外它都是零值它被标记为1。One-Hot实际案例————————————————————————————————————————就拿上面的例子来说吧性别特征[“男”,“女”]按照N位状态寄存器来对N个状态进行编码的原理咱们处理后应该是这样的这里只有两个特征所以N2男 10女 01祖国特征[“中国”美国“法国”]这里N3中国 100美国 010法国 001运动特征[“足球”“篮球”“羽毛球”“乒乓球”]这里N4足球 1000篮球 0100羽毛球 0010乒乓球 0001所以当一个样本为[“男”,“中国”,“乒乓球”]的时候完整的特征数字化的结果为[101000001]下图可能会更好理解https://img.mukewang.com/5b20f1b90001cc2202550045.jpgOne-Hot在python中的使用————————————————————————————————————————from sklearn import preprocessingenc preprocessing.OneHotEncoder()enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]]) #这里一共有4个数据3种特征array enc.transform([[0,1,3]]).toarray() #这里使用一个新的数据来测试print array # [[ 1 0 0 1 0 0 0 0 1]]结果为 1 0 0 1 0 0 0 0 1为什么使用one-hot编码来处理离散型特征?————————————————————————————————————————在回归分类聚类等机器学习算法中特征之间距离的计算或相似度的计算是非常重要的而我们常用的距离或相似度的计算都是在欧式空间的相似度计算计算余弦相似性基于的就是欧式空间。而我们使用one-hot编码将离散特征的取值扩展到了欧式空间离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码确实会让特征之间的距离计算更加合理。比如有一个离散型特征代表工作类型该离散型特征共有三个取值不使用one-hot编码其表示分别是x_1 (1), x_2 (2), x_3 (3)。两个工作之间的距离是(x_1, x_2) 1, d(x_2, x_3) 1, d(x_1, x_3) 2。那么x_1和x_3工作之间就越不相似吗显然这样的表示计算出来的特征的距离是不合理。那如果使用one-hot编码则得到x_1 (1, 0, 0), x_2 (0, 1, 0), x_3 (0, 0, 1)那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的显得更合理。不需要使用one-hot编码来处理的情况————————————————————————————————————————将离散型特征进行one-hot编码的作用是为了让距离计算更合理但如果特征是离散的并且不用one-hot编码就可以很合理的计算出距离那么就没必要进行one-hot编码。比如该离散特征共有1000个取值我们分成两组分别是400和600,两个小组之间的距离有合适的定义组内的距离也有合适的定义那就没必要用one-hot 编码。离散特征进行one-hot编码后编码后的特征其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。作者NateHuang链接https://www.imooc.com/article/35900来源慕课网本文原创发布于慕课网 转载请注明出处谢谢合作
机器学习:数据预处理之独热编码(One-Hot)
数据预处理之独热编码(One-Hot转载https://www.imooc.com/article/35900在机器学习算法中我们经常会遇到分类特征例如人的性别有男女祖国有中国美国法国等。这些特征值并不是连续的而是离散的无序的。通常我们需要对其进行特征数字化。那什么是特征数字化呢例子如下性别特征[“男”“女”]祖国特征[“中国”美国“法国”]运动特征[“足球”“篮球”“羽毛球”“乒乓球”]假如某个样本某个人他的特征是这样的[“男”,“中国”,“乒乓球”]我们可以用 [0,0,4] 来表示但是这样的特征处理并不能直接放入机器学习算法中。因为类别之间是无序的运动数据就是任意排序的。什么是独热编码One-Hot————————————————————————————————————————One-Hot编码又称为一位有效编码主要是采用N位状态寄存器来对N个状态进行编码每个状态都由他独立的寄存器位并且在任意时候只有一位有效。One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后每个整数值被表示为二进制向量除了整数的索引之外它都是零值它被标记为1。One-Hot实际案例————————————————————————————————————————就拿上面的例子来说吧性别特征[“男”,“女”]按照N位状态寄存器来对N个状态进行编码的原理咱们处理后应该是这样的这里只有两个特征所以N2男 10女 01祖国特征[“中国”美国“法国”]这里N3中国 100美国 010法国 001运动特征[“足球”“篮球”“羽毛球”“乒乓球”]这里N4足球 1000篮球 0100羽毛球 0010乒乓球 0001所以当一个样本为[“男”,“中国”,“乒乓球”]的时候完整的特征数字化的结果为[101000001]下图可能会更好理解https://img.mukewang.com/5b20f1b90001cc2202550045.jpgOne-Hot在python中的使用————————————————————————————————————————from sklearn import preprocessingenc preprocessing.OneHotEncoder()enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]]) #这里一共有4个数据3种特征array enc.transform([[0,1,3]]).toarray() #这里使用一个新的数据来测试print array # [[ 1 0 0 1 0 0 0 0 1]]结果为 1 0 0 1 0 0 0 0 1为什么使用one-hot编码来处理离散型特征?————————————————————————————————————————在回归分类聚类等机器学习算法中特征之间距离的计算或相似度的计算是非常重要的而我们常用的距离或相似度的计算都是在欧式空间的相似度计算计算余弦相似性基于的就是欧式空间。而我们使用one-hot编码将离散特征的取值扩展到了欧式空间离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码确实会让特征之间的距离计算更加合理。比如有一个离散型特征代表工作类型该离散型特征共有三个取值不使用one-hot编码其表示分别是x_1 (1), x_2 (2), x_3 (3)。两个工作之间的距离是(x_1, x_2) 1, d(x_2, x_3) 1, d(x_1, x_3) 2。那么x_1和x_3工作之间就越不相似吗显然这样的表示计算出来的特征的距离是不合理。那如果使用one-hot编码则得到x_1 (1, 0, 0), x_2 (0, 1, 0), x_3 (0, 0, 1)那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的显得更合理。不需要使用one-hot编码来处理的情况————————————————————————————————————————将离散型特征进行one-hot编码的作用是为了让距离计算更合理但如果特征是离散的并且不用one-hot编码就可以很合理的计算出距离那么就没必要进行one-hot编码。比如该离散特征共有1000个取值我们分成两组分别是400和600,两个小组之间的距离有合适的定义组内的距离也有合适的定义那就没必要用one-hot 编码。离散特征进行one-hot编码后编码后的特征其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。作者NateHuang链接https://www.imooc.com/article/35900来源慕课网本文原创发布于慕课网 转载请注明出处谢谢合作