目录
一、机器学习是什么
(1)概述
(2)三种类型
1.监督学习(Supervised Learning):
2.无监督学习(Unsupervised Learning):
3.强化学习(Reinforcement Learning):
二、KNN算法的基本原理:
1.距离度量:
2.K值的选择:
3.投票机制和投票:
三、Python实现KNN算法
1. 导入必要的库和数据:
2. 提取特征和标签:
3. 导入KNN分类器并训练模型:
4.在训练集上进行预测并计算准确率:
5. 在测试集上进行预测并计算准确率:
四、总结
五、ps(补充):
机器学习(Machine Learning,简称ML)是人工智能(AI)中的一个重要分支,主要研究如何通过数据进行学习,使计算机能够从经验中自动改进。与传统的编程方式不同,机器学习通过构建模型、分析数据的特征和模式,来进行预测、分类、识别等任务。
简而言之,机器学习让计算机从数据中学习,而不是通过硬编码明确编写规则。机器学习通常包括以下:
在已知标注数据的基础上训练模型,目标是通过输入数据预测输出结果。常见算法有线性回归、逻辑回归、支持向量机(SVM)、KNN等。
处理没有标注的数据,目标是寻找数据中的模式或结构。常见算法有K-means聚类、主成分分析(PCA)等。
通过与环境的交互来学习最佳策略,以最大化长期回报。常见应用包括自动驾驶、游戏AI等。
在这篇文章中,我们将专注于监督学习中的一种经典算法——K近邻算法(K-Nearest Neighbors, KNN)。
KNN的核心是计算数据点之间的距离,通常使用欧氏距离、曼哈顿距离等常见距离度量方法来衡量样本之间的相似度。
欧氏距离的公式为:
其中,和 是两个样本, 和 是样本的各个特征。
K值是指选择的邻居个数,K值的大小直接影响分类结果的准确性。较小的K值可能导致模型过拟合,而较大的K值可能导致模型欠拟合。通常通过交叉验证等方法来选择最佳的K值。
在分类问题中,KNN通过K个邻居的类别进行投票,最终的类别由票数最多的类别决定。如果是回归问题,则取K个邻居的平均值作为预测结果。
我们以鸢尾花数据集(Iris Dataset)为例,来实现KNN算法。鸢尾花数据集包含了150个样本,分别属于三种鸢尾花的不同种类,每个样本有4个特征:萼片长度、萼片宽度、花瓣长度、花瓣宽度。
以下是用Python实现KNN算法的步骤:
首先,我们需要导入相关的库,加载鸢尾花数据集,并进行预处理。
import pandas as pd # 导入pandas库,用于数据处理
# 读取训练集数据和测试集数据
train_data = pd.read_excel('鸢尾花训练数据.xlsx') # 训练数据
test_data = pd.read_excel('鸢尾花测试数据.xlsx') # 测试数据
pandas 是一个非常常用的数据处理库,用于读取、处理表格数据,感兴趣的读者可以翻看博主前面的博客
read_excel 用于读取Excel格式的文件。我们使用这个函数加载数据集。
train_X = train_data[['萼片长(cm)', '萼片宽(cm)', '花瓣长(cm)', '花瓣宽(cm)']] # 提取训练数据的特征
train_Y = train_data[['类型_num']] # 提取训练数据的标签
train_X 是包含训练样本的特征数据(萼片长、萼片宽、花瓣长、花瓣宽),即y等于f(x)中的x。
train_Y 是对应的标签数据(花的种类编号),标签数据即y=f(x)中的y。
from sklearn.neighbors import KNeighborsClassifier # 导入KNN分类器
knn = KNeighborsClassifier(n_neighbors=5) # 创建KNN分类器实例,选择K=5
knn.fit(train_X, train_Y) # 用训练数据训练KNN模型
KNeighborsClassifier 是Scikit-learn中提供的KNN分类器,读者大大可以进入scikit-learn.org官网查询,相关截图放在文末,这里不做过多介绍。
n_neighbors=5 表示我们选择K=5,即选取离待分类点最近的5个邻居。
fit 函数用于训练模型,输入训练数据(特征和标签)。
train_predicted = knn.predict(train_X) # 在训练集上进行预测
score = knn.score(train_X, train_Y) # 计算训练集上的准确率
predict 函数用于对训练数据进行预测。
score 函数用于计算模型在训练集上的准确率。该函数默认使用准确率作为评估标准。
test_X = test_data[['萼片长(cm)', '萼片宽(cm)', '花瓣长(cm)', '花瓣宽(cm)']] # 提取测试集特征
test_Y = test_data[['类型_num']] # 提取测试集标签
test_predicted = knn.predict(test_X) # 在测试集上进行预测
score_test = knn.score(test_X, test_Y) # 计算测试集上的准确率
print(score_test) # 输出测试集上的准确率
同样使用 predict 和 score 方法在测试集上进行预测和评估准确率。
在本文中,我们首先介绍了机器学习的基本概念,接着讲解了KNN算法的原理。最后,我们通过Python实现了KNN算法在鸢尾花数据集上的应用,并展示了如何在训练集和测试集上进行预测和评估。
KNN算法是一种简单而有效的分类算法,适用于处理小规模数据集。在实际应用中,选择合适的K值和距离度量方法非常关键,能够显著影响模型的效果。
希望本文对你理解机器学习和KNN算法有所帮助。如果你有任何问题,欢迎在评论区讨论!
附:sklearn官网(scikit-learn.org)相关库作用参数用法查询,外网查询比较慢,需耐心等待
1.打开scikit-learn.org,点击classification下的nearest neighbors
2.在左侧目录中查找自己想要了解的相关函数/方法的用法及参数