Menyetel n_neighbors
n_neighbors adalah parameter paling krusial pada KNN. Ketika Anda tidak yakin berapa banyak outlier dalam himpunan data (yang sering terjadi), Anda tidak bisa menggunakan aturan praktis yang menyarankan 20 tetangga ketika kontaminasi di bawah 10%.
Untuk kasus seperti ini, Anda perlu menyetel n_neighbors. Latih prosesnya pada versi tertransformasi dari himpunan data females dari latihan sebelumnya. Himpunan data tersebut telah dimuat sebagai females_transformed. Estimator KNN, serta fungsi evaluate_outlier_classifier dan evaluate_regressor juga telah dimuat.
Berikut isi fungsinya sebagai pengingat:
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)
Latihan ini adalah bagian dari kursus
Deteksi Anomali dengan Python
Petunjuk latihan
- Buat daftar nilai yang mungkin untuk
n_neighborsdengan urutan: 5, 10, 20 - Instansiasi model
KNN, tetapkan nilain_neighborskeksaat ini dalam loop. - Temukan inlier menggunakan fungsi
evaluate_outlier_classifier. - Hitung RMSE dengan
evaluate_regressordan simpan hasilnya ke dalamscoresdenganksebagai kunci dan RMSE sebagai nilainya.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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)