11주차 강의

60 days 전, mindo 작성

# PCA 예제 # 사람들이 새 컴퓨터를 선택할 때 관심을 갖는 아래 사항에 관하여 척도가 7점인 4문항의 리커트(Likert) # 설문 조사를 16명에게 실시하였다. (1: 매우 그렇지 않다 – 7: 매우 그렇다) # Price 가격이 저렴하다. # Software 운영체제가 사용하려는 소프트웨어와 호환된다. # Aesthetics 디자인이 매력적이다. # Brand 유명 브랜드의 제품이다. 
       
# 데이터 행렬 입력 # 각 행은 변수 Price, Software, Aesthetics, Brand에 해당하는 데이터를 의미한다. X = matrix(RDF, [[6, 7, 6, 5, 7, 6, 5, 6, 3, 1, 2, 5, 2, 3, 1, 2], [5, 3, 4, 7, 7, 4, 7, 5, 5, 3, 6, 7, 4, 5, 6, 3], [3, 2, 4, 1, 5, 2, 2, 4, 6, 7, 6, 7, 5, 6, 5, 7], [4, 2, 5, 3, 5, 3, 1, 4, 7, 5, 7, 6, 6, 5, 5, 7]]) X = X.transpose() # data matrix print X 
       
[6.0 5.0 3.0 4.0]
[7.0 3.0 2.0 2.0]
[6.0 4.0 4.0 5.0]
[5.0 7.0 1.0 3.0]
[7.0 7.0 5.0 5.0]
[6.0 4.0 2.0 3.0]
[5.0 7.0 2.0 1.0]
[6.0 5.0 4.0 4.0]
[3.0 5.0 6.0 7.0]
[1.0 3.0 7.0 5.0]
[2.0 6.0 6.0 7.0]
[5.0 7.0 7.0 6.0]
[2.0 4.0 5.0 6.0]
[3.0 5.0 6.0 5.0]
[1.0 6.0 5.0 5.0]
[2.0 3.0 7.0 7.0]
[6.0 5.0 3.0 4.0]
[7.0 3.0 2.0 2.0]
[6.0 4.0 4.0 5.0]
[5.0 7.0 1.0 3.0]
[7.0 7.0 5.0 5.0]
[6.0 4.0 2.0 3.0]
[5.0 7.0 2.0 1.0]
[6.0 5.0 4.0 4.0]
[3.0 5.0 6.0 7.0]
[1.0 3.0 7.0 5.0]
[2.0 6.0 6.0 7.0]
[5.0 7.0 7.0 6.0]
[2.0 4.0 5.0 6.0]
[3.0 5.0 6.0 5.0]
[1.0 6.0 5.0 5.0]
[2.0 3.0 7.0 7.0]
# 데이터 행렬을 센터링(centering, 각 행의 평균을 0으로)한다. # 본 예제에서는 센터링 한 후에 다시 각 열을 해당 확률변수의 표준편차로 나누었다. # 이를 scaling이라 하는데, 필요에 따라 scaling도 진행할 수 있다. n = X.nrows() # 행의 개수 p = X.ncols() # 열의 개수 X_ctr = zero_matrix(RDF, n, p) # 행렬 준비 import numpy as np for col in range(p): v = np.array(X.column(col)) m = mean(v) st = std(v) 
       
# 특이값 분해 (Singular Value Decomposition)를 구한다. X_ctr = U*S*V.transpose() U, S, V = X_ctr.SVD() Var_PC = [S[i,i]^2/n for i in range(p)] # Variance of PC (eigenvalues) print "Variance of PC ", Var_PC Prop_Var = [100*Var_PC[i]/sum(Var_PC) for i in range(p)] # Proportion of Variance print "Proportion of Variance ", Prop_Var # Scree Plot list_plot(Var_PC, plotjoined = 'True', color = 'red', axes_labels = ['','Variances']) 
       
Variance of PC            [0.0, 0.0, 0.0, 0.0]
Proportion of Variance    [NaN, NaN, NaN, NaN]
Variance of PC            [0.0, 0.0, 0.0, 0.0]
Proportion of Variance    [NaN, NaN, NaN, NaN]
# PC score를 계산한다. Z = X_ctr*V PC_score = U*S PC12 = PC_score[:, 0:2] # 시각화를 위해 첫번째, 두번째 성분까지만 사용 print PC12 
       
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
[0.0 0.0]
# 데이터를 평면에 시각화 한다. point([PC12.row(i) for i in range(n)], color = 'red')