Hướng dẫn parity plot python - trăn lô chẵn lẻ

Giới thiệu

Tôi đã gặp phải vấn đề này nhiều lần nhưng tôi đã không giải quyết đầy đủ cho đến ngày hôm nay khi tôi chuẩn bị một cuộc nói chuyện, tôi đột nhiên nhận ra rằng tôi phải sửa chữa điều này. Vì vậy, sau một vài thử nghiệm và googling, tôi đã tóm tắt tất cả các mã bạn cần để vẽ cốt truyện chẵn lẻ trong blog này.

Cốt truyện tương đương

Thông tin chi tiết có thể được tìm thấy trong Wikipedia ở đây cốt truyện Parity, vì vậy tôi sẽ chỉ đề cập đến một số mảnh nhỏ sẽ bị bỏ qua khi bạn chỉ thử các mã Python đơn giản để tạo ra số liệu.

Trực tiếp lỗi dự đoán biểu thị các mục tiêu thực tế từ bộ dữ liệu so với các giá trị dự đoán được tạo bởi (các) mô hình của chúng tôi.

Biểu đồ lỗi dự đoán

Ý tưởng chính trong cốt truyện tương đương là nếu mô hình dự đoán của bạn hoạt động rất tốt, nó sẽ nằm gần đường chéo (dòng 1-1 hoặc 45 độ) với giá trị sự thật mặt đất. Vì vậy, hai điều cần phải được ghi nhớ,

  1. Trục X-Y phải nằm trong cùng một phạm vi khôn ngoan khác, đường chéo của bạn có thể trông kỳ lạ.
  2. Đánh dấu X-Y phải là cùng chiều dài của đơn vị nếu không, dòng 45 độ có thể không có nghĩa là dòng đồ thị tương đương mà bạn đang tìm kiếm. Ví dụ, chiều dài 10 pixel trong trục X có nghĩa là cùng một lượng giá trị với chiều dài 10 pixel trong trục y.

Dữ liệu và mã

Rõ ràng, thật dễ dàng để vẽ X, Y thất bại trong cùng một trường hợp phạm vi bởi vì, thật dễ dàng để điều chỉnh, tuy nhiên, làm thế nào về thuật toán dự đoán của bạn hoạt động kém và bạn X, Y thì xấu.

Vâng, cần phải cẩn thận, vì vậy mặc dù có một số bài đăng trực tuyến về các phần riêng lẻ của cách vẽ cốt truyện chẵn lẻ nhưng không có bản demo tích hợp, vì vậy sau khi kiểm tra hàm dự đoán trong tài liệu Yellowbrick, tôi sẽ một bộ dữ liệu và mã ví dụ để tạo tính tương đương kịch bản.

Tải xuống dữ liệu và mã.

Các mã đã sử dụng như sau,

"""
[This codes show how to read in data and plot parity plot]

"""
# Import libraries

import math

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.metrics import r2_score

# Font for figure for publishing
font_axis_publish = {
        'color':  'black',
        'weight': 'bold',
        'size': 22,
        }
plt.rcParams['ytick.labelsize'] = 16
plt.rcParams['xtick.labelsize'] = 16

# Read in data
pred_vals = pd.read_csv("pred.csv", header=0, names=['Index','Pred'])
gt_vals = pd.read_csv("gt.csv",header=0, names=['Index','GT'])

# Plot Figures
fignow = plt.figure(figsize=(8,8))

x = gt_vals['GT']
y = pred_vals['Pred']

## find the boundaries of X and Y values
bounds = (min(x.min(), y.min()) - int(0.1 * y.min()), max(x.max(), y.max())+ int(0.1 * y.max()))

# Reset the limits
ax = plt.gca()
ax.set_xlim(bounds)
ax.set_ylim(bounds)
# Ensure the aspect ratio is square
ax.set_aspect("equal", adjustable="box")

plt.plot(x,y,"o", alpha=0.5 ,ms=10, markeredgewidth=0.0)

ax.plot([0, 1], [0, 1], "r-",lw=2 ,transform=ax.transAxes)

# Calculate Statistics of the Parity Plot 
mean_abs_err = np.mean(np.abs(x-y))
rmse = np.sqrt(np.mean((x-y)**2))
rmse_std = rmse / np.std(y)
z = np.polyfit(x,y, 1)
y_hat = np.poly1d(z)(x)

text = f"$\: \: Mean \: Absolute \: Error \: (MAE) = {mean_abs_err:0.3f}$ \n $ Root \: Mean \: Square \: Error \: (RMSE) = {rmse:0.3f}$ \n $ RMSE \: / \: Std(y) = {rmse_std :0.3f}$ \n $R^2 = {r2_score(y,y_hat):0.3f}$"

plt.gca().text(0.05, 0.95, text,transform=plt.gca().transAxes,
     fontsize=14, verticalalignment='top')

# Title and labels 
plt.title("Parity Plot", fontdict=font_axis_publish)
plt.xlabel('Ground Truth', fontdict=font_axis_publish)
plt.ylabel('Prediction', fontdict=font_axis_publish)

# Save the figure into 300 dpi
fignow.savefig("parityplot.png",format = "png",dpi=300,bbox_inches='tight')

Hình cuối cùng cho thấy dưới đây

Hướng dẫn parity plot python - trăn lô chẵn lẻ