neighbors.kneighbors_graph的原理和应用

前言

1、学习neighbors.kneighbors_graph的distance (mode)的原理
2、neighbors.kneighbors_graph API参数的调试和运用

一、实操

1.API参数介绍

链接: 学习,借鉴参考原文.
sklearn.neighbors.kneighbors_graph(X, n_neighbors, *,mode=‘connectivity’, metric=‘minkowski’, p=2, metric_params=None, include_self=False, n_jobs=None)
Xarray-like of shape (n_samples, n_features) or BallTree样本数据:,以numpy数组或预先计算的 BallTree 的形式。
==n_neighborsint:==每个样本的邻居数量。

mode{‘connectivity’, ‘distance’}: default=’connectivity’ 返回矩阵的类型:‘connectivity’将返回具有1和0的连通性矩阵,而’distance’将根据给定的度量返回邻居之间的距离。
metricstr:, default=’minkowski’:用于计算每个采样点的k邻居的距离度量。DistanceMetric类提供了可用指标的列表。默认距离为’euclidean’(p参数等于2。)当p=1时,相当于使用manhattan_distance (l1)
metric_paramsdict: default=None,计量函数的附加关键字参数。
include_selfbool or ‘auto’: default=False,是否将每个样本标记为其自身的第一个最近邻居。如果为’auto’,则将True用于mode =‘connectivity’,将False用于mode =‘distance’。
n_jobsint: default=None,为邻居搜索运行的并行作业数。 None 意味着 1 除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。有关更多详细信息,请参阅词汇表。

import numpy as np

from sklearn.neighbors import kneighbors_graph

x= np.array([[0, 1], [1.01, 1.], [2, 0]])
y=[[0],[3],[1]]
connect_dis_T=kneighbors_graph(x,2,include_self=True,mode="distance")
connect_dis_F=kneighbors_graph(x,2,include_self=False,mode="distance")
connect_con_T=kneighbors_graph(x,2,include_self=True,mode="connectivity")
connect_con_F=kneighbors_graph(x,2,include_self=False,mode="connectivity")
connect_1_dis=kneighbors_graph(y,2,mode="distance",include_self=True)
connect_1_con=kneighbors_graph(y,2,mode="connectivity",include_self=True)

print("include_self=True时,包含在n_neighbors参数中")
print("计算距离,根据n_neighbors参数,如果小于样本数,只计算该参数范围内的最近样本之间的距离,较远的样本距离直接为0")
print("找到两个最近样本(其中一个是自身),输出距离值,",connect_dis_T.toarray())
print("找到两个最近样本(不包括自身),输出距离值,",connect_dis_F.toarray())
print("权重只有0或1,也需要根据n_neighbors参数,若参数=样本数,则所有样本都是1,0表示最远,1表示最近")
print("找到两个最近样本(其中一个是自身),输出相邻样本权重,",connect_con_T.toarray())
print("找到两个最近样本(不包括自身),输出相邻样本权重,,",connect_con_F.toarray())
print("特征是1的数据(即只有1列),根据n_neighbor计算距离值,超出则直接为0",connect_1_dis.toarray())
print("特征是1的数据(即只有1列),根据n_neighbor计算权重值,超出则直接为0",connect_1_con.toarray())

###########################输出结果:
include_self=True时,包含在n_neighbors参数中
计算距离,根据n_neighbors参数,如果小于样本数,只计算该参数范围内的最近样本之间的距离,较远的样本距离直接为0
找到两个最近样本(其中一个是自身),输出距离值, [[0.         1.01       0.        ]
 [1.01       0.         0.        ]
 [0.         1.40716026 0.        ]]
找到两个最近样本(不包括自身),输出距离值, [[0.         1.01       2.23606798]
 [1.01       0.         1.40716026]
 [2.23606798 1.40716026 0.        ]]
权重只有01,也需要根据n_neighbors参数,若参数=样本数,则所有样本都是10表示最远,1表示最近
找到两个最近样本(其中一个是自身),输出相邻样本权重, [[1. 1. 0.]
 [1. 1. 0.]
 [0. 1. 1.]]
找到两个最近样本(不包括自身),输出相邻样本权重,, [[0. 1. 1.]
 [1. 0. 1.]
 [1. 1. 0.]]
特征是1的数据(即只有1列),根据n_neighbor计算距离值,超出则直接为0 [[0. 0. 1.]
 [0. 0. 2.]
 [1. 0. 0.]]
特征是1的数据(即只有1列),根据n_neighbor计算权重值,超出则直接为0 [[1. 0. 1.]
 [0. 1. 1.]
 [1. 0. 1.]]

Process finished with exit code 0

二、基本原理

1、只有一个特征(只有一列)

在这里插入图片描述

2、特征>=2(两列以上数据)

在这里插入图片描述

总结

有时候超出所需样本需求时,距离或权重直接赋值为0,有助于减少内存和计算量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值