微调聚合方法
在确定了最优的邻居数之后,就该微调用于聚合距离的 method 了。如果 n_neighbors 为 10,每个数据点会有到其最近邻的 10 个距离测量。KNN 提供三种聚合这些距离的方法:largest、mean 和 median。
请找出哪一种最适合 females_transformed 数据集。KNN 估计器、evaluate_outlier_classifier 和 evaluate_regressor 函数已为您加载。
以下是函数体,供您参考:
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)
本练习是课程的一部分
Python 中的异常检测
练习说明
- 遍历
n_neighbors与methods的笛卡尔积,并使用临时变量k和m实例化KNN。 - 使用当前的
KNN,在阈值为 50% 的条件下找到内点(inliers)。 - 计算 RMSE,并将结果存入
scores,其中以k、m作为键,RMSE 作为值。
交互式实操练习
通过完成这段示例代码来试试这个练习。
n_neighbors = [5, 20]
methods = ['largest', 'mean', 'median']
scores = dict()
for k, m in ____:
# Create a KNN instance
knn = KNN(____, ____, n_jobs=-1)
# Find the inliers with the current KNN
inliers = ____
# Calculate and store RMSE into scores
scores[(k, m)] = ____
print(scores)