Tôi đã chuẩn bị một kịch bản ngắn để thể hiện những gì tôi nghĩ nên là trực giác đúng đắn.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import ensemble
from sklearn.model_selection import train_test_split
def create_dataset(location, scale, N):
class_zero = pd.DataFrame({
'x': np.random.normal(location, scale, size=N),
'y': np.random.normal(location, scale, size=N),
'C': [0.0] * N
})
class_one = pd.DataFrame({
'x': np.random.normal(-location, scale, size=N),
'y': np.random.normal(-location, scale, size=N),
'C': [1.0] * N
})
return class_one.append(class_zero, ignore_index=True)
def preditions(values):
X_train, X_test, tgt_train, tgt_test = train_test_split(values[["x", "y"]], values["C"], test_size=0.5, random_state=9)
clf = ensemble.GradientBoostingRegressor()
clf.fit(X_train, tgt_train)
y_hat = clf.predict(X_test)
return y_hat
N = 10000
scale = 1.0
locations = [0.0, 1.0, 1.5, 2.0]
f, axarr = plt.subplots(2, len(locations))
for i in range(0, len(locations)):
print(i)
values = create_dataset(locations[i], scale, N)
axarr[0, i].set_title("location: " + str(locations[i]))
d = values[values.C==0]
axarr[0, i].scatter(d.x, d.y, c="#0000FF", alpha=0.7, edgecolor="none")
d = values[values.C==1]
axarr[0, i].scatter(d.x, d.y, c="#00FF00", alpha=0.7, edgecolor="none")
y_hats = preditions(values)
axarr[1, i].hist(y_hats, bins=50)
axarr[1, i].set_xlim((0, 1))
Kịch bản làm gì:
- nó tạo ra các kịch bản khác nhau trong đó hai lớp ngày càng tách rời nhau - tôi có thể cung cấp ở đây một định nghĩa chính thức hơn về điều này nhưng tôi đoán rằng bạn sẽ có được trực giác
- nó phù hợp với một bộ hồi quy GBM trên dữ liệu thử nghiệm và đưa ra các giá trị dự đoán cung cấp các giá trị X thử nghiệm cho mô hình được đào tạo
Biểu đồ được sản xuất cho thấy dữ liệu được tạo trong mỗi kịch bản trông như thế nào và nó cho thấy sự phân phối của các giá trị dự đoán. Giải thích: thiếu khả năng phân tách chuyển thành dự đoán ở mức hoặc phải khoảng 0,5.y
Tất cả điều này cho thấy trực giác, tôi đoán rằng không khó để chứng minh điều này theo một cách thức chính thức hơn mặc dù tôi sẽ bắt đầu từ một hồi quy logistic - điều đó sẽ làm cho toán học dễ dàng hơn.
CHỈNH SỬA 1
Tôi đoán trong ví dụ ngoài cùng bên trái, nơi hai lớp không thể tách rời nhau, nếu bạn đặt các tham số của mô hình để vượt quá dữ liệu (ví dụ: cây sâu, số lượng lớn cây và tính năng, tốc độ học tập tương đối cao), bạn vẫn sẽ nhận được mô hình để dự đoán kết quả cực đoan, phải không? Nói cách khác, việc phân phối dự đoán là biểu thị mức độ chặt chẽ của mô hình phù hợp với dữ liệu?
Giả sử rằng chúng ta có một cây quyết định siêu sâu. Trong kịch bản này, chúng ta sẽ thấy phân phối của các giá trị dự đoán đạt cực đại tại 0 và 1. Chúng ta cũng sẽ thấy lỗi đào tạo thấp. Chúng ta có thể làm cho lỗi đào tạo nhỏ tùy ý, chúng ta có thể có cây sâu đó phù hợp với điểm mà mỗi lá của cây tương ứng với một điểm dữ liệu trong tập tàu và mỗi điểm dữ liệu trong tập tàu tương ứng với một lá trong cây. Đó sẽ là hiệu suất kém trong bộ thử nghiệm của một mô hình rất chính xác trong khóa đào tạo đã cho thấy một dấu hiệu rõ ràng về tình trạng thừa. Lưu ý rằng trong biểu đồ của tôi, tôi trình bày các dự đoán trên bộ kiểm tra, chúng có nhiều thông tin hơn.
Thêm một lưu ý: hãy làm việc với ví dụ ngoài cùng bên trái. Chúng ta hãy huấn luyện mô hình trên tất cả các điểm dữ liệu lớp A ở nửa trên của vòng tròn và trên tất cả các điểm dữ liệu lớp B ở nửa dưới của vòng tròn. Chúng ta sẽ có một mô hình rất chính xác, với phân phối các giá trị dự đoán đạt 0 và 1. Các dự đoán trên tập kiểm tra (tất cả các điểm hạng A trong nửa vòng tròn dưới cùng và các điểm lớp B trong nửa vòng tròn trên cùng) cũng sẽ đạt đỉnh 0 và 1 - nhưng chúng sẽ hoàn toàn không chính xác. Đây là một số chiến lược đào tạo "nghịch cảnh" khó chịu. Tuy nhiên, tóm lại: phân phối giảm như mức độ phân tách, nhưng nó không thực sự là vấn đề.