Ma trận tương quan Python

[Cập nhật 2020–04–12. Mã được mô tả bên dưới hiện có sẵn dưới dạng gói pip — https. //pypi. tổ chức/dự án/bản đồ nhiệt/. Ngoài ra còn có một sổ ghi chép Google Colab tại đây, bạn có thể xem một số ví dụ trong đó và thử với thư viện]

Sơ đồ ma trận tương quan

Bạn đã biết rằng nếu bạn có một tập dữ liệu có nhiều cột, thì một cách tốt để kiểm tra nhanh mối tương quan giữa các cột là trực quan hóa ma trận tương quan dưới dạng bản đồ nhiệt.

Nhưng một bản đồ nhiệt đơn giản có phải là cách tốt nhất để làm điều đó?

Để minh họa, tôi sẽ sử dụng Bộ dữ liệu ô tô, chứa các đặc điểm khác nhau của một số ô tô. Bạn cũng có thể tìm thấy phiên bản rõ ràng của dữ liệu với các cột tiêu đề tại đây

Hãy bắt đầu bằng cách tạo bản đồ nhiệt ma trận tương quan cho tập dữ liệu

Tuyệt vời. Màu xanh lá cây có nghĩa là tích cực, màu đỏ có nghĩa là tiêu cực. Màu càng mạnh, độ lớn tương quan càng lớn. Bây giờ nhìn vào biểu đồ trên, hãy suy nghĩ về những câu hỏi sau

  • Mắt bạn nhảy vào đâu đầu tiên khi nhìn vào biểu đồ?
  • Đâu là cặp tương quan mạnh nhất và yếu nhất [ngoại trừ đường chéo chính]?
  • Ba biến tương quan nhất với giá là gì?

Nếu bạn giống như hầu hết mọi người, bạn sẽ thấy khó ánh xạ thang màu thành số và ngược lại

Phân biệt tích cực với tiêu cực là dễ dàng, cũng như 0 từ 1. Nhưng còn câu hỏi thứ hai thì sao? . Để làm được điều đó, tôi cần quét cẩn thận toàn bộ lưới. Cố gắng trả lời lại và để ý xem mắt bạn nhảy xung quanh cốt truyện như thế nào, và đôi khi đi đến truyền thuyết

Bây giờ hãy xem xét cốt truyện sau

Ngoài màu sắc, chúng tôi đã thêm kích thước làm thông số cho bản đồ nhiệt của mình. Kích thước của mỗi ô vuông tương ứng với độ lớn của mối tương quan mà nó đại diện, nghĩa là

kích thước [c1, c2] ~ abs [sửa [c1, c2]]

Bây giờ hãy cố gắng trả lời các câu hỏi bằng cách sử dụng cốt truyện sau. Lưu ý cách các mối tương quan yếu biến mất một cách trực quan và mắt bạn ngay lập tức bị thu hút vào các khu vực có mối tương quan cao. Cũng xin lưu ý rằng giờ đây việc so sánh cường độ của các giá trị âm và dương [màu đỏ nhạt hơn so với màu xanh lá cây nhạt hơn] dễ dàng hơn và chúng ta cũng có thể so sánh các giá trị cách xa nhau hơn

Nếu chúng ta lập bản đồ độ lớn, việc liên kết chúng với kích thước của đối tượng đại diện sẽ tự nhiên hơn nhiều so với màu sắc của nó. Đó chính xác là lý do tại sao trên biểu đồ thanh, bạn sẽ sử dụng chiều cao để hiển thị số đo và màu sắc để hiển thị danh mục chứ không phải ngược lại

Phân phối chung rời rạc

Hãy xem cách những chiếc xe trong bộ dữ liệu của chúng tôi được phân phối theo mã lực và cách bố trí hệ thống truyền động. Đó là, chúng tôi muốn hình dung bảng sau

Hãy xem xét hai cách sau đây để làm điều đó

Phiên bản thứ hai, trong đó chúng tôi sử dụng kích thước hình vuông để hiển thị số lượng giúp dễ dàng xác định nhóm nào lớn nhất/nhỏ nhất. Nó cũng đưa ra một số trực giác về các phân phối cận biên, tất cả mà không cần tham khảo chú thích màu

Tuyệt vời. Vì vậy, làm thế nào để tôi thực hiện các lô này?

Để tạo bản đồ nhiệt thông thường, chúng tôi chỉ cần sử dụng chức năng bản đồ nhiệt Seaborn, với một chút kiểu dáng bổ sung

Đối với loại thứ hai, không có cách nào đơn giản để tạo nó bằng Matplotlib hoặc Seaborn. Chúng tôi có thể sử dụng corrplot từ biokit, nhưng nó chỉ giúp ích cho các mối tương quan và không hữu ích cho các bản phân phối hai chiều

Xây dựng một hàm tham số hóa mạnh mẽ cho phép chúng tôi tạo bản đồ nhiệt với các điểm đánh dấu có kích thước là một bài tập hay trong Matplotlib, vì vậy tôi sẽ chỉ cho bạn cách thực hiện từng bước

Chúng ta sẽ bắt đầu bằng cách sử dụng một biểu đồ phân tán đơn giản với các ô vuông làm điểm đánh dấu. Sau đó, chúng tôi sẽ khắc phục một số vấn đề với nó, thêm màu sắc và kích thước làm tham số, làm cho nó trở nên tổng quát và mạnh mẽ hơn đối với nhiều loại đầu vào khác nhau và cuối cùng tạo một chức năng trình bao bọc corrplot lấy kết quả của DataFrame. Corr và vẽ một ma trận tương quan, cung cấp tất cả các tham số cần thiết cho chức năng bản đồ nhiệt tổng quát hơn

Nó chỉ là một âm mưu phân tán

Nếu chúng ta muốn vẽ các phần tử trên một lưới được tạo bởi hai trục phân loại, chúng ta có thể sử dụng biểu đồ phân tán

Có vẻ như chúng ta đang làm gì đó. Nhưng tôi đã nói đó chỉ là biểu đồ phân tán và có khá nhiều điều xảy ra trong đoạn mã trước đó

Vì biểu đồ phân tán yêu cầu x và y là các mảng số, nên chúng ta cần ánh xạ tên cột của mình thành các số. Và vì chúng tôi muốn các dấu kiểm trên trục của mình hiển thị tên cột thay vì các số đó, nên chúng tôi cần đặt các dấu kiểm và nhãn đánh dấu tùy chỉnh. Cuối cùng, có mã tải tập dữ liệu, chọn một tập hợp con các cột, tính toán tất cả các mối tương quan, làm tan khung dữ liệu [nghịch đảo của việc tạo bảng tổng hợp] và cung cấp các cột của nó cho chức năng bản đồ nhiệt của chúng tôi

Bạn nhận thấy rằng các hình vuông của chúng ta được đặt ở nơi các đường lưới của chúng ta giao nhau, thay vì được căn giữa trong các ô của chúng. Để di chuyển các ô vuông đến các tâm ô, chúng ta sẽ thực sự di chuyển lưới. Và để di chuyển lưới, chúng tôi thực sự sẽ tắt các đường lưới chính và đặt các đường lưới phụ nằm ngay giữa các trục của chúng tôi

Cái đó tốt hơn. Nhưng bây giờ phía bên trái và phía dưới trông như bị cắt. Đó là bởi vì giới hạn dưới trục của chúng tôi được đặt thành 0. Chúng tôi sẽ giải quyết vấn đề này bằng cách đặt giới hạn dưới cho cả hai trục thành - 0. 5. Hãy nhớ rằng, các điểm của chúng ta được hiển thị ở các tọa độ nguyên, vì vậy các đường lưới của chúng ta ở. 5 tọa độ

Cho nó một chút màu sắc

Bây giờ đến phần thú vị. Chúng ta cần ánh xạ phạm vi giá trị có thể có của các hệ số tương quan, [-1, 1], thành một bảng màu. Chúng tôi sẽ sử dụng bảng màu phân kỳ, đi từ màu đỏ cho -1, đến màu xanh lục cho 1. Nhìn vào bảng màu Seaborn, có vẻ như chúng ta sẽ làm tốt với những thứ như

sns.palplot[sns.diverging_palette[220, 20, n=7]]

Nhưng trước tiên, hãy lật thứ tự màu sắc và làm cho nó mượt mà hơn bằng cách thêm nhiều bước hơn giữa màu đỏ và màu xanh lá cây

palette = sns.diverging_palette[20, 220, n=256]

Các bảng màu Seaborn chỉ là các mảng của các thành phần màu, vì vậy để ánh xạ một giá trị tương quan thành màu thích hợp, cuối cùng chúng ta cần ánh xạ nó tới một chỉ mục trong mảng bảng màu. Đó là một ánh xạ đơn giản của khoảng này sang khoảng khác. [-1, 1] → [0, 1] → [0, 255]. Chính xác hơn, đây là trình tự các bước mà ánh xạ này sẽ thực hiện

Chỉ là những gì chúng tôi muốn. Bây giờ hãy thêm một thanh màu ở phía bên phải của biểu đồ. Chúng tôi sẽ sử dụng GridSpec để thiết lập lưới ô có 1 hàng và n cột. Sau đó, chúng tôi sẽ sử dụng cột ngoài cùng bên phải của biểu đồ để hiển thị thanh màu và phần còn lại để hiển thị bản đồ nhiệt

Có nhiều cách để hiển thị một thanh màu, ở đây chúng ta sẽ đánh lừa thị giác bằng cách sử dụng một biểu đồ thanh dày đặc. Chúng ta sẽ vẽ n_colors thanh ngang, mỗi thanh được tô bằng màu tương ứng từ bảng màu

Và chúng tôi có thanh màu của chúng tôi

Chúng tôi sắp hoàn thành. Bây giờ chúng ta chỉ cần lật trục tung để có được mối tương quan của từng biến với chính nó được hiển thị trên đường chéo chính, làm cho hình vuông lớn hơn một chút và làm cho nền sáng hơn một chút để các giá trị xung quanh 0 dễ nhìn thấy hơn

Nhưng trước tiên hãy làm cho toàn bộ mã hữu ích hơn

Thêm thông số

Sẽ thật tuyệt nếu chúng ta làm cho chức năng của mình có thể chấp nhận nhiều thứ hơn là chỉ một ma trận tương quan. Để làm điều này, chúng tôi sẽ thực hiện các thay đổi sau

  • Có thể chuyển color_min, color_max và size_min, size_max làm tham số để chúng tôi có thể ánh xạ các phạm vi khác với [-1, 1] thành màu sắc và kích thước. Điều này sẽ cho phép chúng tôi sử dụng bản đồ nhiệt ngoài các mối tương quan
  • Sử dụng bảng màu tuần tự nếu không có bảng màu nào được chỉ định, sử dụng một màu duy nhất nếu không có vectơ màu được cung cấp
  • Sử dụng kích thước không đổi nếu không có vectơ kích thước được cung cấp. Tránh ánh xạ giá trị thấp nhất thành kích thước 0
  • Đặt x và y làm tham số cần thiết duy nhất và chuyển kích thước, màu sắc, size_scale, size_range, color_range, palette, marker dưới dạng kwargs. Cung cấp các giá trị mặc định hợp lý cho từng tham số
  • Sử dụng khả năng hiểu danh sách thay vì áp dụng gấu trúc và phương thức ánh xạ, vì vậy chúng tôi có thể chuyển bất kỳ loại mảng nào dưới dạng x, y, màu sắc, kích thước thay vì chỉ gấu trúc. Loạt
  • Chuyển bất kỳ kwarg nào khác cho pyplot. chức năng biểu đồ phân tán
  • Tạo một hàm bao bọc corrplot chấp nhận khung dữ liệu corr[], làm tan chảy nó, gọi bản đồ nhiệt với bảng màu phân kỳ đỏ-xanh lục và kích thước/màu tối thiểu được đặt thành [-1, 1]

Đó là khá nhiều nội dung soạn sẵn để trình bày từng bước, vì vậy, đây là giao diện khi hoàn thành. Bạn cũng có thể kiểm tra nó trong kernel Kaggle này

Cuối cùng

Bây giờ chúng ta đã có các hàm corrplot và heatmap, để tạo biểu đồ tương quan với các ô vuông có kích thước, giống như biểu đồ ở đầu bài đăng này, chúng ta chỉ cần thực hiện như sau

Và để giải trí, chúng ta hãy lập một biểu đồ cho thấy cách phân bổ công suất động cơ giữa các thương hiệu xe hơi trong bộ dữ liệu của chúng tôi

Điều đó kết thúc câu chuyện về ý tưởng đơn giản này để cải thiện khả năng hiển thị bản đồ nhiệt

Tò mò để biết thêm?

Có một bình luận hoặc câu hỏi?

Tôi cũng tóm tắt các bài học từ ngành trên Tạp chí Blogboard, nơi bạn có thể tìm thấy các bài viết như Khoa học dữ liệu để tối ưu hóa tiếp thị — Nghiên cứu điển hình từ Airbnb, Lyft, Doordash

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

Ma trận tương quan là bảng chứa các hệ số tương quan giữa các biến . Mỗi ô trong bảng thể hiện mối tương quan giữa hai biến. Giá trị nằm giữa -1 và 1.

gấu trúc ma trận tương quan là gì?

Tương quan là một kỹ thuật thống kê cho biết hai biến có liên quan như thế nào . khung dữ liệu gấu trúc. phương thức corr[] được sử dụng để tạo ma trận tương quan. Nó được sử dụng để tìm mối tương quan theo cặp của tất cả các cột trong khung dữ liệu. Mọi giá trị na sẽ tự động bị loại trừ.

Ma trận tương quan giữa các tính năng trong Python là gì?

Ma trận tương quan là một công cụ phổ biến được sử dụng để so sánh các hệ số tương quan giữa các tính năng [hoặc thuộc tính] khác nhau trong tập dữ liệu . Nó cho phép chúng ta hình dung mức độ [hoặc ít] tương quan tồn tại giữa các biến khác nhau. Đây là một bước quan trọng trong quy trình tiền xử lý máy học.

Làm thế nào để tính toán ma trận tương quan?

Vì nó giúp xác định các mẫu nên ma trận tương quan rất hữu ích trong quản lý đầu tư, kinh tế, quản lý rủi ro và thống kê. Hơn nữa, mối tương quan. Nó được tính như [x[i]-mean[x]]*[y[i]-mean[y]] / [[x[i]-mean[x]]2 . .

Chủ Đề