在上周我們介紹給大家介紹了有監督問題中樹模型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編碼,可以視為稀疏數據。
學習數據學術活動,組隊參賽,交流分享
請掃碼添加翰林顧問老師詳細咨詢【免費領取】相關賽題及解析!


? 2025. All Rights Reserved. 滬ICP備2023009024號-1