MulaiMulai sekarang secara gratis

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

Lihat Kursus

Petunjuk latihan

  • Buat daftar nilai yang mungkin untuk n_neighbors dengan urutan: 5, 10, 20
  • Instansiasi model KNN, tetapkan nilai n_neighbors ke k saat ini dalam loop.
  • Temukan inlier menggunakan fungsi evaluate_outlier_classifier.
  • Hitung RMSE dengan evaluate_regressor dan simpan hasilnya ke dalam scores dengan k sebagai 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)
Edit dan Jalankan Kode