Python - 机器学习算法库Scikit-Leran使用详解4(KNN最邻近分类算法)
作者:hangge | 2022-08-29 08:10
五、KNN 最邻近分类算法
1,什么是 KNN 算法?
(1)K 最近邻分类算法,简称 KNN(K-Nearest-Neighbor),它是有监督学习算法的一种。该算法的思路就是如果一个未知样本最近的 K 个样本中的大多数属于某一个类别,则该样本也属于这个类别。
(2)由于考虑的数据点数量由 K 值确定。因此 K 值是算法的核心,选择最优 K 值是建立一个合理、精确的 knn 模型的必要条件:
- 如果 k 值太低,则模型会变得过于具体,不能很好地泛化。它对噪音也很敏感。该模型在训练组上实现了很高的精度,但对于新的、以前看不到的数据点,该模型的预测能力较差。因此,我们很可能最终得到一个过拟合的模型。
- 如果 k 选择得太大,模型就会变得过于泛化,无法准确预测训练和测试集中的数据点。这种情况被称为欠拟合。
2,一个简单的 KNN 算法样例
(1)下面对 Sklearn 自带的葡萄酒数据集进行 KNN 算法分类预测,通过调用 Sklearn 库提供的 KNeighborsClassifier 实现 KNN 分类算法。
#导入 sklearn 提供的葡萄酒数据 from sklearn.datasets import load_wine #导入 sklearn 提供的KNN分类算法 from sklearn.neighbors import KNeighborsClassifier #导入skleran 提供的分割数据集的方法 from sklearn.model_selection import train_test_split #导入pandas import pandas as pd #加载数据集 wine = load_wine() #分割数据集训练集,测试集 x_train,x_test,y_train,y_test=train_test_split(wine['data'],wine['target'],random_state=0) #构建knn分类模型,并指定 k 值 model=KNeighborsClassifier(n_neighbors=10) #训练模型 model.fit(x_train,y_train) #训练后用测试集对模型进行评分 print("模型评分:",model.score(x_test,y_test)) print('-----------------------------------------------------') print('测试集前5条数据特征值:') print(pd.DataFrame(x_test).head(5)) print('-----------------------------------------------------') print('测试集前5条数据目标值:') print(pd.DataFrame(y_test).head(5)) print('-----------------------------------------------------') #使用模型预测 y_predict=model.predict(x_test) print('使用模型预测测试集前5条数据的目标值:') print(pd.DataFrame(y_predict).head(5))
(2)运行结果如下:
3,权重设置
(1)最普遍的 KNN 算法无论距离如何,权重都一样。KNeighborsClassifier 方法还有个 weights 参数可以设置如何分配权重,下面样例让距离更近的点更加重要。
weights 参数说明:
- uniform:不管远近权重都一样,就是最普通的 KNN 算法的形式。
- distance:权重和距离成反比,距离预测目标越近具有越高的权重。
- 自定义函数:自定义一个函数,根据输入的坐标值返回对应的权重,达到自定义权重的目的。
#导入 sklearn 提供的葡萄酒数据 from sklearn.datasets import load_wine #导入 sklearn 提供的KNN分类算法 from sklearn.neighbors import KNeighborsClassifier #导入skleran 提供的分割数据集的方法 from sklearn.model_selection import train_test_split #导入pandas import pandas as pd #加载数据集 wine = load_wine() #分割数据集训练集,测试集 x_train,x_test,y_train,y_test=train_test_split(wine['data'],wine['target'],random_state=0) #构建knn分类模型,并指定 k 值 model=KNeighborsClassifier(n_neighbors=10, weights='distance') #训练模型 model.fit(x_train,y_train) #训练后用测试集对模型进行评分 print("模型评分:",model.score(x_test,y_test)) print('-----------------------------------------------------') print('测试集前5条数据特征值:') print(pd.DataFrame(x_test).head(5)) print('-----------------------------------------------------') print('测试集前5条数据目标值:') print(pd.DataFrame(y_test).head(5)) print('-----------------------------------------------------') #使用模型预测 y_predict=model.predict(x_test) print('使用模型预测测试集前5条数据的目标值:') print(pd.DataFrame(y_predict).head(5))
(2)运行结果如下:
全部评论(0)