skiti-learn KNN算法库

skiti-learn中KNN分类树的类是KNighborsClassifier,KNN回归树的类是KNighborsRegressor.除此之外,限定半径的最邻近分类树RadiusNighborsClassifier,限定半径的最邻近回归树RadiusNighborsRegressor,最近质心分类算法NearestCentroid.
这些算法类中,KNN的分类和回归参数完全一样,限定半径的分类和回归和KNN也基本一样,最近质心分类算法,直接选择最近的质心来分类,只有两个参数,距离度量和特征选择距离阈值。
在sklearn.neighbors包中也包含一些不做分类回归的类。kneighbors_graph类返回用KNN时和每个样本最近的K个训练集样本的位置。radius_neighbors_graph返回用限定半径最近邻法时和每个样本在限定半径内的训练集样本的位置。NearestNeighbors是个大杂烩,它即可以返回用KNN时和每个样本最近的K个训练集样本的位置,也可以返回用限定半径最近邻法时和每个样本最近的训练集样本的位置。

  • KNN和限定半径最邻近参数选择
    1).KNN中的K值 n_neighbors
    KNeighborsClassifier and KNeighborsRegressor:
    K 值的选择与样本分布相关,一般选择一个较小的K值,然后用交叉验证来选择一个比较优的K值,默认为5。如果是三维或者三维以下的可以用可视化调参。
    不适应于限定半径的最邻近法
    2).限定半径最邻近法中的半径radius:
    RadiusNeighborsClassifier andRadiusNeighborsRegressor:
    radius的选择与样本分布有关,可以通过交叉验证集选择一个较小的半径,尽量保证每个训练样本与其他样本距离较远,默认值为1.0。如果三维或三维以下,可用可视化调参。
    不适用于KNN
    3).邻近权weights
    主要用于标识每个样本邻近样本的权重,如果是KNN,则表示K个邻近样本的权重。如果是限定半径邻近,则表示距离在半径以内邻近样本的权重。参数可以选择’uniform’,‘distance’或者自定义权重。默认的‘uniform’,指权重一样,预测时一视同仁。’diatance’,权重与距离成反比,距离预测目标更近的样本具有更高的权重。自定义权重,可以设定一个函数,输入是距离,输出为权重,这样可以控制不同距离所对应的权重。
    一般使用默认的‘uniform’就可,如果样本分布较乱,可以选择’distance‘选择一个好的,如果效果还不好,可以考虑自定义权重。
    4).KNN和限定半径最邻近法使用的算法algorithm
    算法一共三种:蛮力实现,KD树实现,球树实现。有四种可选的输入,‘brute’对应第一种蛮力实现,‘kd_tree’对应KD树实现,’ball_tree’对应第三种球树实现,‘auto’在三种算法中做权衡。如果输入样本特征是稀疏的时候,无论选择哪种特征skiti-learn都会选择蛮力实现。
    如果样本少特征也少,使用默认的 ‘auto’就够了。 如果数据量很大或者特征也很多,用"auto"建树时间会很长,效率不高,建议选择KD树实现‘kd_tree’,此时如果发现‘kd_tree’速度比较慢或者已经知道样本分布不是很均匀时,可以尝试用‘ball_tree’。而如果输入样本是稀疏的,无论你选择哪个算法最后实际运行的都是‘brute’。
    5).停止建子树的叶子节点阈值leaf_size
    控制KD树或者球树建子树叶子节点的数量,值越小,树越大,层越深,建树时间越长,默认为30,这个值依赖于样本的数量,样本增加这个值必须增加,可以用交叉验证选择一个合适的值,如果算法为蛮力实现,可以忽略这个参数。
    6).距离度量metric
    常用的距离度量参数有:欧氏距离’euclidean’,曼哈顿距离’manhattan’,切比雪夫距离‘chebyshev’,闵可夫斯基距离 “minkowski”(默认参数),带权重闵可夫斯基距离 “wminkowski”,标准化欧式距离 “seuclidean”(对于各特征归一化的欧式距离,特征维度的均值为0,方差为1),马氏距离“mahalanobis”。
    默认的欧式距离(即p=2的闵可夫斯基距离)就可以满足我们的需求
    7).距离度量附属参数p
    p是使用距离度量参数metric附属参数,只用于闵可夫斯基距离和带权重闵可夫斯基距离中p值的选择,p=1为曼哈顿距离, p=2为欧式距离。默认为2。
    8).距离度量其他附属参数metric_params
    一般都用不上,主要是用于带权重闵可夫斯基距离的权重,以及其他一些比较复杂的距离度量的参数。
    9).并行处理任务数n_jobs
    主要用于多核CPU时的并行处理,加快建立KNN树和预测搜索的速度。一般用默认的-1就可以了,即所有的CPU核都参与计算。不适用于限定半径最邻近法
    10).异常点类别选择outlier_label
    不适用于KNN和限定半径最近邻回归。主要用于预测时,如果目标点半径内没有任何训练集的样本点时,应该标记的类别,不建议选择默认值 none,因为这样遇到异常点会报错。一般设置为训练集里最多样本的类别。

猜你喜欢

转载自blog.csdn.net/weixin_40732844/article/details/82853255
今日推荐