one-hot编码

为什么要使用onehot编码呢?因为大部分的机器学习模型需要的事连续的特征,特征有可能是分类值时就需要对特征进行处理,数字表示的时候效率就会提高很多,

自然状态码为:000,001,010,011,100,101
独热编码为:000001,000010,000100,001000,010000,100000
这样做的好处主要有:
解决了分类器不好处理属性数据的问题
在一定程度上也起到了扩充特征的作用

eg:
特征ID化:
0 user1
1 user2
2 item1
3 item2
4 item3
5 item4
6 category“18-25”
7 category “26-40”
8 category “40-60”
9 price feature

5 0:1 3:1 6:1 9:20
user1 23 years old 20 dollars on item2

5是target,代表要训练的目标,用户的打分情况,0/1代表用户,2/3/4/5代表item。6-8代表年龄段,9代表价格
eg:
0:1 代表user 1 然后是1;
2:1 代表item1 1;
6:1 代表年龄在18到25岁 1;
9:20 代表花了20块钱;

one-hot编码之后会造成矩阵稀疏的问题:
因为有类别的项目被置1了,剩余项目还是0,比如第一行:
5 0:1 2:1 6:1 9:20→编码之后为 5 0:1 1:0 2:1 3:0 4:0 5:0 6:1 7:0 8:0 9:20
而矩阵的稀疏问题会导致二次项训练不充分,无法达到想要的解,所以通过fm算法,将矩阵分解,计算出隐藏向量,然后计算用户的打分情况。

我们基于python和Scikit-learn写一个简单的例子:
from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
enc.transform([[0, 1, 3]]).toarray()
输出结果:
array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值