RandomTreesEmbedding提供了一种将数据映射到非常高维,稀疏表示的方法,这可能有利于分类。 映射完全不受监督且非常有效。此示例可视化由多个树给出的分区,并显示转换如何也可用于非线性降维或非线性分类。
相邻的点通常共享树的相同叶子,因此共享其散列表示的大部分。 这允许简单地基于变换数据的主要分量来分离两个同心圆。
在高维空间中,线性分类器通常可以实现极佳的精度。 对于稀疏二进制数据,BernoulliNB特别适合。 底行将BernoulliNB在转换空间中获得的决策边界与在原始数据上学习的ExtraTreesClassifier森林进行比较。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles
from sklearn.ensemble import RandomTreesEmbedding, ExtraTreesClassifier
from sklearn.decomposition import TruncatedSVD
from sklearn.naive_bayes import BernoulliNB
# make a synthetic dataset
X, y = make_circles(factor=0.5, random_state=0, noise=0.05)
# use RandomTreesEmbedding to transform data
hasher = RandomTreesEmbedding(n_estimators=10, random_state=0, max_depth=3)
X_transformed = hasher.fit_transform(X)
# Visualize result using PCA
pca = TruncatedSVD(n_compone