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 Show
Chúng tôi sẽ xem xét các chủ đề sau
Mục lục
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 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. 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. Vì vậy, công thức cho mối tương quan của Pearson sau đó sẽ trở thành. 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 đã choHã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. 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. 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. 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. 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. 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. 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ó. 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.
Thêm tiêu đề và nhãn vào cốt truyệnChú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. 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 Sắp xếp ma trận tương quanNế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. Đầ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. 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. 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 âmChú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. 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 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 đổi ma trận hiệp phương sai thành ma trận tương quanChú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. 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. 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ố. 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. 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. 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 ảnhViế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. 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ậnTrong 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ẻ.
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 |