独热向量编码原理

本文详细介绍了独热编码(One-Hot Encoding)的底层原理和实现过程,通过示例展示了如何将非全0和1的二维数组转换为全0和1的二维数组。文中使用Python和sklearn库进行了实际编码操作,并解释了字典在编码过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

`# -- coding: utf-8 --
from future import unicode_literals
import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
[1, 3, 2],
[7, 5, 4],
[1, 8, 6],
[7, 3, 9]])
print(raw_samples)

底层原理

code_tables = []
先创建一个字典,来保存原始数据,编译的结果数据,用键值对来表示最好
一个列一个字典,那么就是一个字典列表了
for col in raw_samples.T:
code_table = {}
for val in col:
code_table[val] = None
code_tables.append(code_table)

给字典取值
for code_table in code_tables:
size = len(code_table)
for one, key in enumerate(sorted(code_table.keys())):
code_table[key] = np.zeros(shape=size, dtype=int)
code_table[key][one] = 1
ohe_samples = []
下面用到了列表里面嵌套列表
开始编码
for raw_sample in raw_samples:
ohe_sample = np.array([], dtype=int)
for i, key in enumerate(raw_sample):
ohe_sample = np.hstack(
(ohe_sample, code_tables[i][key]))
对每一

### One-Hot 编码原理 One-Hot 编码是一种用于将分类变量转换为二进制向量的技术,使得机器学习模型能够更好地理解和处理这些数据。通过这种编码方式,每个类别都会被表示成一个独立的二进制位,在该位置上的值为1,其余位置均为0。 假设有一个特征列包含了三个不同的类别:红色、绿色和蓝色。为了应用 one-hot 编码,会创建一个新的矩阵,其中每一列表示原始数据中的一个唯一类别,并且每行对应于原数据集的一条记录。如果某条记录属于某个特定类别,则其对应的one-hot编码中相应的位置会被设为1;反之则设置为0[^1]。 例如,对于上述颜色的例子: | 颜色 | 红色 | 绿色 | 蓝色 | | --- | ---- | ---- | ---- | | 红色 | 1 | 0 | 0 | | 绿色 | 0 | 1 | 0 | | 蓝色 | 0 | 0 | 1 | 这种方式可以有效地防止算法错误地认为某些类别的数值大小具有实际意义,因为所有的类别都被平等对待并映射到了相互正交的空间里[^2]。 此外,值得注意的是当存在大量可能取值时(即高基数),可能会导致维度灾难问题——即生成过多的新特性而使计算复杂度急剧增加。因此在这种情况下通常会选择其他方法如词袋模型或嵌入层来进行降维处理[^3]。 ```python import pandas as pd from sklearn.preprocessing import OneHotEncoder # 创建样本 DataFrame df = pd.DataFrame({'color': ['red', 'green', 'blue']}) # 初始化 OneHotEncoder 并拟合变换 encoder = OneHotEncoder(sparse=False) encoded_data = encoder.fit_transform(df[['color']]) print(encoded_data) # 将结果转回 DataFrame 形式查看更直观的结果 encoded_df = pd.DataFrame( encoded_data, columns=encoder.get_feature_names_out(['color']) ) print(encoded_df) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值