PCA, t-SNE 차원 축소(2)

wonsik·2021년 9월 16일
2

4. t-SNE 분석

t-SNEPCA와 다르게 비선형 차원분석이다. t-SNE 코드는 매우 간단하다!!

from sklearn.manifold import TSNE

tsne= TSNE(n_components=2,verbose=1,learning_rate=1000,perplexity=100,n_iter=1000)
tsne_result = tsne.fit_transform(train_feature_reduced)

parameter 설명
t-SNE는 다양한 파라미터가 존재한다. 파라미터들을 바꿔가면서 아이템들이 구분이 잘 되는 값들을 찾았다. sklearn 사이트에 자세히 나와있지만 간단한 설명과 주관을 적겠다.

  • n_components: 몇 차원으로 줄일 건지에 대한 파라미터
  • verbose: TSNE가 진행중인 장면이 나오게 할 것인지 결정하는 파라미터. 이를 0으로 두면 나타나지 않는다. 보통 1로 두는데 궁금해서 2로 해봤는데 음...줄이 엄청 길어져서 추천하진 않는다.
  • learning_rate: ML의 기초적인 파라미터. 높으면 빠르지만 최솟값을 찾기가 힘들고 낮으면 너무 느리다. Default = 200 이지만 주로 10~1000까지 사용된다.
  • perplexity: 복잡도에 관련된 파라미터로 이웃 간에 거리에 대한 파라미터이다. 너무 높이면 거의 한점 처럼보이고 너무 낮으면 cluster를 잘 시키기 힘들다. Default = 30으로 5~50를 쓴다. 실제로 cluster를 잘 시키기 위해 200이상으로 높혔더니 정말 형체가 사라졌다.😥
  • n_iter: 몇 번 돌릴 것인지에 대한 파라미터. Default = 1000이다. 너무 적게 돌리면 의미가 없기 때문에 250이상을 쓰라고 나와있다.

이제 PCA에서 했던 방식과 똑같이 새로운 dataframe을 만들어 라벨링을 하고 시각화를 해서 살펴보자!

꿀팁으로 보통 t-SNE를 쓸 때는 보통 PCA로 대략 50차원까지 축소하고 사용하면 성능이 좋다고 나와있다.


위 그림에서 보듯이 정말 잘 나누어졌다. 하지만 VT등의 아이템은 뭉쳐있는 것도 아니고 그냥 넓게 퍼져있다.

다르게 해보아도 이렇듯 몇 아이템이 잘 뭉쳐지지가 않았다. 여담으로 차원축소 잘하는 방법을 인턴 사수분에게 물어보았는데 아무리 파라미터를 조절하고 튜닝한다해도 피쳐가 좋지 않으면 안된다고 했다. 데이터를 애초에 내가 만든 것이 아니고 제공 받았으므로 여기서 내가 아는 지식 내에서 더 나아갈 수 없었다...😥

느낀점

이 대회를 통해 얻은 점은 수업에서 배운 PCA를 데이터에 적용한 점, 더 나아가 t-SNE가 있다는 점, 사실 배운게 이론밖에 없기 때문에 pandas, matplotlib같은 것도 모르는 수준이었는데 이에 익숙해진 점, 이 것들을 통해 데이터를 시각화한 점이 있는 것 같다. 아 그리고 딕셔너리나 문자열, 리스트, 반복문 같은 것들에 대해서 클린코드를 작성하려고 노력했던게 있었다.

profile
새로운 기술을 배우는 것을 좋아하는 엔지니어입니다!

0개의 댓글