Giá trị riêng Python của ma trận hiệp phương sai

Lượng dữ liệu được tạo ra mỗi ngày từ các nguồn như thí nghiệm khoa học, điện thoại di động và đồng hồ thông minh đã tăng theo cấp số nhân trong vài năm qua. Không chỉ số lượng nguồn dữ liệu tăng lên mà bản thân dữ liệu cũng ngày càng phong phú hơn khi số lượng tính năng trong dữ liệu tăng lên. Bộ dữ liệu có số lượng lớn các tính năng được gọi là bộ dữ liệu chiều cao

Một ví dụ về dữ liệu chiều cao là dữ liệu hình ảnh có độ phân giải cao, trong đó các tính năng là pixel và tăng chiều khi công nghệ cảm biến được cải thiện. Một ví dụ khác là xếp hạng phim của người dùng, trong đó các tính năng là phim được xếp hạng và khi số thứ nguyên tăng lên khi người dùng xếp hạng nhiều thứ nguyên hơn

Các bộ dữ liệu có số lượng lớn các tính năng đặt ra một thách thức duy nhất cho phân tích học máy. Chúng tôi biết rằng các mô hình học máy có thể được sử dụng để phân loại hoặc phân cụm dữ liệu nhằm dự đoán các sự kiện trong tương lai. Tuy nhiên, bộ dữ liệu chiều cao thêm độ phức tạp cho một số mô hình học máy nhất định (i. e. mô hình tuyến tính) và do đó, các mô hình đào tạo trên bộ dữ liệu có số lượng lớn các tính năng dễ gây ra lỗi do sai lệch

Sơn lót PCA

Phân tích thành phần chính (PCA) là một kỹ thuật giảm kích thước được sử dụng để chuyển đổi tập dữ liệu chiều cao thành tập dữ liệu có ít biến hơn, trong đó tập hợp các biến kết quả giải thích phương sai tối đa trong tập dữ liệu. PCA được sử dụng trước các bước học máy có giám sát và không giám sát để giảm số lượng tính năng được sử dụng trong phân tích, do đó giảm khả năng xảy ra lỗi

Xem xét dữ liệu từ một hệ thống xếp hạng phim trong đó xếp hạng phim từ những người dùng khác nhau là các trường hợp và các phim khác nhau là các tính năng

Tôi đã học về giá trị riêng và vectơ riêng ở trường Đại học trong khóa học đại số tuyến tính. Nó rất khô khan và toán học, vì vậy tôi không hiểu nó là gì. Nhưng tôi muốn trình bày chủ đề này với bạn một cách trực quan hơn và tôi sẽ sử dụng nhiều hình ảnh động để minh họa nó

Đầu tiên, chúng ta sẽ xem xét cách áp dụng một ma trận cho một vectơ xoay và chia tỷ lệ một vectơ. Điều này sẽ cho chúng ta thấy giá trị riêng và vectơ riêng là gì. Sau đó, chúng ta sẽ tìm hiểu về các thành phần chính và chúng là các vectơ riêng của ma trận hiệp phương sai. Kiến thức này sẽ giúp chúng tôi hiểu chủ đề cuối cùng của chúng tôi, phân tích thành phần chính

Phép nhân ma trận

Để hiểu các giá trị riêng và vectơ riêng, trước tiên chúng ta phải xem xét phép nhân ma trận

Hãy xem xét ma trận sau

(Ảnh của tác giả)

Khi chúng ta lấy tích vô hướng của một ma trận và một véc-tơ, véc-tơ kết quả là phiên bản được xoay và thu nhỏ của véc-tơ ban đầu

(Ảnh của tác giả)

(GIF của tác giả)

Trong khoa học dữ liệu, chúng ta chủ yếu nói về các điểm dữ liệu, không phải vectơ. Nhưng chúng giống nhau về bản chất và có thể được sử dụng thay thế cho nhau. Và các điểm dữ liệu cũng có thể được chuyển đổi bằng phép nhân ma trận theo cách tương tự như vectơ

(GIF của tác giả)

Nhưng ngay cả khi phép nhân ma trận quay và chia tỷ lệ, thì đó là một phép biến đổi tuyến tính

Tại sao phép nhân ma trận là một phép biến đổi tuyến tính? . Hãy tưởng tượng một lưới trên đó các điểm này được đặt. Khi chúng tôi áp dụng ma trận cho các điểm dữ liệu của mình và di chuyển lưới cùng với các điểm dữ liệu, chúng tôi thấy rằng các đường của lưới vẫn thẳng. Nếu các đường cong, thì phép biến đổi sẽ phi tuyến tính

(GIF của tác giả)Eigenvector

Chúng tôi xem xét ma trận tương tự như trên

(Ảnh của tác giả)

Khi áp dụng ma trận này cho các vectơ khác nhau, chúng hoạt động khác nhau. Một số trong số chúng có thể được xoay và thu nhỏ. Một số trong số chúng chỉ được xoay, một số trong số chúng chỉ được thu nhỏ và một số trong số chúng có thể không thay đổi gì cả

Các vectơ riêng là các vectơ, mà

  • chỉ được thu nhỏ
  • hoặc không thay đổi chút nào

(GIF của tác giả)

Bạn có thể thấy rằng các vectơ riêng nằm trên cùng một dòng và các vectơ khác (vectơ chung) bị xoay theo một mức độ nào đó

(GIF của tác giả)

Ma trận 2x2 luôn có hai vectơ riêng, nhưng không phải lúc nào chúng cũng trực giao với nhau

giá trị bản địa

Mỗi vectơ riêng có một giá trị riêng tương ứng. Đó là yếu tố mà véc tơ riêng được thu nhỏ, khi nó được biến đổi bởi ma trận. Chúng tôi xem xét cùng một ma trận và do đó, hai vectơ riêng giống nhau như đã đề cập ở trên

(Ảnh của tác giả)

Một trong hai vectơ riêng của ma trận này (tôi gọi nó là vectơ riêng 1, nhưng đây là tùy ý) được chia tỷ lệ theo hệ số 1. 4

(GIF của tác giả)

Eigenvector 2 get cũng được chia tỷ lệ theo hệ số 1. 4 nhưng hướng của nó bị đảo ngược. Do đó, giá trị riêng 2 là -1. 4

(GIF của tác giả)Các ứng dụng của giá trị vectơ riêng và giá trị riêng trong Khoa học dữ liệu

Thành phần chủ yếu

Sử dụng các giá trị riêng và vectơ riêng, chúng ta có thể tìm thấy các trục chính của dữ liệu của mình. Trục chính đầu tiên (còn được gọi là "thành phần chính đầu tiên") là trục trong đó dữ liệu thay đổi nhiều nhất. Trục chính thứ hai (còn được gọi là “thành phần chính thứ hai”) là trục có độ biến thiên lớn thứ hai, v.v.

Hãy xem xét một tập dữ liệu 2 chiều

(GIF của tác giả)

Để tìm các thành phần chính, trước tiên chúng ta tính ma trận Phương sai-Hiệp phương sai C

(Ảnh của tác giả)

Chúng ta có thể sử dụng numpy để tính toán chúng. Lưu ý rằng dữ liệu của chúng tôi (X) phải được sắp xếp giống như khung dữ liệu gấu trúc. Mỗi cột đại diện cho một biến/tính năng khác nhau

import numpy as np
C = np.cov(X, rowvar = False)

Và sau đó chúng ta có thể tính toán các vectơ riêng và giá trị riêng của C

import numpy as np
eigenvalues,eigenvectors = np.linalg.eig(C)

Các vectơ riêng cho chúng ta thấy hướng của các trục chính (các thành phần chính) của dữ liệu của chúng ta. Giá trị riêng càng lớn, độ biến thiên dọc theo trục này càng lớn. Vì vậy, vectơ riêng có giá trị riêng lớn nhất tương ứng với trục có phương sai lớn nhất

(GIF của tác giả)

Chúng ta nên nhớ rằng ma trận đại diện cho một phép biến đổi tuyến tính. Khi chúng ta nhân ma trận Hiệp phương sai với dữ liệu của mình, chúng ta có thể thấy rằng trung tâm của dữ liệu không thay đổi. Và dữ liệu được kéo dài theo hướng của vectơ riêng với phương sai/giá trị riêng lớn hơn và được nén dọc theo trục của vectơ riêng với phương sai nhỏ hơn

Các điểm dữ liệu nằm trực tiếp trên các vectơ riêng không bị xoay

(GIF của tác giả)

Phân tích thành phần chính (PCA)

Phân tích thành phần chính sử dụng sức mạnh của vectơ riêng và giá trị riêng để giảm số lượng tính năng trong dữ liệu của chúng tôi, đồng thời giữ lại hầu hết phương sai (và do đó hầu hết thông tin). Trong PCA, chúng tôi chỉ định trước số lượng thành phần chúng tôi muốn giữ lại

Thuật toán PCA bao gồm các bước sau

  1. Chuẩn hóa dữ liệu bằng cách trừ giá trị trung bình và chia cho độ lệch chuẩn
  2. Tính ma trận hiệp phương sai
  3. Tính giá trị riêng và vectơ riêng
  4. Hợp nhất các vectơ riêng thành một ma trận và áp dụng nó vào dữ liệu. Điều này xoay và chia tỷ lệ dữ liệu. Các thành phần chính hiện được căn chỉnh với các trục của các tính năng của chúng tôi
  5. Giữ các tính năng mới chiếm nhiều biến thể nhất và loại bỏ phần còn lại

Hãy xem PCA làm gì trên tập dữ liệu 2 chiều. Trong ví dụ này, chúng tôi không giảm số lượng các tính năng. Giảm số lượng các tính năng có ý nghĩa đối với dữ liệu nhiều chiều vì sau đó nó làm giảm số lượng các tính năng

(GIF của tác giả)

Hãy tải tập dữ liệu iris. Nó chứa số đo của ba loài hoa diên vĩ khác nhau. Những loài đó là iris-virginica, iris-versicolor và iris-setosa

(Mã của tác giả)

Hãy xem nhanh tập dữ liệu

print(iris_df.head())

(GIF của tác giả)

Chúng ta có thể tạo một biểu đồ được gọi là “scree plot” để xem biến nào chiếm nhiều biến nhất trong dữ liệu. Đối với điều này, chúng tôi thực hiện một PCA đầu tiên

(Mã của tác giả)

(Ảnh của tác giả)

Như chúng ta có thể thấy, hai thành phần đầu tiên chiếm phần lớn sự thay đổi trong dữ liệu. Vì vậy, tôi đã quyết định chỉ giữ lại hai thành phần đầu tiên và loại bỏ phần còn lại. Khi đã xác định số lượng thành phần cần giữ lại, chúng tôi có thể chạy PCA thứ hai trong đó chúng tôi giảm số lượng tính năng

Bây giờ chúng ta hãy xem dữ liệu của chúng ta, đó là một mảng

print(iris_transformed[:5,:])

(Ảnh của tác giả)

Chúng ta có thể thấy rằng chúng ta chỉ còn hai cột. Các cột/biến này là sự kết hợp tuyến tính của dữ liệu gốc của chúng tôi và không tương ứng với một tính năng của tập dữ liệu gốc (như chiều rộng vách ngăn, chiều dài vách ngăn,…)

Hãy trực quan hóa dữ liệu của chúng tôi

(Mã của tác giả)

Chúng tôi thấy các tính năng kết hợp mới của chúng tôi trên trục x và y. Các loài thực vật được biểu thị bằng màu sắc của một điểm dữ liệu

(Ảnh của tác giả)

Chúng ta có thể thấy rằng phần lớn thông tin trong dữ liệu đã được bảo toàn và giờ đây chúng ta có thể đào tạo một mô hình ML, mô hình này phân loại các điểm dữ liệu theo ba loại

Sự kết luận

Bây giờ tôi sẽ tóm tắt các khái niệm quan trọng nhất

Phép nhân ma trận

Khi chúng ta nhân một ma trận với một vectơ, vectơ đó sẽ được biến đổi tuyến tính. Phép biến đổi tuyến tính này là sự kết hợp giữa xoay và chia tỷ lệ vectơ. Các vectơ chỉ được thu nhỏ và không được quay được gọi là các vectơ riêng. Yếu tố mà chúng được chia tỷ lệ là giá trị riêng tương ứng

Thành phần chủ yếu

Các thành phần chính là các trục trong đó dữ liệu của chúng tôi hiển thị nhiều biến thể nhất. Thành phần chính đầu tiên giải thích phần lớn nhất của biến thể quan sát được và thành phần chính thứ hai giải thích phần lớn thứ hai, v.v. Các thành phần chính là các vectơ riêng của ma trận hiệp phương sai. Thành phần chính đầu tiên tương ứng với vectơ riêng có giá trị riêng lớn nhất

PCA

Phân tích thành phần chính là một kỹ thuật để giảm số lượng tính năng trong bộ dữ liệu của chúng tôi. Nó bao gồm các bước xử lý sau

  1. Chuẩn hóa dữ liệu bằng cách trừ giá trị trung bình và chia cho độ lệch chuẩn
  2. Tính ma trận hiệp phương sai
  3. Tính giá trị riêng và vectơ riêng
  4. Hợp nhất các vectơ riêng thành một ma trận và áp dụng nó vào dữ liệu. Điều này xoay và chia tỷ lệ dữ liệu. Các thành phần chính hiện được căn chỉnh với các trục của các tính năng của chúng tôi
  5. Giữ lại nhiều tính năng mới như chúng tôi đã chỉ định và loại bỏ phần còn lại. Chúng tôi giữ các tính năng có thể giải thích sự thay đổi nhiều nhất trong dữ liệu
nguồn

https. // khoa học dữ liệuplus. com/hieu-the-covariance-matrix/

https. // vi. wikipedia. org/wiki/Iris_flower_data_set

https. //scikit-học. org/stable/auto_examples/decomposition/plot_pca_iris. html

Bộ dữ liệu

diên vĩ

Bộ dữ liệu Iris và giấy phép có thể được tìm thấy dưới

https. //www. openml. tổ chức/d/61

Nó được cấp phép theo sáng tạo chung, nghĩa là bạn có thể sao chép, sửa đổi, phân phối và thực hiện tác phẩm, ngay cả với mục đích thương mại, tất cả mà không cần xin phép

Những bài viết liên quan

Ký hiệu chỉ số Einstein

Tổng kết Einstein, ký hiệu chỉ mục và numpys np. einsum

hướng tới khoa học dữ liệu. com

Lan truyền ngược trong mạng nơ-ron

Mạng lưới thần kinh từ đầu bao gồm toán học và mã python

hướng tới khoa học dữ liệu. com

Tính toán ma trận cho các nhà khoa học dữ liệu

Uống viên thuốc màu đỏ và tìm hiểu về phép tính ma trận

hướng tới khoa học dữ liệu. com

Bài viết khác của tác giả

Cách bạn có thể sử dụng GPT-J

GPT-J đã giải thích và 3 cách dễ dàng để bạn có thể truy cập nó

hướng tới khoa học dữ liệu. com

Học Deep Q không phải là khoa học tên lửa

Deep Q và double Q learning được giải thích và mã hóa trong pytorch

hướng tới khoa học dữ liệu. com

Học chuyển giao sâu

Nghệ thuật sử dụng lại các mô hình do người khác đào tạo

hướng tới khoa học dữ liệu. com

Bạn muốn kết nối?

Linkedin
https. //www. linkin. com/in/vincent-m%C3%BCller-6b3542214/
Facebook
https. //www. Facebook. com/hồ sơ. php?id=100072095823739
Twitter
https. //twitter. com/Vincent02770108
Trung bình
https. //vừa phải. com/@Vincent. Mueller
Bạn có thể trở thành thành viên Medium và đồng thời ủng hộ tôi
https. //vừa phải. com/@Vincent. Mueller/tư cách thành viên

phụ lục toán

Tính giá trị riêng và vectơ riêng

Nếu bạn thích toán học và muốn tìm hiểu sâu hơn, tôi đã tóm tắt một số toán học được sử dụng trong bài đăng trên blog này

Chúng ta có thể dễ dàng tính toán các hàm riêng và giá trị riêng trong python

import numpy as np
eigenvalues,eigenvectors = np.linalg.eig(M)

Nếu chúng ta muốn tính toán chúng bằng tay, nó sẽ phức tạp hơn một chút

Như chúng ta đã thấy, khi chúng ta nhân ma trận M với một véc tơ riêng (ký hiệu là 𝑣), nó cũng giống như việc chia tỷ lệ giá trị riêng của nó 𝜆

(Ảnh của tác giả)

Bây giờ chúng ta sắp xếp lại phương trình

(Ảnh của tác giả)

Trong đó tôi là ma trận đơn vị, có một đường chéo và các số 0 ở những nơi khác. Nó có hình dạng giống như A

(Ảnh của tác giả)

(Ảnh của tác giả)

Và cách duy nhất để phương trình này đúng

(Ảnh của tác giả)

Điều này chỉ đúng khi định thức của ma trận (A -𝜆⋅I) bằng 0

Định thức của ma trận là hệ số mà theo đó ma trận chia tỷ lệ diện tích trong trường hợp ma trận 2x2 và thể tích trong trường hợp ma trận 3x3. Nếu định thức bằng không thì ma trận (A -𝜆⋅I) ép các điểm về gốc tọa độ (gốc là điểm không). Đây là cách duy nhất để một vectơ khác 0 trở thành một vectơ không

Các giá trị riêng của ma trận hiệp phương sai là gì?

Truyện dài ngắn. Các giá trị riêng của ma trận hiệp phương sai mã hóa tính biến thiên của dữ liệu trong một cơ sở trực giao để nắm bắt càng nhiều tính biến thiên của dữ liệu càng tốt trong một vài hàm cơ sở đầu tiên .

Sự khác biệt giữa EIG và tám trong Python là gì?

"Eig" trả về đúng vectơ riêng. "Eigh" trả về véc tơ riêng bên trái . Nó có nghĩa là thứ tự của các giá trị là khác nhau. Sự khác biệt khác là tốc độ tính toán.

Hàm Numpy Linalg Eig() trả về cái gì?

linalg. tám. Trả về các giá trị riêng và vectơ riêng của một Hermitian phức tạp (đối xứng liên hợp) hoặc một ma trận đối xứng thực .

Giá trị bản địa trong PCA là gì?

Giá trị riêng là các hệ số áp dụng cho các vectơ riêng cung cấp cho các vectơ độ dài hoặc độ lớn của chúng . Vì vậy, PCA là một phương pháp mà. Đo lường cách mỗi biến được liên kết với nhau bằng cách sử dụng ma trận Hiệp phương sai. Hiểu hướng lan truyền dữ liệu của chúng tôi bằng cách sử dụng Eigenvector.