简介
K近邻(K-Nearest Neighbor, KNN)算法是一种常用的监督学习分类算法,它的基本思想是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。本文将介绍如何使用Python中的scikit-learn库实现KNN算法,并应用于光谱数据分类任务。
数据准备
在开始建模之前,需要准备好训练集和测试集数据。这里假设数据已经按照训练集和测试集分别存储在train.csv
和test.csv
文件中,并且数据的最后一列为类别标签。可以使用pandas
库读取csv文件:
import pandas as pd
data_Train = pd.read_csv("train.csv")
data_Test = pd.read_csv("test.csv")
读取后的数据为DataFrame
格式,需要转换为numpy
数组以便后续使用:
import numpy as np
data_Train = np.array(data_Train)
data_Test = np.array(data_Test)
接下来,将数据划分为特征和标签两部分:
x_train = data_Train[0:, :-1]
x_test = data_Test[0:, :-1]
y_train = data_Train[0:, -1]
y_test = data_Test[0:, -1]
模型训练
使用scikit-learn库中的KNeighborsClassifier
类来创建KNN分类器对象:
from sklearn.neighbors import KNeighborsClassifier
KNN = KNeighborsClassifier(n_neighbors=3, weights='uniform', p=2)
这里设置了三个参数:
n_neighbors
:最近邻样本数,即K值,这里设为3weights
:表示各个最近邻样本的权重,可以是'uniform'
(均等权重)或'distance'
(距离加权),这里选择'uniform'
p
:距离度量参数,p=1表示曼哈顿距离,p=2表示欧氏距离,这里选择p=2
接下来,使用fit
方法训练分类器:
KNN.fit(x_train, y_train)
模型评估
模型训练完成后,可以对训练集和测试集的分类准确率进行评估:
train_acc = KNN.score(x_train, y_train)
test_acc = KNN.score(x_test, y_test)
print("训练准确率:", train_acc)
print("测试准确率:", test_acc)
除了准确率之外,还可以计算混淆矩阵(Confusion Matrix)来评估分类器的性能:
from sklearn.metrics import confusion_matrix
train_pred = KNN.predict(x_train)
test_pred = KNN.predict(x_test)
print('训练集混淆矩阵为:\n',confusion_matrix(train_pred,y_train))
print('测试集混淆矩阵为:\n',confusion_matrix(test_pred,y_test))