Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn


Phân tích thành phần chính (PCA) là một kỹ thuật học máy không được giám sát tìm thấy các thành phần chính (kết hợp tuyến tính của các biến dự đoán) giải thích một phần lớn của biến thể trong bộ dữ liệu.

Khi chúng tôi thực hiện PCA, chúng tôi quan tâm đến việc tìm hiểu bao nhiêu phần trăm của tổng số biến thể trong bộ dữ liệu có thể được giải thích bởi từng thành phần chính.

Một trong những cách dễ nhất để trực quan hóa tỷ lệ phần trăm biến thể được giải thích bởi từng thành phần chính là tạo ra biểu đồ A & NBSP; scree.scree plot.

Hướng dẫn này cung cấp một ví dụ từng bước về cách tạo ra một cốt truyện Scree trong Python.

Bước 1: Tải bộ dữ liệu

Trong ví dụ này, chúng tôi sẽ sử dụng một bộ dữ liệu được gọi là Usarrests, trong đó có dữ liệu về số lượng vụ bắt giữ trên 100.000 cư dân ở mỗi tiểu bang Hoa Kỳ vào năm 1973 cho các tội phạm khác nhau.

Mã sau đây cho thấy cách nhập bộ dữ liệu này và chuẩn bị cho phân tích thành phần chính:

import pandas as pd
from sklearn.preprocessing import StandardScaler

#define URL where dataset is located
url = "https://raw.githubusercontent.com/JWarmenhoven/ISLR-python/master/Notebooks/Data/USArrests.csv"

#read in data
data = pd.read_csv(url)

#define columns to use for PCA
df = data.iloc[:, 1:5]

#define scaler
scaler = StandardScaler()

#create copy of DataFrame
scaled_df=df.copy()

#created scaled version of DataFrame
scaled_df=pd.DataFrame(scaler.fit_transform(scaled_df), columns=scaled_df.columns)

Bước 2: Thực hiện PCA

Tiếp theo, chúng tôi sẽ sử dụng hàm & nbsp; pca () từ gói sklearn thực hiện phân tích thành phần chính.PCA() function from the sklearn package perform principal components analysis.

from sklearn.decomposition import PCA

#define PCA model to use
pca = PCA(n_components=4)

#fit PCA model to data
pca_fit = pca.fit(scaled_df)

Bước 3: Tạo lô SCREE

Cuối cùng, chúng tôi sẽ tính toán tỷ lệ phần trăm của tổng phương sai được giải thích bởi từng thành phần chính và sử dụng matplotlib để tạo ra một biểu đồ scree:matplotlib to create a scree plot:

import matplotlib.pyplot as plt
import numpy as np

PC_values = np.arange(pca.n_components_) + 1
plt.plot(PC_values, pca.explained_variance_ratio_, 'o-', linewidth=2, color='blue')
plt.title('Scree Plot')
plt.xlabel('Principal Component')
plt.ylabel('Variance Explained')
plt.show()

Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn

Trục X hiển thị thành phần chính và trục y hiển thị tỷ lệ phần trăm của tổng phương sai được giải thích bởi từng thành phần chính riêng lẻ.

Chúng tôi cũng có thể sử dụng mã sau để hiển thị phần trăm chính xác của tổng phương sai được giải thích bởi từng thành phần chính:

print(pca.explained_variance_ratio_)

[0.62006039 0.24744129 0.0891408  0.04335752]

Chúng ta có thể nhìn thấy:

  • Thành phần chính đầu tiên giải thích & NBSP; 62,01% tổng số biến thể trong bộ dữ liệu.62.01% of the total variation in the dataset.
  • Thành phần chính thứ hai giải thích 24,74% tổng số biến thể.24.74% of the total variation.
  • Thành phần chính thứ ba giải thích 8,91% tổng số biến thể.8.91% of the total variation.
  • Thành phần chính thứ tư giải thích 4,34% tổng số biến thể.4.34% of the total variation.

Lưu ý rằng tỷ lệ phần trăm tổng tới 100%.


Bạn có thể tìm thấy nhiều hướng dẫn học máy hơn trên trang này.

Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn

Để nói với bạn sự thật, tôi đã không bao giờ gặp bất cứ ai có thể hình dung ra nhiều hơn ba chiều. Có một số người tuyên bố họ có thể, và có thể họ có thể; khó mà nói ra được.""“To tell you the truth, I’ve never met anybody who can envision more than three dimensions. There are some who claim they can, and maybe they can; it’s hard to say.”
- Brian Greene

Phân tích thành phần chính:

Phân tích thành phần chính (PCA) có thể có nghĩa là những thứ hơi khác nhau tùy thuộc vào việc chúng ta hoạt động trong lĩnh vực thống kê, đại số tuyến tính hoặc đại số tuyến tính số. & NBSP; Trong thống kê, PCA là sự chuyển đổi của một tập hợp các biến ngẫu nhiên tương quan thành một tập hợp các biến ngẫu nhiên không tương quan. & NBSP; Trong đại số tuyến tính, PCA là một vòng quay của hệ tọa độ cho hệ tọa độ chính tắc và trong đại số tuyến tính số, nó có nghĩa là xấp xỉ ma trận xếp hạng giảm được sử dụng để giảm kích thước. & NBSP;

Phân tích thành phần chính là quá trình tính toán các thành phần chính và sử dụng các thành phần đó để hiểu dữ liệu. (Nguồn: James, et al.)

Sử dụng cho PCA:

PCA được sử dụng trong hai lĩnh vực rộng: a.) Là một phương thuốc cho đa hình và b.) Là một công cụ giảm kích thước. Trong cả hai trường hợp, chúng tôi tìm cách hiểu cấu trúc hiệp phương sai trong dữ liệu đa biến.

  • Trong giảm kích thước, đòi hỏi chúng ta phải tạo ra xấp xỉ thứ hạng giảm vào cấu trúc hiệp phương sai, PCA có thể được sử dụng để gần đúng sự thay đổi của các biến dự đoán p bằng cách sử dụng k

  • PCA cũng có thể được sử dụng để tạo ra một tập hợp các biến trực giao từ một tập hợp các biến dự đoán thô, là một biện pháp khắc phục cho đa hình và điều kiện tiên quyết để phân tích cụm. & NBSP;

Thành phần chủ yếu:

Trong một bộ dữ liệu về các tính năng p, chúng ta có thể tạo các sơ đồ phân tán bivariate của tất cả các cặp biến để hiểu dữ liệu của chúng ta. Trong một bộ dữ liệu lớn với nhiều tính năng, điều này không thực tế và có thể hầu hết các cặp tính năng sẽ đóng góp rất ít cho sự hiểu biết của chúng tôi về dữ liệu. & nbsp; PCA giúp chúng tôi tạo ra một biểu đồ hai chiều của dữ liệu nắm bắt hầu hết các thông tin trong một không gian chiều thấp. Một số lượng nhỏ các kích thước được tạo ra để tối đa hóa sự hiểu biết dữ liệu dựa trên các quan sát biến thiên dọc theo từng chiều. & NBSP;

& nbsp; Tìm các thành phần chính:

Thành phần chính đầu tiên của một tập hợp các biến là sự kết hợp tuyến tính được tiêu chuẩn hóa của các biến ban đầu với phương sai lớn nhất trong số tất cả các kết hợp tuyến tính. Thành phần chính thứ hai là sự kết hợp tuyến tính được tiêu chuẩn hóa của các biến ban đầu với phương sai lớn nhất trong số tất cả các kết hợp tuyến tính còn lại, cho rằng thành phần chính thứ hai không tương quan với thành phần chính thứ nhất. & NBSP; & nbsp; Các thành phần hiệu trưởng thứ ba, thứ tư thứ tư được xác định theo cách tương tự.

Trong thực tế, điều đó có nghĩa là chúng tôi tính toán các cặp eigenvalue-eigenvector bằng cách sử dụng hệ số ma trận được gọi là phân tách giá trị số ít (SVD).

Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn

Assumptions:

PCA không yêu cầu các giả định thống kê. & NBSP; Tuy nhiên, nó nhạy cảm với quy mô của dữ liệu. & NBSP; Do đó, dữ liệu phải được chuẩn hóa (độ lệch chuẩn = 1 và trung bình = 0). Điều này có nghĩa là cột có nghĩa là trong ma trận N*P sẽ là 0. & nbsp; PCA của dữ liệu cần phải dựa trên ma trận tương quan, không phải trên ma trận hiệp phương sai. Lưu ý rằng các thành phần chính dự đoán ma trận hiệp phương sai quan sát được.

Lựa chọn số lượng các yếu tố để giữ lại:

Có ba phương pháp được sử dụng rộng rãi để chọn số lượng các yếu tố để giữ lại: a.) SCREE Biểu đồ, b.) Quy tắc Kaiser, c.) Phần trăm ngưỡng biến đổi. & nbsp; Điều quan trọng là phải là người khác, ví dụ: Chọn số lượng nhỏ nhất của các thành phần chính cung cấp mô tả tốt về dữ liệu.

  • Một cách tiếp cận trực quan để chọn số lượng các thành phần chính để giữ có nghĩa là sử dụng một âm mưu scree. Một biểu đồ Scree cho thấy số lượng thành phần trên trục x so với tỷ lệ phương sai được giải thích trên trục y. Số lượng các thành phần được đề xuất để giữ là nơi cốt truyện tạo thành một khuỷu tay và đường cong làm phẳng. Thật không may, cốt truyện Scree thường trình bày một số sự mơ hồ. & NBSP; Hơn nữa, một cách tiếp cận thực tế thường nhắc nhở các nhà phân tích đánh giá một vài thành phần chính đầu tiên và nếu chúng được quan tâm, nhà phân tích sẽ tiếp tục xem xét các thành phần chính bổ sung. & NBSP; Tuy nhiên, nếu một vài thành phần chính đầu tiên cung cấp ít liên quan, việc đánh giá các thành phần chính bổ sung có khả năng không sử dụng.

  • Quy tắc Kaiser cho thấy quy tắc giá trị riêng tối thiểu. & NBSP; Trong trường hợp này, số lượng các thành phần chính để giữ bằng số lượng giá trị riêng lớn hơn 1.

  • Cuối cùng, số lượng các thành phần cần giữ có thể được xác định bởi một ngưỡng tối thiểu giải thích sự thay đổi trong dữ liệu. Trong trường hợp này, chúng tôi sẽ giữ nhiều thành phần chính khi cần thiết để giải thích ít nhất 70% (hoặc một số ngưỡng khác) của tổng biến thể trong dữ liệu. & NBSP;

Giải pháp Pythonia cho PCA:

Trong ví dụ này, chúng tôi sẽ làm việc với dữ liệu bóng chày! Bộ dữ liệu chứa số liệu thống kê về mỗi đội bóng chày lớn của đội bóng chày trong khoảng thời gian từ 1871 đến 2006. Có 16 biến và khoảng 2.200 bản ghi để chơi. Chúng tôi sẽ cố gắng giảm số lượng các tính năng để có được một bộ dễ quản lý hơn.

Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn

Tôi nhanh chóng tạo ra một biến bổ sung bằng cách định lượng số lượng chiến thắng. Trên thực tế, tôi đã tạo ra ba nhóm bằng nhau dựa trên số lượng chiến thắng được sắp xếp (Target_Wins). Tôi đã chọn thứ ba tốt nhất và được gọi là số lượng 13%lượng tử. Tôi cũng tạo ra các nhóm thứ hai và thứ ba và gọi chúng là 33% và 33% thứ 2 và 33%. Điều này chỉ là để tôi có thể tạo ra các lô thú vị sau này trong phân tích. (Cộng với điều tốt để xem cách nhanh chóng dữ liệu lượng tử.)

baseball_df=baseball_df.sort_values('TARGET_WINS')
baseball_df['WINS_GROUP']=pd.qcut(baseball_df['TARGET_WINS'], 3, labels=['1st 33%','2nd 33%','3rd 33%'])

Sau khi ăn dữ liệu, tôi thấy rằng có rất nhiều quan sát bị thiếu. Một tính năng đặc biệt kém trong việc thu thập dữ liệu (Team_Batting_HBP), vì vậy tôi chỉ cần bỏ nó. Tôi cũng điền vào các giá trị bị thiếu bằng phương tiện cột.

final_df=baseball_df.drop(['TEAM_BATTING_HBP', 'INDEX', 'WINS_GROUP'], axis=1)
final_df=final_df.fillna(final_df.mean())

Chúng tôi đã thảo luận về tầm quan trọng của việc tiêu chuẩn hóa và ở đây tôi đã sử dụng tùy chọn Tiêu chuẩn () để đảm bảo rằng tất cả các tính năng có độ lệch chuẩn là 1 và trung bình là 0. Chúng tôi đã sẵn sàng để phân tích thành phần chính.

scaler = StandardScaler()

scaled_baseball=final_df.copy()
scaled_baseball=pd.DataFrame(scaler.fit_transform(scaled_baseball), columns=scaled_baseball.columns)
scaled_baseball.head()

Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn

Trong ví dụ này, tôi đã chỉ định để tạo sáu thành phần nguyên tắc bằng cách sử dụng thư viện phân tách SCI-kit. Bộ giải SVD được đặt thành tự động (mặc định). Có thể sử dụng các thông số kỹ thuật thay thế cho bộ giải SVD: Auto, Full, ARPack và ngẫu nhiên. Một số cài đặt này cho phép sửa đổi đồng thời các tham số khác.

Ở đây chúng ta có thể thấy sáu thành phần chính và 2.276 quan sát.

pca = PCA(n_components=6, svd_solver == 'auto')
Principal_components=pca.fit_transform(scaled_baseball)
pca_df = pd.DataFrame(data = Principal_components, columns = ['PC 1', 'PC 2', 'PC 3', 'PC 4', 'PC 5', 'PC 6'])
print(pca_df)

        PC 1      PC 2       PC 3      PC 4      PC 5      PC 6
0     8.667692 -1.895858  11.693334 -8.502268  1.729692 -0.183634
1     7.127660 -3.111559   5.058791 -4.322454  1.852035  1.058468
2     6.760946 -0.865078   7.119133 -5.246217  1.516597 -0.800014
3     5.894510 -2.005310   5.724997 -4.249917  1.648310 -0.375298
4     3.300273 -3.036827   0.311197 -1.908499  2.002841  0.570572
...        ...       ...        ...       ...       ...       ...
2271  4.881188  5.388713  -0.558925 -2.536561 -3.510841 -0.179187
2272  3.785295  2.102108  -0.445403 -0.979490 -3.670385 -0.537628
2273  5.140055  7.615759   0.313697 -3.831087 -2.861775  0.574250
2274  1.691937  3.380413  -0.186195 -1.443874 -3.135966  0.352770
2275  5.473301  6.158328  -1.741974 -4.154571 -2.919014  0.087586

Để trực quan hóa, chúng ta hãy kết hợp các quan sát với mỗi chỉ định quan sát về mặt chiến thắng trong một mùa. Hãy nhớ rằng, chúng tôi đã định lượng mỗi mùa theo nhóm vào đầu, giữa và dưới 33% trong số khoảng 2.200 quan sát.

for_visual = pd.concat([pca_df, baseball_df['WINS_GROUP']], axis = 1)
print(for_visual)

Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn

Chúng ta có thể tạo các ô bivariate của từng thành phần chính so với từng thành phần nguyên tắc. Trong ví dụ này, tôi chỉ đơn giản là vẽ hai thành phần nguyên tắc đầu tiên, tương tự như in dữ liệu gốc ra một không gian con chiều thấp. Một số trong số này thú vị hơn trong cuộc sống thực hơn là một trong những người được vẽ ở đây.

fig = plt.figure(figsize = (8,8))
ax = fig.add_subplot(1,1,1) 
ax.set_xlabel('PC 1', fontsize = 15)
ax.set_ylabel('PC 2', fontsize = 15)
ax.set_title('Plot of 1st Two Principal Components vs. Wins', fontsize = 20)
W_GROUP = ['1st 33%','2nd 33%','3rd 33%']
colors = ['navy', 'turquoise', 'darkorange']
for WINS_GROUP, color in zip(W_GROUP,colors):
    indicesToKeep = for_visual['WINS_GROUP'] == WINS_GROUP
    ax.scatter(for_visual.loc[indicesToKeep, 'PC 1']
               , for_visual.loc[indicesToKeep, 'PC 2']
               , c = color
               , s = 50)
ax.legend(W_GROUP)
ax.grid()

Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn

Chọn số lượng thành phần chính:

Chúng tôi có các thành phần nguyên tắc, nhưng làm thế nào để chúng tôi xác định số lượng cần giữ. Hãy để chúng tôi làm việc thông qua ba cách tiếp cận được thảo luận trước đó. Đầu tiên là giải pháp cốt truyện Scree. Như đã thảo luận trước đó, cốt truyện Scree không hoàn toàn minh bạch. Ở đây chúng ta có thể quan sát một khuỷu tay ở 2 và 5 thành phần nguyên tắc. Có vẻ như việc từ bỏ thành phần chính cuối cùng sẽ không tốn nhiều tiền cho chúng ta về sức mạnh giải thích của PCA.

from sklearn.decomposition import PCA

#define PCA model to use
pca = PCA(n_components=4)

#fit PCA model to data
pca_fit = pca.fit(scaled_df)
0

Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn

Tiếp theo, chúng ta hãy thử ngưỡng của phương sai được giải thích. Trong trường hợp này, chúng tôi giữ các thành phần chính giải thích ít nhất 70% phương sai tích lũy. Với thành phần chính thứ tư, tỷ lệ tích lũy của phương sai đã giải thích vượt qua 70%, do đó chúng tôi sẽ xem xét giữ bốn thành phần chính. Nếu một ngưỡng cao hơn được sử dụng, thì các thành phần chính bổ sung sẽ phải được giữ lại.

from sklearn.decomposition import PCA

#define PCA model to use
pca = PCA(n_components=4)

#fit PCA model to data
pca_fit = pca.fit(scaled_df)
1

Cuối cùng, chúng ta có thể xem xét để giữ các thành phần chính có giá trị riêng lớn hơn một. Các giá trị riêng là tổng các bình phương của khoảng cách giữa các điểm dữ liệu được chiếu và nguồn gốc dọc theo một hàm riêng liên quan đến một thành phần chính. Chúng được lưu trữ trong thuộc tính giải thích_variance. Thật thú vị, năm giá trị riêng đầu tiên là trên một, do đó chúng ta sẽ chỉ cần bỏ thành phần chính cuối cùng và giữ năm trong số chúng. Bất cứ cách tiếp cận nào chúng ta thích, Sci-kit học thực hiện một công việc tuyệt vời cung cấp các công cụ để đưa ra quyết định.

from sklearn.decomposition import PCA

#define PCA model to use
pca = PCA(n_components=4)

#fit PCA model to data
pca_fit = pca.fit(scaled_df)
2

Tải yếu tố:

Như một điểm cuối cùng, chúng ta cần giải thích giải pháp PCA cuối cùng của chúng ta. Thành phần chính đầu tiên có tải trọng mạnh từ Team_Batting_3b (0.337590) và Team_Fielding_E (0.354983). Đây là bộ ba bởi batters và lỗi. Nếu bạn là một người hâm mộ bóng chày, bạn có thể đánh giá xem bất kỳ điều gì trong số này có ý nghĩa hay không, nhưng ít nhất, mọi người sẽ có thể diễn giải bảng dưới đây.

from sklearn.decomposition import PCA

#define PCA model to use
pca = PCA(n_components=4)

#fit PCA model to data
pca_fit = pca.fit(scaled_df)
3

Hướng dẫn pca elbow plot python - pca elbow âm mưu trăn