KNN算法介绍:
通过寻找最近邻的方式来对新的数据进行分类或预测。
用图片可以直观的理解:
KNN算法的运作过程如下:
通过使用鸢尾花数据集,可以进行分类算法的训练、测试和性能评估。
2.获取数据集:
导入了 sklearn 库中的相关模块和方法,用于实现 KNN 算法对 iris(鸢尾花)数据集的分类任务。
3.打印出数据集:
结果展示:
特征矩阵并未完全截图
若想更直观的感受数据集可采用以下办法(代码是借鉴的):
第一行导入了Pandas库,用于处理结构化的数据。第二行新建了一个DataFrame对象iris_df
,其中包含了鸢尾花数据集的特征数据iris.data
,并通过参数columns=iris.feature_names
将特征名字作为列的名称。第三行将鸢尾花数据集的目标数据iris.target
添加到新的DataFrame中作为一列,名称为class
。最后一行输出整个DataFrame对象iris_df
,可以查看整个数据集的特征和目标数据。
结果展示:
结果展示:
4.标准化数据:
获取数据和目标变量:通过load_iris()函数得到鸢尾花数据集的所有样本特征值,存储在iris.data变量中,对应的目标变量存储在iris.target变量中。
将数据集分为训练集和测试集:调用train_test_split()函数将数据集分为训练集和测试集。其中,X_train、y_train为训练集数据和目标变量,X_test、y_test为测试集数据和目标变量。设置参数test_size=0.2 表示将原始数据集随机划分成80%的训练集和20%的测试集。
数据标准化:使用StandardScaler().fit()函数对数据进行标准化。首先我们用训练集数据拟合一个标准化器scaler,然后使用transform()函数将训练集和测试集数据都进行标准化处理。
5.构建基于训练集的模型:
创建KNN分类器:使用KNeighborsClassifier()
函数创建一个KNN分类器,将其赋值给knn
变量。其中,参数n_neighbors=5
表示选择最近邻居的个数为5。
训练模型:使用fit()
方法拟合模型,将训练数据集X_train
和目标变量y_train
作为参数输入。该方法将根据输入数据和模型参数,构建一个KNN分类模型。
6.预测结果:传入测试集数据,预测出来的结果跟实际的测试集结果和真实结果进行比较。
使用predict()
方法将测试集X_test
作为输入参数传入,该方法会基于已经训练好的KNN分类器,预测出每个测试样本的类别,并将预测结果存储在y_pred
中。
7.计算准确率
使用accuracy_score()
函数计算模型在测试集上的准确率。
- 训练阶段:将带有标签的样本数据集作为训练集,保存样本的特征和标签信息。
- 预测阶段:对于一个新的未知样本,计算它与训练集中所有已知样本之间的距离(通常使用欧氏距离或曼哈顿距离等)。根据距离最近的K个训练集样本的标签,确定未知样本的类别或预测值。
- 分类问题:对于分类问题,根据K个最近邻样本中出现次数最多的类别,将未知样本归类为该类别。
- 回归问题:对于回归问题,根据K个最近邻样本的平均值或加权平均值,预测未知样本的值。
通俗点来说就是:计算待分类物体与其他物体之间的距离然后统计距离最近的 K 个邻居最后对于 K 个最近的邻居,它们属于哪个分类最多,待分类物体就属于哪⼀类。
鸢尾花案例:
1.鸢尾花数据集介绍:在sklearn库中,可以使用
load_iris()
函数加载鸢尾花数据集。该数据集包含了150个样本,每个样本代表了一个鸢尾花。每个样本有4个特征:萼片长度(sepal length)、萼片宽度(sepal width)、花瓣长度(petal length)和花瓣宽度(petal width),以及对应的鸢尾花种类信息。
数据集中的鸢尾花样本被分为3个类别,每个类别代表了一种鸢尾花的品种。这3个类别分别是:
山鸢尾(Setosa),用0表示
变色鸢尾(Versicolor),用1表示
维吉尼亚鸢尾(Virginica),用2表示