Tinh chỉnh n_neighbors
n_neighbors là tham số quan trọng nhất của KNN. Khi bạn không chắc về số lượng ngoại lệ trong tập dữ liệu (chuyện này xảy ra khá thường), bạn không thể dùng quy tắc kinh nghiệm gợi ý dùng 20 láng giềng khi mức nhiễm bẩn dưới 10%.
Trong những trường hợp như vậy, bạn sẽ phải tinh chỉnh n_neighbors. Hãy thực hành quy trình này trên phiên bản đã được biến đổi của tập dữ liệu females từ bài trước. Tập này đã được nạp dưới tên females_transformed. Bộ ước lượng KNN, cùng các hàm evaluate_outlier_classifier và evaluate_regressor cũng đã được nạp.
Dưới đây là phần thân hàm để bạn tiện nhớ lại:
def evaluate_outlier_classifier(model, data, threshold=.75):
model.fit(data)
probs = model.predict_proba(data)
inliers = data[probs[:, 1] <= threshold]
return inliers
def evaluate_regressor(inliers):
X, y = inliers.drop("weightkg", axis=1), inliers[['weightkg']]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=10, train_size=0.8)
lr = LinearRegression()
lr.fit(X_train, y_train)
preds = lr.predict(X_test)
rmse = root_mean_squared_error(y_test, preds)
return round(rmse, 3)
Bài tập này là một phần của khóa học
Phát hiện bất thường với Python
Hướng dẫn bài tập
- Tạo một danh sách các giá trị có thể có cho
n_neighborstheo thứ tự: 5, 10, 20 - Khởi tạo một mô hình
KNN, đặt giá trịn_neighborsbằngkhiện tại trong vòng lặp. - Tìm các inlier bằng hàm
evaluate_outlier_classifier. - Tính RMSE với
evaluate_regressorvà lưu kết quả vàoscoresvớiklà khóa và RMSE là giá trị.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Create a list of values for n_neigbors
n_neighbors = [____, ____, ____]
scores = dict()
for k in n_neighbors:
# Instantiate KNN with the current k
knn = ____(____, n_jobs=-1)
# Find the inliers with the current KNN
inliers = ____(____, ____, .50)
# Calculate and store RMSE into scores
scores[____] = ____
print(scores)