Chuyển ma trận hiệp phương sai sang ma trận tương quan

Trong blog này, chúng ta sẽ đi qua một thống kê mô tả quan trọng của dữ liệu đa biến được gọi là ma trận tương quan. Chúng ta sẽ tìm hiểu cách tạo, vẽ đồ thị và thao tác với ma trận tương quan trong Python

Chúng tôi sẽ xem xét các chủ đề sau

 

Mục lục

  • Ma trận tương quan là gì?
    • Hệ số tương quan là gì?
  • Tìm ma trận tương quan của dữ liệu đã cho
  • Vẽ ma trận tương quan
  • Giải thích ma trận tương quan
  • Thêm tiêu đề và nhãn vào cốt truyện
  • Sắp xếp ma trận tương quan
  • Chọn các cặp tương quan âm
  • Lựa chọn các cặp tương quan mạnh (độ lớn lớn hơn 0. 5)
  • Chuyển đổi ma trận hiệp phương sai thành ma trận tương quan
  • Xuất ma trận tương quan sang hình ảnh
  • Sự kết luận

 

Ma trận tương quan là gì?

Ma trận tương quan là dữ liệu dạng bảng biểu thị 'mối tương quan' giữa các cặp biến trong một dữ liệu nhất định

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Chúng tôi sẽ xây dựng ma trận tương quan này vào cuối blog này

Mỗi hàng và cột đại diện cho một biến và mỗi giá trị trong ma trận này là hệ số tương quan giữa các biến được đại diện bởi hàng và cột tương ứng

Ma trận tương quan là một thước đo phân tích dữ liệu quan trọng được tính toán để tóm tắt dữ liệu nhằm hiểu mối quan hệ giữa các biến khác nhau và đưa ra quyết định phù hợp

Đây cũng là một bước tiền xử lý quan trọng trong quy trình Machine Learning để tính toán và phân tích ma trận tương quan trong đó mong muốn giảm kích thước trên dữ liệu có kích thước lớn

Chúng tôi đã đề cập đến cách mỗi ô trong ma trận tương quan là một ‘hệ số tương quan‘ giữa hai biến tương ứng với hàng và cột của ô

Hãy cho chúng tôi hiểu hệ số tương quan là gì trước khi chúng tôi tiếp tục

Hệ số tương quan là gì?

Hệ số tương quan là một con số biểu thị độ mạnh của mối quan hệ giữa hai biến

Có một số loại hệ số tương quan, nhưng phổ biến nhất trong số đó là hệ số Pearson được biểu thị bằng chữ cái Hy Lạp ρ (rho)

Nó được định nghĩa là hiệp phương sai giữa hai biến chia cho tích độ lệch chuẩn của hai biến.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Trong đó hiệp phương sai giữa X và Y COV(X, Y) được định nghĩa thêm là 'giá trị kỳ vọng của tích các độ lệch của X và Y so với phương tiện tương ứng của chúng'.
Công thức tính hiệp phương sai sẽ làm rõ hơn.
Chuyển ma trận hiệp phương sai sang ma trận tương quan

Vì vậy, công thức cho mối tương quan của Pearson sau đó sẽ trở thành.
Chuyển ma trận hiệp phương sai sang ma trận tương quan

Giá trị của ρ nằm trong khoảng từ -1 đến +1.
Các giá trị gần +1 biểu thị sự hiện diện của mối quan hệ tích cực mạnh mẽ giữa X và Y, trong khi các giá trị gần -1 biểu thị mối quan hệ tiêu cực mạnh mẽ giữa X và Y.
Các giá trị gần bằng 0 có nghĩa là không có bất kỳ mối quan hệ nào giữa X và Y.

Tìm ma trận tương quan của dữ liệu đã cho

Hãy để chúng tôi tạo dữ liệu ngẫu nhiên cho hai biến và sau đó xây dựng ma trận tương quan cho chúng

import numpy as np
np.random.seed(10)
# generating 10 random values for each of the two variables
X = np.random.randn(10)
Y = np.random.randn(10)
# computing the corrlation matrix
C = np.corrcoef(X,Y)
print(C)

Đầu ra.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Vì chúng ta tính toán ma trận tương quan của 2 biến nên kích thước của nó là 2 x 2.
Giá trị 0. 02 chỉ ra rằng không tồn tại mối quan hệ giữa hai biến. Điều này đã được mong đợi vì các giá trị của chúng được tạo ngẫu nhiên.

Trong ví dụ này, chúng tôi đã sử dụng phương pháp `corrcoef` của NumPy để tạo ma trận tương quan.
Tuy nhiên, phương pháp này có hạn chế là chỉ tính được ma trận tương quan giữa 2 biến.

Do đó, tiếp tục, chúng tôi sẽ sử dụng DataFrames của gấu trúc để lưu trữ dữ liệu và tính toán ma trận tương quan trên chúng

Vẽ ma trận tương quan

Đối với lời giải thích này, chúng tôi sẽ sử dụng tập dữ liệu có nhiều hơn hai tính năng

Chúng tôi sẽ sử dụng dữ liệu Ung thư vú, một dữ liệu phân loại nhị phân phổ biến được sử dụng trong các bài học ML cơ bản.
Chúng tôi sẽ tải tập dữ liệu này từ mô-đun 

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
4 của scikit-learn.
Nó được trả về dưới dạng mảng NumPy, nhưng chúng tôi sẽ chuyển đổi chúng thành Pandas DataFrame.

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)

Đầu ra.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Có 30 tính năng trong dữ liệu, tất cả đều được liệt kê trong kết quả ở trên.

Mục tiêu của chúng tôi bây giờ là xác định mối quan hệ giữa từng cặp cột này. Chúng tôi sẽ làm như vậy bằng cách vẽ ma trận tương quan

Để đơn giản, chúng tôi sẽ chỉ sử dụng sáu cột đầu tiên và vẽ ma trận tương quan của chúng.
Để vẽ đồ thị ma trận, chúng tôi sẽ sử dụng thư viện trực quan hóa phổ biến có tên là seaborn, được xây dựng trên matplotlib.

import seaborn as sns
import matplotlib.pyplot as plt
# taking all rows but only 6 columns
df_small = df.iloc[:,:6]
correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.show()

Đầu ra.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Biểu đồ hiển thị ma trận 6 x 6 và tô màu cho từng ô dựa trên hệ số tương quan của cặp đại diện cho ma trận đó.

Phương pháp 

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
5 của Pandas DataFrame được sử dụng để tính toán ma trận. Theo mặc định, nó tính toán hệ số tương quan của Pearson.
Chúng ta cũng có thể sử dụng các phương pháp khác như hệ số Spearman hoặc hệ số tương quan Kendall Tau bằng cách chuyển một giá trị thích hợp cho tham số
from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
6.

Chúng tôi đã sử dụng phương pháp 

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
7 của seaborn để vẽ ma trận. Tham số ‘______18‘ hiển thị các giá trị của hệ số tương quan trong từng ô

Bây giờ chúng ta hãy hiểu cách giải thích ma trận hệ số tương quan được vẽ

 

Giải thích ma trận tương quan

Đầu tiên hãy tạo lại ma trận được tạo trong phần trước và sau đó thảo luận về nó.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Bạn phải ghi nhớ những điểm sau liên quan đến ma trận tương quan như ma trận được hiển thị ở trên.

  1. Mỗi ô trong lưới biểu thị giá trị của hệ số tương quan giữa hai biến
  2. Giá trị tại vị trí (a, b) thể hiện hệ số tương quan giữa các đối tượng tại hàng a và cột b. Điều này sẽ bằng với giá trị tại vị trí (b, a)
  3. Đó là một ma trận vuông – mỗi hàng đại diện cho một biến và tất cả các cột đại diện cho các biến giống như hàng, do đó số hàng = số cột
  4. Đó là một ma trận đối xứng – điều này hợp lý vì mối tương quan giữa a,b sẽ giống như mối tương quan giữa b,a
  5. Tất cả các phần tử đường chéo là 1. Vì các phần tử đường chéo biểu thị mối tương quan của từng biến với chính nó, nên nó sẽ luôn bằng 1
  6. Các trục đánh dấu biểu thị tính năng mà mỗi trong số chúng đại diện
  7. Một giá trị dương lớn (gần 1. 0) biểu thị mối tương quan tích cực mạnh mẽ, i. e. , nếu giá trị của một trong các biến tăng lên thì giá trị của biến kia cũng tăng theo
  8. Giá trị âm lớn (gần -1. 0) biểu thị mối tương quan tiêu cực mạnh, i. e. , giá trị của biến này giảm khi biến kia tăng và ngược lại
  9. Giá trị gần bằng 0 (cả dương hoặc âm) cho biết không có bất kỳ mối tương quan nào giữa hai biến và do đó các biến đó độc lập với nhau
  10. Mỗi ô trong ma trận trên cũng được thể hiện bằng các sắc thái của một màu. Ở đây, các sắc thái tối hơn của màu biểu thị các giá trị nhỏ hơn trong khi các sắc thái sáng hơn tương ứng với các giá trị lớn hơn (gần 1).
    Thang đo này được đưa ra với sự trợ giúp của thanh màu ở phía bên phải của ô.

 

Thêm tiêu đề và nhãn vào cốt truyện

Chúng tôi có thể điều chỉnh ma trận tương quan được tạo, giống như bất kỳ biểu đồ Matplotlib nào khác. Hãy để chúng tôi xem cách chúng tôi có thể thêm tiêu đề vào ma trận và nhãn cho các trục

________số 8

Đầu ra.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Nếu muốn, chúng ta cũng có thể thay đổi vị trí của tiêu đề xuống dưới cùng bằng cách chỉ định vị trí y.

correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.title("Correlation matrix of Breast Cancer data", y=-0.75)
plt.xlabel("cell nucleus features")
plt.ylabel("cell nucleus features")
plt.show()

đầu ra

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Sắp xếp ma trận tương quan

Nếu dữ liệu đã cho có một số lượng lớn các tính năng, ma trận tương quan có thể trở nên rất lớn và do đó khó diễn giải

Đôi khi chúng ta có thể muốn sắp xếp các giá trị trong ma trận và xem mức độ tương quan giữa các cặp tính năng khác nhau theo thứ tự tăng hoặc giảm.
Hãy để chúng tôi xem làm thế nào chúng ta có thể đạt được điều này.

Đầu tiên, chúng ta sẽ chuyển đổi ma trận đã cho thành Chuỗi giá trị một chiều

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
0

Đầu ra.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Phương thức 
from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
9 trên Pandas DataFrame trả về một Chuỗi có MultiIndex. Nghĩa là, mỗi giá trị trong Sê-ri được biểu thị bằng nhiều chỉ mục, trong trường hợp này là chỉ mục hàng và cột có thể là tên đối tượng địa lý.

Bây giờ chúng ta hãy sắp xếp các giá trị này bằng phương pháp

import seaborn as sns
import matplotlib.pyplot as plt
# taking all rows but only 6 columns
df_small = df.iloc[:,:6]
correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.show()
0 của Pandas Series

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
3

Đầu ra.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Chúng ta có thể thấy mỗi giá trị được lặp lại hai lần trong đầu ra được sắp xếp. Điều này là do ma trận tương quan của chúng tôi là một ma trận đối xứng và mỗi cặp tính năng xuất hiện hai lần trong đó.

Tuy nhiên, giờ đây chúng ta có các giá trị hệ số tương quan được sắp xếp của tất cả các cặp tính năng và có thể đưa ra quyết định tương ứng

 

Chọn các cặp tương quan âm

Chúng tôi có thể muốn chọn các cặp đối tượng có phạm vi giá trị cụ thể của hệ số tương quan.
Hãy xem cách chúng ta có thể chọn các cặp có mối tương quan nghịch từ các cặp đã sắp xếp mà chúng ta đã tạo trong phần trước.

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
4

đầu ra

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Lựa chọn các cặp tương quan mạnh (độ lớn lớn hơn 0. 5)

Hãy để chúng tôi sử dụng phương pháp tương tự để chọn các tính năng liên quan chặt chẽ. Tức là chúng ta sẽ cố gắng lọc ra những cặp đặc trưng có giá trị hệ số tương quan lớn hơn 0. 5 hoặc nhỏ hơn -0. 5

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
5

đầu ra

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Chuyển đổi ma trận hiệp phương sai thành ma trận tương quan

Chúng ta đã thấy mối quan hệ giữa hiệp phương sai và tương quan giữa một cặp biến trong phần giới thiệu của blog này.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Hãy cho chúng tôi hiểu cách chúng tôi có thể tính toán ma trận hiệp phương sai của một dữ liệu nhất định bằng Python và sau đó chuyển đổi nó thành ma trận tương quan. Chúng tôi sẽ so sánh nó với ma trận tương quan mà chúng tôi đã tạo bằng cách gọi phương thức trực tiếp.

Trước hết, Pandas không cung cấp phương pháp để tính toán hiệp phương sai giữa tất cả các cặp biến, vì vậy chúng tôi sẽ sử dụng phương pháp 

import seaborn as sns
import matplotlib.pyplot as plt
# taking all rows but only 6 columns
df_small = df.iloc[:,:6]
correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.show()
1 của NumPy

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
7

Đầu ra.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Chúng tôi đang chuyển đổi vị trí của ma trận vì phương thức này yêu cầu một ma trận trong đó mỗi đối tượng địa lý được biểu thị bằng một hàng thay vì một cột.

Vậy là ta đã lấy đúng tử số.
Bây giờ chúng ta cần tính toán ma trận 6×6 trong đó giá trị tại i, j là tích của độ lệch chuẩn của các đối tượng tại vị trí i và j.

Sau đó, chúng ta sẽ chia ma trận hiệp phương sai cho ma trận độ lệch chuẩn này để tính toán ma trận tương quan

Trước tiên chúng ta hãy xây dựng ma trận độ lệch chuẩn

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
0

Đầu ra.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Bây giờ chúng ta có ma trận hiệp phương sai của hình dạng (6,6) cho 6 tính năng và ma trận tích theo cặp của các tính năng có hình dạng (6,6), chúng ta có thể chia cả hai và xem .

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
1

Chúng tôi đã lưu trữ ma trận tương quan mới (xuất phát từ ma trận hiệp phương sai) trong biến

import seaborn as sns
import matplotlib.pyplot as plt
# taking all rows but only 6 columns
df_small = df.iloc[:,:6]
correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.show()
2

Hãy để chúng tôi kiểm tra xem chúng ta có làm đúng hay không bằng cách vẽ đồ thị ma trận tương quan và đặt nó cạnh ma trận trước đó được tạo trực tiếp bằng phương pháp Pandas

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
5

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
2

Đầu ra.

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Chúng ta có thể so sánh hai ma trận và nhận thấy rằng chúng giống hệt nhau.

 

Xuất ma trận tương quan sang hình ảnh

Viết ma trận tương quan trong tập lệnh Python là không đủ. Chúng tôi có thể muốn lưu nó để sử dụng sau.
Chúng tôi có thể lưu biểu đồ được tạo dưới dạng tệp hình ảnh trên đĩa bằng phương pháp 

import seaborn as sns
import matplotlib.pyplot as plt
# taking all rows but only 6 columns
df_small = df.iloc[:,:6]
correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.show()
4.

from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)
3

Sau khi bạn chạy mã này, bạn có thể thấy một tệp hình ảnh có tên 'breast_Cancer_correlation. png' trong cùng một thư mục làm việc

 

Sự kết luận

Trong hướng dẫn này, chúng ta đã tìm hiểu ma trận tương quan là gì và cách tạo chúng trong Python. Chúng tôi bắt đầu bằng cách tập trung vào khái niệm ma trận tương quan và các hệ số tương quan

Sau đó, chúng tôi đã tạo ma trận tương quan dưới dạng mảng NumPy và sau đó là Khung dữ liệu Pandas. Tiếp theo, chúng ta đã học cách vẽ ma trận tương quan và thao tác với nhãn, tiêu đề, v.v. Chúng tôi cũng đã thảo luận về các thuộc tính khác nhau được sử dụng để diễn giải ma trận tương quan đầu ra

Chúng ta cũng thấy cách chúng ta có thể thực hiện một số thao tác nhất định trên ma trận tương quan, chẳng hạn như sắp xếp ma trận, tìm các cặp tương quan nghịch, tìm các cặp tương quan mạnh, v.v.

Sau đó, chúng tôi đã thảo luận về cách chúng tôi có thể sử dụng ma trận hiệp phương sai của dữ liệu và tạo ma trận tương quan từ ma trận đó bằng cách chia nó cho tích của độ lệch chuẩn của các đặc điểm riêng lẻ.
Cuối cùng, chúng ta đã biết cách lưu biểu đồ đã tạo dưới dạng tệp hình ảnh.

  • Chia sẻ trên facebook
  • Tweet trên Twitter

Chuyển ma trận hiệp phương sai sang ma trận tương quan

Mokhtar Ebrahim

Mokhtar là người sáng lập LikeGeek. com. Anh ấy làm quản trị viên hệ thống Linux từ năm 2010. Ông chịu trách nhiệm duy trì, bảo mật và khắc phục sự cố máy chủ Linux cho nhiều khách hàng trên khắp thế giới. Anh ấy thích viết các tập lệnh shell và Python để tự động hóa công việc của mình