[ Python ] scikit-learn RandomTreesEmbedding
2019. 12. 21. 22:11ㆍ분석 Python/Scikit Learn (싸이킷런)
이것도 우연히 다른거 찾다가... 일단 임베딩 관련해서 찾다보니 다음과 같이 나왔다.
현재 아래있는 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
'분석 Python > Scikit Learn (싸이킷런)' 카테고리의 다른 글
LabelEncoder new class 대처하기 (0) | 2020.01.04 |
---|---|
[ Python ] Scikit-Learn Pipeline + RandomizedSearchCV + shap,eli5 (0) | 2019.12.28 |
[ Python ] scikit-learn feature selection Tool (2) | 2019.12.21 |
[ Python ] class weight 쉽게 구하는 법 (0) | 2019.11.24 |
[ Python ] Cross Validation 병렬로 돌리고 BoxPlot 시각화 (0) | 2019.11.07 |