【python ML系列】python knn KNeighborsClassifier 最近邻算法选项用法示例详解

python knn KNeighborsClassifier 最近邻算法选项用法示例详解

文章目录

  • python knn KNeighborsClassifier 最近邻算法选项用法示例详解
  • sklearn.neighbors.KNeighborsClassifier
    • 概述
    • 参数
    • 属性
    • 方法
    • 示例
    • 方法
      • fit(X, y)
      • get_metadata_routing()
      • get_params([deep])
      • kneighbors([X, n_neighbors, return_distance])
      • kneighbors_graph([X, n_neighbors, mode])
      • predict(X)
      • predict_proba(X)
      • score(X, y[, sample_weight])
      • set_params(**params)
      • set_score_request(*[, sample_weight])
  • 参考链接

sklearn.neighbors.KNeighborsClassifier

概述

sklearn.neighbors.KNeighborsClassifier是一个实现k最近邻投票的分类器。

阅读更多信息请参考用户指南

参数

  • n_neighbors: int, 默认值为5,用于kneighbors查询的默认邻居数量。

  • weights: {‘uniform’, ‘distance’},可调用对象或None,默认值为’uniform’,用于预测的权重函数。可能的取值有:

    • 'uniform': 统一权重。每个邻域中的所有点都被等权重加权。
    • 'distance': 根据其距离的倒数对点进行加权。在这种情况下,查询点附近的邻居将比远离的邻居具有更大的影响力。
    • [callable]: 一个用户定义的函数,它接受一个距离数组,并返回一个形状相同的数组,其中包含权重。

    参考标题为“最近邻分类”的示例,显示权重参数对决策边界的影响。

  • algorithm: {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’},默认值为’auto’,用于计算最近邻的算法。

    • 'ball_tree':使用BallTree算法
    • 'kd_tree':使用KDTree算法
    • 'brute':使用暴力搜索
    • 'auto':根据传递给fit方法的值尝试确定最合适的算法。

    注意:在稀疏输入上进行拟合将覆盖该参数的设置,使用暴力搜索。

  • leaf_size: int,默认值为30,传递给BallTree或KDTree的叶节点大小。这可以影响构建和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。

  • p: float,默认值为2,Minkowski度量的幂参数。当p = 1时,等价于使用曼哈顿距离(l1),当p = 2时等价于使用欧几里德距离(l2)。对于任意的p,使用闵可夫斯基距离(lp)。

  • metric: str或callable,默认值为’minkowski’,用于距离计算的度量标准。默认值为“minkowski”,当p = 2时,结果为标准欧几里德距离。参考scipy.spatial.distance的文档和distance_metrics中列出的度量标准的度量。

    如果metric是“precomputed”,则假定X是一个距离矩阵,并且在拟合期间必须是方阵。X可能是一个稀疏图,此时只能考虑“非零”元素作为邻居。

    如果metric是一个可调用函数,则它接受表示1D向量的两个数组作为输入,并且必须返回一个表示这些向量之间距离的值。这适用于Scipy的度量,但比将度量名称作为字符串传递效率低下。

  • metric_params: dict,默认值为None,度量函数的其他关键字参数。

  • n_jobs: int,默认值为None,用于邻居搜索的并行作业数。None表示1,除非在joblib.parallel_backend上下文中。-1表示使用所有处理器。有关更多详细信息,请参见术语表。不影响fit方法。

属性

  • classes_: 形状为(n_classes,)的数组,分类器已知的类标签。
  • effective_metric_: str或callable,所使用的距离度量。它将与metric参数相同,或者是其别名,例如,如果metric参数设置为’minkowski’,p参数设置为2,则为’euclidean’。
  • n_features_in_: int,拟合期间观察到的特征数量。
  • feature_names_in_: 形状为(n_features_in_,)的ndarray,拟合期间观察到的特征名称。仅当X具有全部为字符串的特征名称时才定义。
  • n_samples_fit_: int,拟合数据中的样本数量。
  • outputs_2d_: bool,如果y的形状为(n_samples,)或(n_samples, 1)则为False,否则为True。

方法

  • fit(X, y): 从训练数据集中拟合k最近邻分类器。
  • get_metadata_routing(): 获取此对象的元数据路由。
  • get_params([deep]): 获取此估计器的参数。
  • kneighbors([X, n_neighbors, return_distance]): 找到一个点的K个最近邻居。
  • kneighbors_graph([X, n_neighbors, mode]): 计算X中点的(加权)k个最近邻的图。
  • predict(X): 对提供的数据进行预测类标签。
  • predict_proba(X): 返回测试数据X的概率估计。
  • score(X, y[, sample_weight]): 返回给定测试数据和标签的平均准确率。
  • set_params(**params): 设置此估计器的参数。
  • set_score_request(*[, sample_weight]): 请求传递给得分方法的元数据。

示例

>>> X = [[0], [1], [2], [3]]
>>> y = [0, 0, 1, 1]
>>> from sklearn.neighbors import KNeighborsClassifier
>>> neigh = KNeighborsClassifier(n_neighbors=3)
>>> neigh.fit(X, y)
KNeighborsClassifier(...)
>>> print(neigh.predict([[1.1]]))
[0]
>>> print(neigh.predict_proba([[0.9]]))
[[0.666... 0.333...]]

方法

fit(X, y)

从训练数据集中拟合k最近邻分类器。

参数:

  • X:形状为(n_samples, n_features)或(n_samples, n_samples)的数组样本数据。
  • y:形状为(n_samples,)或(n_samples, n_outputs)的目标值。

返回:

  • self:拟合的k最近邻分类器。

get_metadata_routing()

获取此对象的元数据路由。

返回:

  • routingMetadataRequest:封装了路由信息的MetadataRequest。

get_params([deep])

获取此估计器的参数。

参数:

  • deep:bool,默认为True。如果为True,将返回此估计器和包含的子对象(例如Pipeline)的参数。

返回:

  • params:字典,参数名称映射到其值。

kneighbors([X, n_neighbors, return_distance])

找到一个点的K个最近邻居。

返回每个点的邻居的索引和距离。

参数:

  • X:形状为(n_queries, n_features)的查询点或点。如果未提供,则返回每个索引点的邻居。在这种情况下,查询点不被视为自己的邻居。
  • n_neighbors:int,默认为None,每个样本所需的邻居数量。默认值是传递给构造函数的值。
  • return_distance:bool,默认为True,是否返回距离。

返回:

  • neigh_dist:形状为(n_queries, n_neighbors)的数组,表示到每个点的长度,仅在return_distance=True时存在。
  • neigh_ind:形状为(n_queries, n_neighbors)的数组,最近点在群体矩阵中的索引。

kneighbors_graph([X, n_neighbors, mode])

计算X中点的(加权)k个最近邻的图。

参数:

  • X:形状为(n_queries, n_features)的查询点或点。如果未提供,则返回每个索引点的邻居。在这种情况下,查询点不被视为自己的邻居。对于metric=‘precomputed’,形状应为(n_queries, n_indexed)。否则,形状应为(n_queries, n_features)。
  • n_neighbors:int,默认为None,每个样本的邻居数。默认值是传递给构造函数的值。
  • mode:{‘connectivity’, ‘distance’},默认为’connectivity’,返回矩阵的类型:'connectivity’将返回具有1和0的连接矩阵,'distance’中的边是点之间的距离,距离类型取决于NearestNeighbors类中选择的度量参数。

返回:

  • 稀疏矩阵,形状为(n_queries, n_samples_fit),n_samples_fit是拟合数据中的样本数量。A[i, j]给出连接i和j之间的边的权重。矩阵采用CSR格式。

predict(X)

对提供的数据进行预测类标签。

参数:

  • X:形状为(n_queries, n_features)的测试样本。

返回:

  • y:形状为(n_queries,)或(n_queries, n_outputs)的数组,每个数据样本的类标签。

predict_proba(X)

返回测试数据X的概率估计。

参数:

  • X:形状为(n_queries, n_features)的测试样本。

返回:

  • p:形状为(n_queries, n_classes)的数组,或如果n_outputs>1,则为包含n_outputs个这样的数组的列表。输入样本的类别概率。类别按字典顺序排序。

score(X, y[, sample_weight])

返回给定测试数据标签的平均准确率

在多标签分类中,这是子集准确性,这是一种严格的度量,因为您要求对于每个样本,必须正确预测每个标签集。

参数:

  • X:形状为(n_samples, n_features)的测试样本。
  • y:形状为(n_samples,)或(n_samples, n_outputs)的真实标签。
  • sample_weight:形状为(n_samples,)的数组,样本权重。

返回:

  • score:float,self.predict(X)相对于y的平均准确度。

set_params(**params)

设置此估计器的参数。

该方法适用于简单的估计器以及嵌套对象(如Pipeline)。后者具有以下形式的参数:__,以便可以更新嵌套对象的每个组件。

参数:

  • **params:dict,估计器参数。

返回:

  • self:估计器实例。

set_score_request(*[, sample_weight])

请求传递给得分方法的元数据。

请注意,仅在enable_metadata_routing=True时此方法才相关(参见sklearn.set_config)。请参阅用户指南以了解路由机制的工作原理。

每个参数的选项为:

  • True:请求元数据,并将其传递给score(如果提供)。如果未提供元数据,则该请求将被忽略。
  • False:不请求元数据,元估计器不会将其传递给score。
  • None:不请求元数据,并且如果用户提供它,则元估计器会引发错误。
  • str:应该使用这个给定的别名而不是原始名称将元数据传递给元估计器。

默认值(sklearn.utils.metadata_routing.UNCHANGED)保留现有请求。这允许您更改某些参数的请求而不更改其他参数的请求。

新版本0.24中新增。

注意:此方法仅在此估计器用作元估计器的子估计器(例如,在Pipeline中使用)时才相关。否则,它没有任何效果。

参数:

  • sample_weight:str、True、False或None,默认值为sklearn.utils.metadata_routing.UNCHANGED,用于score中的sample_weight参数的元数据路由。

返回:

  • self:更新后的对象。

参考链接

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值