KNeighborsClassifier#
- class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, *, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)[源代码]#
实现k近邻投票的分类器。
阅读更多的 User Guide .
- 参数:
- n_neighborsint,默认=5
默认使用的邻居数量
kneighbors
询问。- weights' unique ',',可调用或无,默认=' unique '
预测中使用的权重函数。 可能的值:
“均匀”:均匀的重量。 每个邻居中的所有点的加权相等。
“距离”:通过距离的倒数来加权点。在这种情况下,查询点的较近邻居将比较远的邻居具有更大的影响力。
[callable] :一个用户定义的函数,它接受距离数组,并返回包含权重的相同形状的数组。
请参阅标题为 最近邻分类 显示了
weights
决策边界上的参数。- algorithm'自动',' ball_tree ',',',默认='自动'
用于计算最近邻居的算法:
注意:在稀疏输入上进行调整将使用暴力覆盖此参数的设置。
- leaf_sizeint,默认=30
叶大小传递到BallTree或KDTree。 这可能会影响构建和查询的速度,以及存储树所需的内存。 最佳值取决于问题的性质。
- pfloat,默认=2
Minkowski指标的功率参数。当p = 1时,这相当于对于p = 2使用manhattan_Distance(l1)和euclidean_Distance(l2)。对于任意p,使用minkowski_Distance(l_p)。该参数预计为正值。
- metric字符串或可调用,默认=' minkowski '
用于距离计算的指标。默认值是“minkowski”,当p = 2时,它会产生标准的欧几里得距离。请参阅文档 scipy.spatial.distance 以及中列出的指标
distance_metrics
获取有效的指标值。如果“预先计算”指标,则假设X是距离矩阵,并且在匹配期间必须为平方。X可以是 sparse graph ,在这种情况下,只有“非零”元素可以被视为邻居。
如果metric是一个可调用的函数,它接受两个表示1D向量的数组作为输入,并且必须返回一个指示这些向量之间距离的值。这适用于Scipy的指标,但比将指标名称作为字符串传递效率低。
- metric_paramsdict,默认=无
指标函数的附加关键字参数。
- n_jobsint,默认=无
为邻居搜索运行的并行作业数。
None
意思是1,除非在a中joblib.parallel_backend
上下文-1
意味着使用所有处理器。看到 Glossary 了解更多详细信息。不会影响fit
法
- 属性:
- classes_形状数组(n_classes,)
分类器已知的类别标签
- effective_metric_字符串或可调用
使用的距离指标。它将与
metric
参数或其同义词,例如“欧几里得”,如果metric
参数设置为“minkowski”,p
参数设置为2。- effective_metric_params_dict
指标函数的附加关键字参数。对于大多数指标将与
metric_params
参数,但也可能包含p
如果effective_metric_
属性设置为“minkowski”。- n_features_in_int
期间看到的功能数量 fit .
Added in version 0.24.
- feature_names_in_ :nd形状数组 (
n_features_in_
,)nd数组形状( Names of features seen during fit. Defined only when
X
has feature names that are all strings.Added in version 1.0.
- n_samples_fit_int
匹配数据中的样本数量。
- outputs_2d_bool
假当
y
在配合期间,其形状为(n_samples,)或(n_samples,1),否则为真。
参见
RadiusNeighborsClassifier
基于固定半径内邻居的分类器。
KNeighborsRegressor
基于k近邻的回归。
RadiusNeighborsRegressor
基于固定半径内邻居的回归。
NearestNeighbors
用于实施邻居搜索的无监督学习器。
注意到
看到 Nearest Neighbors 在在线文档中讨论选择
algorithm
和leaf_size
.警告
Regarding the Nearest Neighbors algorithms, if it is found that two neighbors, neighbor
k+1
andk
, have identical distances but different labels, the results will depend on the ordering of the training data.https://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm
示例
>>> 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_样本,n_输出)
目标值。
- 返回:
- selfKNeighborsClassifier
匹配的k近邻分类器。
- get_metadata_routing()[源代码]#
获取此对象的元数据路由。
请检查 User Guide 关于路由机制如何工作。
- 返回:
- routingMetadataRequest
A
MetadataRequest
封装路由信息。
- get_params(deep=True)[源代码]#
获取此估计器的参数。
- 参数:
- deep布尔,默认=True
如果为True,将返回此估计量和包含的作为估计量的子对象的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- kneighbors(X=None, n_neighbors=None, return_distance=True)[源代码]#
找到点的K近邻。
返回每个点邻近点的索引和距离。
- 参数:
- X{类数组,稀疏矩阵},形状(n_questions,n_features), 或(n_queries,n_indexed),如果指标==“预计算”,默认=无
一个或多个查询点。如果未提供,则返回每个索引点的邻居。在这种情况下,查询点不被视为其自己的邻居。
- n_neighborsint,默认=无
每个样本所需的邻居数量。默认值是传递给构造函数的值。
- return_distance布尔,默认=True
是否返回距离。
- 返回:
- neigh_dist形状的nd数组(n_queries,n_neighbors)
数组,表示到点的长度,仅在return_distance=True时存在。
- neigh_ind形状的nd数组(n_queries,n_neighbors)
人口矩阵中最近点的索引。
示例
在下面的示例中,我们从代表数据集的数组中构建NearestNeighbors类,并询问谁是最接近的点 [1,1,1]
>>> samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]] >>> from sklearn.neighbors import NearestNeighbors >>> neigh = NearestNeighbors(n_neighbors=1) >>> neigh.fit(samples) NearestNeighbors(n_neighbors=1) >>> print(neigh.kneighbors([[1., 1., 1.]])) (array([[0.5]]), array([[2]]))
如您所见,它返回 [[0.5] ],并且 [[2] ],这意味着该元素的距离为0.5,并且是样本的第三个元素(索引从0开始)。您还可以查询多个积分:
>>> X = [[0., 1., 0.], [1., 0., 1.]] >>> neigh.kneighbors(X, return_distance=False) array([[1], [2]]...)
- kneighbors_graph(X=None, n_neighbors=None, mode='connectivity')[源代码]#
计算X中点的k-邻居的(加权)图。
- 参数:
- X形状的{类数组,稀疏矩阵}(n_questions,n_features), 或(n_queries,n_indexed),如果指标==“预计算”,默认=无
一个或多个查询点。如果未提供,则返回每个索引点的邻居。在这种情况下,查询点不被视为其自己的邻居。为
metric='precomputed'
形状应该是(n_queries,n_indexed)。否则,形状应该是(n_queries,n_features)。- n_neighborsint,默认=无
每个样本的邻居数量。默认值是传递给构造函数的值。
- mode'连通性',',默认='连通性'
返回的矩阵类型:“连通性”将返回包含1和0的连通性矩阵,在“距离”中,边是点之间的距离,距离类型取决于NearestNeighbors类中所选的指标参数。
- 返回:
- A形状稀疏矩阵(n_questions,n_samples_fit)
n_samples_fit
是匹配数据中的样本数。A[i, j]
给出连接边缘的重量i
到j
.该矩阵为CSR格式。
参见
NearestNeighbors.radius_neighbors_graph
计算X中点的邻居的(加权)图。
示例
>>> X = [[0], [3], [1]] >>> from sklearn.neighbors import NearestNeighbors >>> neigh = NearestNeighbors(n_neighbors=2) >>> neigh.fit(X) NearestNeighbors(n_neighbors=2) >>> A = neigh.kneighbors_graph(X) >>> A.toarray() array([[1., 0., 1.], [0., 1., 1.], [1., 0., 1.]])
- predict(X)[源代码]#
预测所提供数据的类别标签。
- 参数:
- X形状的{类数组,稀疏矩阵}(n_questions,n_features), 或(n_queries,n_indexed),如果指标==“预计算”,或无
测试样本。如果
None
,返回所有索引点的预测;在这种情况下,点不被视为其自己的邻居。
- 返回:
- y形状的nd数组(n_queries,)或(n_queries,n_outputs)
每个数据样本的类标签。
- predict_proba(X)[源代码]#
测试数据X的返回概率估计。
- 参数:
- X形状的{类数组,稀疏矩阵}(n_questions,n_features), 或(n_queries,n_indexed),如果指标==“预计算”,或无
测试样本。如果
None
,返回所有索引点的预测;在这种情况下,点不被视为其自己的邻居。
- 返回:
- p形状的nd数组(n_queries,n_classes),或n_oututs的列表 如果n_outputs > 1,则此类数组的数量。
输入样本的类概率。课程按词典顺序排序。
- score(X, y, sample_weight=None)[源代码]#
返回给定测试数据和标签的平均准确度。
在多标签分类中,这是子集准确度,这是一个苛刻的指标,因为您需要为每个样本正确预测每个标签集。
- 参数:
- X形状类似阵列(n_samples,n_features),或无
测试样本。如果
None
,使用所有索引点的预测;在这种情况下,点不被视为其自己的邻居。这意味着knn.fit(X, y).score(None, y)
隐式执行留一交叉验证过程,相当于cross_val_score(knn, X, y, cv=LeaveOneOut())
但通常要快得多。- y形状的类似阵列(n_samples,)或(n_samples,n_outputs)
真正的标签
X
.- sample_weight形状类似数组(n_samples,),默认=无
样本重量。
- 返回:
- score浮子
平均准确度
self.predict(X)
w.r.t.y
.
- set_params(**params)[源代码]#
设置此估计器的参数。
该方法适用于简单估计器以及嵌套对象(例如
Pipeline
).后者具有以下形式的参数<component>__<parameter>
以便可以更新嵌套对象的每个组件。- 参数:
- **paramsdict
估计参数。
- 返回:
- self估计器实例
估计实例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') KNeighborsClassifier [源代码]#
请求元数据传递给
score
法请注意,此方法仅适用于以下情况
enable_metadata_routing=True
(见sklearn.set_config
).请参阅 User Guide 关于路由机制如何工作。The options for each parameter are:
True
:元数据被请求并传递给score
如果提供的话。如果未提供元数据,则会忽略请求。False
:未请求元数据,元估计器不会将其传递给score
.None
:不请求元数据,如果用户提供元估计器,则元估计器将引发错误。str
:元数据应通过此给定别名而不是原始名称传递给元估计器。
默认 (
sklearn.utils.metadata_routing.UNCHANGED
)保留现有请求。这允许您更改某些参数的请求,而不是其他参数。Added in version 1.3.
备注
只有当该估计器用作元估计器的子估计器时,该方法才相关,例如在
Pipeline
.否则就没有效果了。- 参数:
- sample_weight字符串、真、假或无, 默认=sklearn.utils. metalics_Routing.UNChanged
元数据路由
sample_weight
参数score
.
- 返回:
- self对象
更新的对象。