[ Python ] scikit-learn RandomTreesEmbedding

2019. 12. 21. 22:11분석 Python/Scikit Learn (싸이킷런)

728x90

이것도 우연히 다른거 찾다가... 일단 임베딩 관련해서 찾다보니 다음과 같이 나왔다.
현재 아래있는 Manifold Learning은 numerical multidimensional matrix에서 하는 방법론들인 것 같다.(아닐수도 있다...)

일단 저건 그랬고 이번에는 그것보다는 다른 걸 찾아사 말하고자 한다.
이번에 찾은 것은 high dimensional sparse representation으로 표현을 하는데, 음 이것을 소개하는 이유는 다음과 같다.
ensemble tree 모델을 이용하다보니, one hot encoding 모아 놓은 것에 대해서 sparse matrix를 만들어준다.
즉 이것을 사용하면 결측치가 들어있는 데이터에 대해서 유익한 정보로 sparse한 dimensional matrix를 만들 수 있지 않을까해서 소개한다. 
(물론 아닐수도 있다...)

object1 = pd.Series(np.random.choice(list("ABCDE") ,
                                     10000 , p = [0.4,0.35,0.1,0.1,0.05] ))
object2 = pd.Series(np.random.choice(["aa","bb","cc",np.nan,"ee"] , 
                                     10000 , p = [0.4,0.35,0.1,0.05, 0.10] ))
object3 = pd.Series(np.random.choice(["F","G",np.nan,"I","J"] , 
                                     10000 , p = [0.5,0.25,0.1,0.1,0.05] ))
object4 = pd.Series(np.random.choice(["F",np.nan,"H","I","J"] , 
                                     10000 , p = [0.6,0.15,0.1,0.1,0.05] ))
object5 = pd.Series(np.random.choice([np.nan,"G","H","I","J"] , 
                                     10000 , p = [0.3,0.45,0.1,0.1,0.05] ))
object6 = pd.Series(np.random.choice(["F","G","H","I",np.nan] , 
                                     10000 , p = [0.4,0.05,0.4,0.1,0.05] ))

obj = pd.concat([object1 , object2 , object3,
                 object4 , object5 , object6
                ], axis = 1)
obj = obj.astype("category")

obj.columns = ["OBJ1", "OBJ2","OBJ3" , "OBJ4", "OBJ5","OBJ6"]
x = pd.get_dummies(obj , dummy_na= True ).values
emb = RandomTreesEmbedding(max_leaf_nodes  = 2 , max_depth = 2 )

emb.fit(x)
embedding = emb.transform(x).toarray()
embedding.shape

## (10000, 20)

max_depth와 max_leaf_node를 잘 조절하면 더 압축된 형태로 만들 수 있었다.
과연 이게 좋을지는... 해봐야 알 것 같지만 일단 분석할 데이터를 선정해서 테스트를 해볼 예정이다

728x90