Python에서 다차원 스케일링을 수행하는 방법


통계에서 다차원 스케일링은 추상 데카르트 공간(보통 2D 공간)의 데이터 세트에서 관측치의 유사성을 시각화하는 방법입니다.

Python에서 다차원 스케일링을 수행하는 가장 쉬운 방법은 sklearn.manifold 하위 모듈의 MDS() 함수를 사용하는 것입니다.

다음 예에서는 이 기능을 실제로 사용하는 방법을 보여줍니다.

예: Python의 다차원 척도화

다양한 농구 선수에 대한 정보가 포함된 다음과 같은 pandas DataFrame이 있다고 가정합니다.

 import pandas as pd

#create DataFrane
df = pd. DataFrame ({' player ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K '],
                   ' points ': [4, 4, 6, 7, 8, 14, 16, 19, 25, 25, 28],
                   ' assists ': [3, 2, 2, 5, 4, 8, 7, 6, 8, 10, 11],
                   ' blocks ': [7, 3, 6, 7, 5, 8, 8, 4, 2, 2, 1],
                   ' rebounds ': [4, 5, 5, 6, 5, 8, 10, 4, 3, 2, 2]})

#set player column as index column
df = df. set_index (' player ')

#view Dataframe
print (df)

        points assists blocks rebounds
player                                   
A 4 3 7 4
B 4 2 3 5
C 6 2 6 5
D 7 5 7 6
E 8 4 5 5
F 14 8 8 8
G 16 7 8 10
H 19 6 4 4
I 25 8 2 3
D 25 10 2 2
K 28 11 1 2

다음 코드를 사용하여 sklearn.manifold 모듈의 MDS() 함수로 다차원 스케일링을 수행할 수 있습니다.

 from sklearn. manifold import MDS

#perform multi-dimensional scaling
mds = MDS(random_state= 0 )
scaled_df = mds. fit_transform (df)

#view results of multi-dimensional scaling
print (scaled_df)

[[ 7.43654469 8.10247222]
 [4.13193821 10.27360901]
 [5.20534681 7.46919526]
 [6.22323046 4.45148627]
 [3.74110999 5.25591459]
 [3.69073384 -2.88017811]
 [3.89092087 -5.19100988]
 [ -3.68593169 -3.0821144 ]
 [ -9.13631889 -6.81016012]
 [ -8.97898385 -8.50414387]
 [-12.51859044 -9.08507097]]

원본 DataFrame의 각 행은 (x, y) 좌표로 축소되었습니다.

다음 코드를 사용하여 2D 공간에서 이러한 좌표를 시각화할 수 있습니다.

 import matplotlib.pyplot as plt

#create scatterplot
plt. scatter (scaled_df[:,0], scaled_df[:,1])

#add axis labels
plt. xlabel (' Coordinate 1 ')
plt. ylabel (' Coordinate 2 ')

#add lables to each point
for i, txt in enumerate( df.index ):
    plt. annotate (txt, (scaled_df[:,0][i]+.3, scaled_df[:,1][i]))

#display scatterplot
plt. show ()

Python의 다차원 스케일링

원래 4개의 열(포인트, 어시스트, 블록, 리바운드)에서 비슷한 값을 갖는 원본 DataFrame의 플레이어는 플롯에서 서로 가깝습니다.

예를 들어, 플레이어 FG는 서로 닫혀 있습니다. 원본 DataFrame의 값은 다음과 같습니다.

 #select rows with index labels 'F' and 'G'
df. loc [[' F ',' G ']]

        points assists blocks rebounds
player				
F 14 8 8 8
G 16 7 8 10

포인트, 어시스트, 블록, 리바운드에 대한 값은 모두 매우 유사하므로 2D 플롯에서 서로 너무 가까운 이유를 설명합니다.

대조적으로, 플롯에서 멀리 떨어져 있는 플레이어 BK 를 생각해 보십시오.

원본 DataFrame에서 해당 값을 참조하면 두 값이 상당히 다르다는 것을 알 수 있습니다.

 #select rows with index labels 'B' and 'K'
df. loc [[' B ',' K ']]

        points assists blocks rebounds
player				
B 4 2 3 5
K 28 11 1 2

따라서 2D 플롯은 DataFframe의 모든 변수에서 각 플레이어가 얼마나 유사한지 시각화하는 좋은 방법입니다.

비슷한 통계를 가진 플레이어는 서로 가깝게 그룹화되어 있지만 통계가 매우 다른 플레이어는 플롯에서 서로 멀리 떨어져 있습니다.

추가 리소스

다음 튜토리얼에서는 Python에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

Python에서 데이터를 정규화하는 방법
Python에서 이상값을 제거하는 방법
Python에서 정규성을 테스트하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다