python为什么k是10_python-KNeighborsClassifier中k的值

首先定义什么是K?

K是算法咨询以决定其给定数据点属于哪个类别的投票者的数量.

换句话说,它使用K来划分每个类的边界.这些界限将每个类别彼此隔离.

因此,边界随着K值的增加而变得更平滑.

因此,从逻辑上讲,如果将K增加到无穷大,它将最终成为所有类的所有点,具体取决于总数!但是,这将导致所谓的高偏差(即欠拟合).

相反,如果我们使K等于1,则训练样本的误差将始终为零.这是因为最接近任何训练数据点的点本身就是它.尽管如此,我们最终将过度拟合边界(即高方差),因此无法将其推广到任何新的和看不见的数据!

不幸的是,没有经验法则. K的选择在某种程度上受最终应用程序和数据集的驱动.

建议的解决方案

使用GridSearchCV对估计器的指定参数值进行详尽搜索.因此,我们使用它来尝试找到K的最佳值.

对我来说,当我想要设置K的最大阈值时,我不会超过每个类中元素数量的最大类,并且它并没有让我失望(请参阅后面的示例以了解什么)我在说)

例:

import numpy as np

from sklearn import svm, datasets

from sklearn.model_selection import GridSearchCV, RepeatedStratifiedKFold

from sklearn.neighbors import KNeighborsClassifier

iris = datasets.load_iris()

X, y = iris.data, iris.target

# get the max class with respect to the number of elements

max_class = np.max(np.bincount(y))

# you can add other parameters after doing your homework research

# for example, you can add 'algorithm' : ['auto', 'ball_tree', 'kd_tree', 'brute']

grid_param = {'n_neighbors': range(1, max_class)}

model = KNeighborsClassifier()

cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=2)

clf = GridSearchCV(model, grid_param, cv=cv, scoring='accuracy')

clf.fit(X, y)

print("Best Estimator:

{}

".format(clf.best_estimator_))

print("Best Parameters:

{}

".format(clf.best_params_))

print("Best Score:

{}

".format(clf.best_score_))

结果

Best Estimator:

KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',

metric_params=None, n_jobs=1, n_neighbors=17, p=2,

weights='uniform')

Best Parameters:

{'n_neighbors': 17}

Best Score:

0.98

有关RepeatedStratifiedKFold的更新

简而言之,它是一个KFold,重复了n_repeats次,为什么?因为它可以降低偏差,并为您提供更好的统计估计.

也是分层的,它试图确保每个类在每个测试折叠中近似相等地表示(即每个折叠代表数据的所有层次).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值