返回
赤霞珠还是品丽珠:Sklearn 中的 KNN 带您鉴别红酒之谜
见解分享
2023-09-20 07:40:56
在觥筹交错的酒会上,想成为一个优雅从容的红酒鉴赏家,透过酒杯,识得酒液中酝藏的奥秘,并且能如数家珍地娓娓道来吗?Sklearn 中的 KNN 算法,为您提供了一双慧眼,让您即使不是品酒专家,也能准确无误地鉴别出红酒的种类,在酒友面前侃侃而谈,指点江山。
KNN 算法(K 近邻算法)是机器学习中最简单、最容易理解的算法之一。它的基本思想是:如果一个样本在特征空间中的 k 个最近邻样本的大多数属于某一个类别,那么这个样本也属于这个类别。
在 Sklearn 中,已经封装好了 KNN 算法。我们只需几行简单的代码,就可以使用 KNN 算法来进行红酒鉴别。
from sklearn.neighbors import KNeighborsClassifier
# 导入红酒数据集
wine_data = pd.read_csv('wine.csv')
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(wine_data.drop('class', axis=1), wine_data['class'], test_size=0.2)
# 创建一个 KNN 分类器
knn = KNeighborsClassifier(n_neighbors=5)
# 训练分类器
knn.fit(X_train, y_train)
# 预测测试集中的数据
y_pred = knn.predict(X_test)
# 评估分类器的性能
print('准确率:', accuracy_score(y_test, y_pred))
运行以上代码,即可输出 KNN 算法在红酒鉴别任务上的准确率。
除了使用 Sklearn 中的 KNN 算法包之外,我们还可以自己动手实现 KNN 算法。
def knn(X_train, y_train, X_test, k):
"""
KNN算法
参数:
X_train:训练集特征矩阵
y_train:训练集标签向量
X_test:测试集特征矩阵
k:最近邻样本数
返回值:
y_pred:测试集预测标签向量
"""
# 计算训练集和测试集之间的距离矩阵
dist_matrix = distance_matrix(X_train, X_test)
# 找到每个测试样本的 k 个最近邻样本
knn_indices = np.argsort(dist_matrix, axis=1)[:, :k]
# 预测每个测试样本的标签
y_pred = np.array([np.argmax(np.bincount(y_train[knn_indices[i]])) for i in range(X_test.shape[0])])
return y_pred
# 导入红酒数据集
wine_data = pd.read_csv('wine.csv')
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(wine_data.drop('class', axis=1), wine_data['class'], test_size=0.2)
# 使用 KNN 算法进行红酒鉴别
y_pred = knn(X_train, y_train, X_test, 5)
# 评估分类器的性能
print('准确率:', accuracy_score(y_test, y_pred))
运行以上代码,同样可以输出 KNN 算法在红酒鉴别任务上的准确率。
通过对比,我们可以发现,Sklearn 中的 KNN 算法包和我们自己实现的 KNN 算法在红酒鉴别任务上的准确率基本相同。这说明,Sklearn 中的 KNN 算法包封装得非常好,我们可以直接使用它来进行机器学习任务。
现在,您已经掌握了 KNN 算法的原理和使用方法,赶快动手,用 KNN 算法来鉴别一下您手中的那杯红酒吧!