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
:更新后的对象。