用sklearn进行k近邻交叉验证,选出最优k值并输出准确率,python代码
分享
53474
以下是使用sklearn进行k近邻交叉验证,选出最优k值并输出准确率的Python代码:
```python
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 定义k值的范围
k_range = range(1, 31)
# 用列表记录每个k值对应的准确率
k_scores = []
# 循环每个k值,进行交叉验证
for k in k_range:
knn = KNeighborsClassifier(n_neighbors=k)
scores = cross_val_score(knn, X, y, cv=10, scoring='accuracy')
k_scores.append(scores.mean())
# 找到最优的k值
best_k = np.argmax(k_scores) + 1
# 输出最优的k值和对应的准确率
print("最优的k值为:", best_k)
print("对应的准确率为:", k_scores[best_k-1])
```
解释一下代码:
首先,我们加载了鸢尾花数据集,并将其分为特征矩阵X和目标向量y。
然后,我们定义了k值的范围,从1到30。
接下来,我们循环每个k值,使用KNeighborsClassifier创建一个k近邻分类器,并使用cross_val_score进行10折交叉验证,计算每个k值对应的平均准确率,并将其存储在k_scores列表中。
最后,我们使用numpy.argmax函数找到最优的k值,并输出最优的k值和对应的准确率。
注意,这里使用的是10折交叉验证,可以根据需要进行调整。另外,scoring参数可以设置为其他评估指标,如精确度、召回率等。
```python
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 定义k值的范围
k_range = range(1, 31)
# 用列表记录每个k值对应的准确率
k_scores = []
# 循环每个k值,进行交叉验证
for k in k_range:
knn = KNeighborsClassifier(n_neighbors=k)
scores = cross_val_score(knn, X, y, cv=10, scoring='accuracy')
k_scores.append(scores.mean())
# 找到最优的k值
best_k = np.argmax(k_scores) + 1
# 输出最优的k值和对应的准确率
print("最优的k值为:", best_k)
print("对应的准确率为:", k_scores[best_k-1])
```
解释一下代码:
首先,我们加载了鸢尾花数据集,并将其分为特征矩阵X和目标向量y。
然后,我们定义了k值的范围,从1到30。
接下来,我们循环每个k值,使用KNeighborsClassifier创建一个k近邻分类器,并使用cross_val_score进行10折交叉验证,计算每个k值对应的平均准确率,并将其存储在k_scores列表中。
最后,我们使用numpy.argmax函数找到最优的k值,并输出最优的k值和对应的准确率。
注意,这里使用的是10折交叉验证,可以根据需要进行调整。另外,scoring参数可以设置为其他评估指标,如精确度、召回率等。