这关做得不是很明白,如果有清楚的同志可以在评论区里面讨论
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import LocalOutlierFactor
# 导入数据
abc = pd.read_csv('deaths.csv')
## 只分析其中的Population和Lat两个变量
abc = abc[["Population","Lat"]]###begin#### 使用LocalOutlierFactor对数据集进行异常检测
lof = LocalOutlierFactor(n_neighbors=10) # 设置参数,n_neighbors表示邻居数量,contamination为异常值比例估计
# 计算样本的LOF得分(-1表示异常点)
abc_scores = lof.fit_predict(abc)# 获取异常值索引
outliers_index = np.where(abc_scores == -1)[0]
print("检测出的异常值数量为:",len(outliers_index))###end####
这一关中背景知识没有提很多函数的使用,需要大家在网上查找相应函数的用法。
LocalOutlierFactor()的参数使用
LocalOutlierFactor
是 scikit-learn 库中的一个用于局部离群值检测(LOF,Local Outlier Factor)的类。它通过比较数据点与其邻居的数据密度来识别潜在的异常点。以下是LocalOutlierFactor
类的一些关键参数及其使用解释:
n_neighbors (默认=20):
这个参数指定了计算 LOF 分数时要考虑的邻居数量(k近邻)。更多的邻居可能会提供更稳定的结果,但计算成本也会更高。选择合适的 k 值对于算法的表现至关重要。contamination (默认="auto"):
它表示数据集中被认为是离群点的比例估计。如果设置为 "auto",算法会尝试自动确定异常点比例;若给定一个浮点数(例如 0.1 表示 10% 的样本是离群点),则按照这个比例计算阈值。algorithm (默认="auto"):
指定搜索最近邻的算法,可以是 "auto", "ball_tree", "kd_tree", "brute" 或 "metric"。根据输入数据和可用内存情况,scikit-learn会选择最佳实现。leaf_size (默认=30):
当使用树型结构(如 BallTree 或 KDTree)时,这是构建树时的叶节点大小。较小的 leaf_size 可以提高精度,但会增加内存消耗和计算时间。metric (默认="minkowski"):
距离度量方法。它可以是一个字符串指定内置的距离度量,也可以是一个可调用对象,该对象接受两个向量并返回它们之间的距离。p (默认=2):
如果 metric 设置为 "minkowski",则 p 参数用于定义 Minkowski 距离的幂指数。当 p=2 时,Minkowski 距离就是欧氏距离;当 p=1 时,它是曼哈顿距离。** novelty** (默认=False):
是否启用新颖性检测模式。如果设置为 True,则在训练后可以对新样本进行离群值检测。metric_params (default=None):
传递给所选距离度量函数的额外关键字参数字典。
这是我在网上通过chat找到的一些解答。说实话看不出来 n_neighbors要设置为10,设置为20的时候答案是26。如果知道的同志,欢迎在评论区中讨论交流。
除以上方法外还可以采用print,输出答案。(没有办法的办法)