sklearn.neighbors 最近邻
一、最近邻模型主要有五类:
1、k近邻模型
neighbors.KNeighborsClassifier k近邻分类
neighbors.KNeighborsRegressor k近邻回归
2、R近邻模型
neighbors.RadiusNeighborsClassifier R近邻分类
neighbors.RadiusNeighborsRegressor R近邻回归
3、最近质心分类模型
neighbors.NearestCentroid
4、核密度模型
neighbors.KernelDensity
5、LOF非监督离群点检测
neighbors.LocalOutlierFactor
除此外,还有支撑这些模型的基本类
1、neighbors.NearestNeighbors 实施近邻搜索的非监督学习
2、neighbors.BallTree balltree树形数据结构
3、neighbors.KDTree KDtree树形数据结构
4、neighbors.DistanceMetric 距离度量标准
5、neighbors.kneighbors_graph k近邻矩阵图
6、neighbors.radius_neighbors_graph R近邻矩阵图
二、k近邻模型
1、k近邻分类 neighbors.KNeighborsClassifier
根据k近邻的多数类来进行分类
模型参数:
n_neighbors : int, optional (default = 5)
k值
weights : str or callable, optional (default = ‘uniform’)
k近邻的加权贡献度
● ‘uniform’ : 所有近邻点的权重一样
● ‘distance’:权重为距离的倒数。距离越近的点权值越大。
● [callable] :可以调用自定义函数
algorithm : {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, optional
计算最近邻的算法
● ‘ball_tree’ 使用BallTree类的数据结构
● ‘kd_tree’ 使用KDTree类的数据结构
● ‘brute’ 使用暴力搜索
● ‘auto’ 自动选择合适的算法
leaf_size : int, optional (default = 30)
Leaf_size参数将会传递给BallTree类或KDTree类。这会影响构建数据结构和查询时的速度,以及存储数的内存大小。最优值取决于实际问题。通常Leaf_size越大,数据结构创建
的越快,但查询会变慢;反之Leaf_size越小,数据结构创建的越慢,但查询会变快。如果是暴力破解的话,不需要设置该参数。
p : integer, optional (default = 2)
闵可夫斯基距离度量时的p值。其他距离度量可以不需要设置该参数。当闵可夫斯基的p=2时,等价于欧几里得距离。
metric : string or callable, default 'minkowski'
计算最近邻所使用的距离度量标准。例如
● 'euclidean' 欧几里得距离
● 'manhattan' 曼哈顿距离
详细,参考neighbors.DistancsMetric
metric_params : dict, optional (default = None)
采用的距离度量标准所需要的参数。通过字典方式传递参数。
n_jobs : int, optional (default = 1)
为近邻搜索运行的并行作业的数量。如果为-1,则并行作业数量设置为CPU核心数量。不影响 fit 方法。
模型方法:
fit(X, y) 拟合数据,学习模型
参数: X : {array-like, sparse matrix, BallTree, KDTree}
y : {array-like, sparse matrix}
get_params(deep=True) 获得该模型的设置参数
参数: deep : boolean, optional
如果为True,会返回模型的参数以及子对象模型
返回: params : dict
以字典的形式返回模型设置的参数
kneighbors(X=None, n_neighbors=None, return_distance=True)
寻找一个或一组点的最近邻。返回的是每个点的最近邻与该点的距离和最近邻的索引目录。
参数: X : array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’
要查询的点。如果没有提供,就是 fit 方法时,学习的点集。这种情况下,查询点不被认为是它自己的邻居。
n_neighbors : int
k值(默认为模型的k值)
return_distance : boolean, optional. Defaults to True.
如果为False,不会返回距离。
返回: dist : array
最近邻与查询点的距离。只有当return_distance=True时才返回。距离是根据 metric 参数的选择来计算的。
ind : array
最近邻的索引目录。
kneighbors_graph(X=None, n_neighbors=None, mode='connectivity')
k近邻矩阵图
参数: X : array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’
要查询的点。如果没有提供,就是 fit 方法时,学习的点集。这种情况下,查询点不被认为是它自己的邻居。
n_neighbors : int
k值(默认为模型的k值)
mode : {‘connectivity’, ‘distance’}, optional
返回矩阵的类型。
● ‘connectivity’ :返回的是0,1矩阵
● ‘distance’:返回的是欧几里得距离矩阵
返回: A : sparse matrix in CSR format, shape = [n_samples, n_samples_fit]
CSR格式。需要调用toarray方法,才能直接看到矩阵图。矩阵的每行代表该方法的每个样例,每一列代表模型训练样本里的每个样例与该方法样本里的关系(如果mode
是‘connectivity’ ,则1代表就是最近邻;如果mode是‘distance’,则数字就代表是最近邻的欧几里得距离)
predict(X)
预测未知数据的类别。
参数: X : array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’
测试数据
返回: y : array of shape [n_samples] or [n_samples, n_outputs]
测试数据的预测类别
predict_proba(X)
返回未知数据属于每个类别的概率
参数: X : array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’
测试数据
返回: p : array of shape = [n_samples, n_classes], or a list of n_outputs
每行代表测试数据的每个样例,每列代表一个类别的概率。
score(X, y, sample_weight=None)
返回的是模型预测测试数据的精度
参数: X : array-like, shape = (n_samples, n_features)
测试数据
y : array-like, shape = (n_samples) or (n_samples, n_outputs)
对于X真实的类别
sample_weight : array-like, shape = [n_samples], optional
样本权重
返回: score : float
精度值
set_params(**params)
重新设置模型的参数值。
2、k近邻回归 neighbors.KNeighborsRegressor
基于k近邻的回归。根据k近邻的平均数来得到预测值。
参数和方法可参考k近邻分类的参数和方法,基本一致。不同点为:
1、去掉了方法predict_proba(X)
2、score(X, y, sample_weight=None) 返回的不是精度,而是样本可决系数:
1-u/v,其中u为残差平方和,而v为真实值与真实值平均值的差平方和。最好的成绩是1,样本可决系数可以为负数。
三、R近邻模型
1、R近邻分类 neighbors.RadiusNeighborsClassifier
R近邻分类,是根据以半径R为圆内的所有点的多数类进行分类。
模型参数:
radius : float, optional (default = 1.0)
半径R
weights : str or callable, optional (default = ‘uniform’)
R近邻的加权贡献度
● ‘uniform’ : 所有近邻点的权重一样
● ‘distance’:权重为距离的倒数。距离越近的点权值越大。
● [callable] :可以调用自定义函数
algorithm : {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, optional
计算最近邻的算法
● ‘ball_tree’ 使用BallTree类的数据结构
● ‘kd_tree’ 使用KDTree类的数据结构
● ‘brute’ 使用暴力搜索
● ‘auto’ 自动选择合适的算法
leaf_size : int, optional (default = 30)
Leaf_size参数将会传递给BallTree类或KDTree类。这会影响构建数据结构和查询时的速度,以及存储数的内存大小。最优值取决于实际问题。通常Leaf_size越大,数据结构创建
的越快,但查询会变慢;反之Leaf_size越小,数据结构创建的越慢,但查询会变快。如果是暴力破解的话,不需要设置该参数。
p : integer, optional (default = 2)
闵可夫斯基距离度量时的p值。其他距离度量可以不需要设置该参数。当闵可夫斯基的p=2时,等价于欧几里得距离。
metric : string or callable, default 'minkowski'
计算最近邻所使用的距离度量标准。例如
● 'euclidean' 欧几里得距离
● 'manhattan' 曼哈顿距离
详细,参考neighbors.DistancsMetric
metric_params : dict, optional (default = None)
采用的距离度量标准所需要的参数。通过字典方式传递参数。
outlier_label : int, optional (default = None)
指定异常点的类别。异常点是指在半径R内没有任何点的未知点。如果默认为None,则出现异常点时会报错。
n_jobs : int, optional (default = 1)
为近邻搜索运行的并行作业的数量。如果为-1,则并行作业数量设置为CPU核心数量。不影响 fit 方法。
模型方法:
fit(X, y) 拟合数据,学习模型
参数: X : {array-like, sparse matrix, BallTree, KDTree}
y : {array-like, sparse matrix}
get_params(deep=True) 获得该模型的设置参数
参数: deep : boolean, optional
如果为True,会返回模型的参数以及子对象模型
返回: params : dict
以字典的形式返回模型设置的参数
radius_neighbors(X=None, radius=None, return_distance=True)
根据半径R,寻找一个或一组点的最近邻(边界上的点也被包含在其中)。返回的是每个点的最近邻与该点的距离和最近邻的索引目录。
参数: X : array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’
要查询的点。如果没有提供,就是 fit 方法时,学习的点集。这种情况下,查询点不被认为是它自己的邻居。
radius : float
R值(默认为模型的R值)
return_distance : boolean, optional. Defaults to True.
如果为False,不会返回距离。
返回: dist : array
最近邻与查询点的距离。只有当return_distance=True时才返回。距离是根据 metric 参数的选择来计算的。
ind : array
最近邻的索引目录。
radius_neighbors_graph(X=None, n_neighbors=None, mode='connectivity')
R近邻矩阵图
参数: X : array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’
要查询的点。如果没有提供,就是 fit 方法时,学习的点集。这种情况下,查询点不被认为是它自己的邻居。
radius : float
kR值(默认为模型的R值)
mode : {‘connectivity’, ‘distance’}, optional
返回矩阵的类型。
● ‘connectivity’ :返回的是0,1矩阵
● ‘distance’:返回的是欧几里得距离矩阵
返回: A : sparse matrix in CSR format, shape = [n_samples, n_samples_fit]
CSR格式。需要调用toarray方法,才能直接看到矩阵图。矩阵的每行代表该方法的每个样例,每一列代表模型训练样本里的每个样例与该方法样本里的关系(如果mode
是‘connectivity’ ,则1代表就是最近邻;如果mode是‘distance’,则数字就代表是最近邻的欧几里得距离)
predict(X)
预测未知数据的类别。
参数: X : array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’
测试数据
返回: y : array of shape [n_samples] or [n_samples, n_outputs]
测试数据的预测类别
score(X, y, sample_weight=None)
返回的是模型预测测试数据的精度
参数: X : array-like, shape = (n_samples, n_features)
测试数据
y : array-like, shape = (n_samples) or (n_samples, n_outputs)
对于X真实的类别
sample_weight : array-like, shape = [n_samples], optional
样本权重
返回: score : float
精度值
set_params(**params)
重新设置模型的参数值。
2、R近邻回归 neighbors.RadiusNeighborsRegressor
基于R近邻的回归,根据R近邻的平均数作为预测值。
参数和方法可参考R近邻分类的参数和方法,基本一致。不同点为:
1、去掉了参数outlier_label
四、最近质心分类模型
1、最近质心分类 neighbors.NearestCentroid
根据训练数据的质心来进行分类(质心就是同一类训练数据的均值)。未知数据离哪一类的质心越近就属于哪一类。
模型参数:
metric : string, or callable,default= 'euclidean'
计算最近邻所使用的距离度量标准。例如
● 'euclidean' 欧几里得距离
● 'manhattan' 曼哈顿距离
详细,参考neighbors.DistancsMetric
shrink_threshold : float, optional (default = None)
收缩质心来移除特征的阈值(不知道具体是怎么作用的,望了解的童鞋分享下原理)
模型方法:
fit(X, y) 拟合数据,学习模型
参数: X : {array-like, sparse matrix, BallTree, KDTree}
y : {array-like, sparse matrix}
get_params(deep=True) 获得该模型的设置参数
参数: deep : boolean, optional
如果为True,会返回模型的参数以及子对象模型
返回: params : dict
以字典的形式返回模型设置的参数
predict(X)
预测未知数据的类别。
参数: X : array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’
测试数据
返回: y : array of shape [n_samples] or [n_samples, n_outputs]
测试数据的预测类别
score(X, y, sample_weight=None)
返回的是模型预测测试数据的精度
参数: X : array-like, shape = (n_samples, n_features)
测试数据
y : array-like, shape = (n_samples) or (n_samples, n_outputs)
对于X真实的类别
sample_weight : array-like, shape = [n_samples], optional
样本权重
返回: score : float
精度值
set_params(**params)
重新设置模型的参数值。
(未完……有时间补全)