반응형

이번에는 차원축소방법중 하나인 TSNE에 대해서 알아보겠습니다.
간단한 설명 후 실제로 Python 에서 어떻게 T-SNE를 이용하는지에 대한 예를 들어 보겠습니다.

TSNE에 대해 간단히 알아 보기

차원 축소는 기계학습(Machine Learning)에서 매우 중요합니다. 왜냐하면 고차원의 데이터를 가지고 모델을 만들면 Under fitting 되기 쉽기 때문입니다. 즉, 쓸모 없는 데이터가 너무 많아서 학습이 되지 않는 현상이지요. 고차원, 즉 여러 데이터 중에서 가장 중요한 데이터만 골라서 (저차원으로 만들어서) 모델에 사용할 수도 있고, 여러 데이터를 이용하여 새로운 데이터를 만들어서 저차원으로 만들수도 있습니다. 어째튼 이처럼 고차원의 데이터를 저차원으로 변환하는 것이 필요합니다. 이것이 바로 차원 축소(Dimension Reduction) 방법입니다. (이외에도 Feature를 만드는 방법에는 Feature Elimination, Feature Selection 등의 방법이 있습니다.) 차원 축소 방법은 선형 방법(Principal Component Analysis (PCA), Independent Component Analysis, Linear Discriminant Analysis, 등)과 비선형 방법(Manifold, Auto-encoder 등)이 있습니다. TSNE는 Manifold 방법중 하나입니다.
SNE (Stochastic Neighbor Embedding)에서 t-SNE (t-distributed Stochastic Neighbor Embedding)로 발전했고, 이후 다시 UMAP (Uniform Manifold Approximation and Projection)으로 발전 하였습니다.

Python 을 이용해 Tsne 구현해 보기

간단한 코드와 설명은 아래와 같습니다.

# python 3.8.6
 
# 필요한 패키지를 설치 합니다.
#! pip install sklearn
#! pip install seaborn
#! pip install matplotlib

# 필요한 패키지를 로딩 합니다.
from sklearn.datasets import load_digits
from sklearn.manifold import TSNE
import seaborn as sns
from matplotlib import pyplot as plt

# 필요한 데이터를 로드합니다. 여기서는 0부터 9까지의 숫자 데이터 입니다.
data = load_digits()

# 설명을 위한 참고 부분
# 로딩한 데이터의 첫번째 샘플을 보면 아래와 같습니다. 0은 하얀색이고 높은 숫자일 수록 검은 색에 가까움을 나타냅니다.
# 0이 아닌 숫자들을 연결해보면 중앙부분에 하얀색(0)이 있는 숫자 0을 나타내고 있음을 알 수 있습니다.
# >>> data.data[0]
# [ 0., 0., 5., 13., 9., 1., 0., 0.,
# 0., 0., 13., 15., 10., 15., 5., 0.,
# 0., 3., 15., 2., 0., 11., 8., 0.,
# 0., 4., 12., 0., 0., 8., 8., 0.,
# 0., 5., 8., 0., 0., 9., 8., 0.,
# 0., 4., 11., 0., 1., 12., 7., 0.,
# 0., 2., 14., 5., 10., 12., 0., 0.,
# 0., 0., 6., 13., 10., 0., 0., 0. ]
# 실제로 타겟의 첫번째에는 첫번째 샘플의 정답인 0이 들어잇습니다.
# >>> data.target[0]
# 0

# 축소한 차원의 수를 정합니다.
n_components = 2
# TSNE 모델의 인스턴스를 만듭니다.
model = TSNE(n_components=n_components)
# data를 가지고 TSNE 모델을 훈련(적용) 합니다.
X_embedded = model.fit_transform(data.data)
# 훈련된(차원 축소된) 데이터의 첫번째 값을 출력해 봅니다.
print(X_embedded[0])
# [65.49378 -7.3817754]

# 차원 축소된 데이터를 그래프로 만들어서 화면에 출력해 봅니다.
palette = sns.color_palette("bright", 10)
sns.scatterplot(X_embedded[:,0], X_embedded[:,1], hue=data.target, legend='full', palette=palette)
plt.show()


아래는 화면에 출력된 결과 입니다.



차원 축소가 잘 되었는지 안되었는지 알아볼 수 있는 좋은 시각화 툴 입니다. 이를 이용해서 임베딩된 데이터를 시각화해 봄으로써 품질을 가늠해 볼 수 있습니다.


반응형
반응형

 

* 현상 : 

* 데이터 프레임 2개를 옆으로 추가하기 위해 concat 함수를 이용하려 하는데 아래와 같이 에러가 발생함.

---> 25 features_forecast = pd.concat([features, f_amounts], axis=1) 26 features_forecast 27 # index CTRT_ID 202201 202202 202203 202204 202205 index forecast_amount /Applications/anaconda3/lib/python3.8/site-packages/pandas/core/reshape/concat.py in concat(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy) 296 ) 297 --> 298 return op.get_result() 299 300 /Applications/anaconda3/lib/python3.8/site-packages/pandas/core/reshape/concat.py in get_result(self) 514 obj_labels = obj.axes[1 - ax] 515 if not new_labels.equals(obj_labels): --> 516 indexers[ax] = obj_labels.get_indexer(new_labels) 517 518 mgrs_indexers.append((obj._mgr, indexers)) /Applications/anaconda3/lib/python3.8/site-packages/pandas/core/indexes/base.py in get_indexer(self, target, method, limit, tolerance) 3169
...
-> 3171 raise InvalidIndexError( 3172 "Reindexing only valid with uniquely valued Index objects" 3173 ) InvalidIndexError: Reindexing only valid with uniquely valued Index objects
 
 
 
 

 

* 원인 :

 
에러의 마지막에 나와있는 문구처럼 index 객체의 값이 유니크하지 않아서 합치려고 할때 에러가 났음
 
 

 

* 해결방법 :

데이터 프레임을 concat 하기 전에 각 index를 리셋해주는 것이 필요. df.reset_index() 활용
 
 
df1 = df1.reset_index()
df2 = df2.reset_index()
df2 = pd.concat([df1, df2], axis=1)
 
 
 

 

참고 링크: 

https://www.codetd.com/en/article/12946561

 

pandas concat “InvalidIndexError: Reindexing only valid with uniquely valued Index objects“ - Code World

Using the concat method of pandas can quickly stack multiple DataFrames, which is very convenient, but when using concat , the prompt "pandas.errors.InvalidIndexError: Reindexing only valid with uniquely valued Index objects " will appear . The translation

www.codetd.com

 

 

반응형
반응형

이미 Tab(탭)으로 저장되어 있는 소스코드를 스페이스로 바꾸는 방법입니다.

(또는 스페이스로 되어있는 들여쓰기를 탭으로 바꾸는 방법입니다.)

 

VS Code 메유 중 아래와 같이 보기 -> 명령 팔레트 를 선택합니다.

 

 

그러면 편집기 가운데에 아래와 같이 검색 창이 뜹니다.

위 캡처에서도 보이는 것 처럼 입력하시면 됩니다. 

즉, 들여쓰기를 공백으로 변환하거나, 공백을 탭으로 변경할 수 있습니다.

 

 

 

 

반응형
반응형

 

갑자기 잘되던 구글 밋 회의에서 내 화면의 움직임이 없어지는 현상이 생겼습니다.

카메라를 켜면 처음 시작은 되서 화면이 보이는데 움직임이 없습니다.

해결 방법은 설정에서 하드웨어 가속기를 껐다가 다시 켜니까 정상 동작 하더군요.

Windows나 Mac OS의 크롬 브라우저에서 하드웨어 가속기를 설정 하는 방법은 아래와 같습니다.

하드웨어 가속 사용 설정하기 

Windows 또는 Mac에서 하드웨어 가속을 사용 설정하려면 다음 단계를 따릅니다. 

  1. Chrome 창 오른쪽 상단에서 Chrome 메뉴 
     
     설정을 클릭합니다. --> 
  2. 왼쪽에서 고급 옆에 있는 아래쪽 화살표 
    를 클릭합니다.  -->
  3. 시스템 
    을 클릭합니다.  -->
  4. 가능한 경우 하드웨어 가속 사용을 사용 설정합니다. 
  5. Chrome을 다시 시작합니다.

 

반응형

'기타' 카테고리의 다른 글

쓰레기 집하장에서 1등 로또 찾기  (0) 2021.06.12
행복 그림 찾기 2  (0) 2017.03.17
행복 그림 찾기 - 1  (0) 2017.03.07
(1) 4차 산업혁명에 대하여  (0) 2017.02.26

+ Recent posts