在上周我们介绍给大家介绍了有监督问题中树模型leaf编码的操作,在搜索资料的过程中笔者偶然发现在sklearn中有无监督的树模型leaf编码,本问将介绍Kaggle知识点:RandomTreesEmbedding的原理和使用。
基础介绍RandomTreesEmbedding使用高维稀疏进行无监督转换,数据点根据它被分类到树的叶子节点进行编码,这导致编码维度与森林中的树木一样多。
from sklearn.ensemble import RandomTreesEmbedding
X = [[0,0], [1,0], [0,1], [-1,0], [0,-1]]
random_trees = RandomTreesEmbedding(
n_estimators=5, random_state=0, max_depth=1).fit(X)
X_sparse_embedding = random_trees.transform(X)
X_sparse_embedding.toarray()
输出结果:
array([[0., 1., 1., 0., 1., 0., 0., 1., 1., 0.],
[0., 1., 1., 0., 1., 0., 0., 1., 1., 0.],
[0., 1., 0., 1., 0., 1., 0., 1., 0., 1.],
[1., 0., 1., 0., 1., 0., 1., 0., 1., 0.],
[0., 1., 1., 0., 1., 0., 0., 1., 1., 0.]])
编码后的维度最多为n_estimators * max_leaf_nodes,若max_leaf_nodes设置为None,则无限数量的叶节点。
实现原理
1.随机产生随机数作为标签y,数量与训练集样本个数相同;
2.使用ExtraTreeRegressor完成训练数据与标签y进行训练。
3.得到ExtraTreeRegressor的leaf编码,然后进行onehot编码。
rnd = check_random_state(self.random_state)
y = rnd.uniform(size=_num_samples(X))
super().fit(X, y, sample_weight=sample_weight)self.one_hot_encoder_ = OneHotEncoder(sparse=self.sparse_output)
return self.one_hot_encoder_.fit_transform(self.apply(X))
与其他方法对比
1.RandomTreesEmbedding是一种无监督leaf编码,可以用任意树模型来完成。
2.RandomTreesEmbedding本质是一种降维操作,利用树模型节点分裂完成样本聚类操作。
3.RandomTreesEmbedding输出的是leaf节点的onethot编码,可以视为稀疏数据。
学习数据学术活动,组队参赛,交流分享
请扫码添加翰林顾问老师详细咨询【免费领取】相关赛题及解析!
© 2024. All Rights Reserved. 沪ICP备2023009024号-1