K-近邻算法实战项目(KNN)-机械学习

本文介绍了K-近邻(KNN)算法的基本概念和流程,包括计算样本间距离、选择K值和距离度量方法。通过Python的scikit-learn库展示了KNN的代码实现,涉及数据预处理、模型训练与测试、K值选择以及距离度量的影响。还讨论了数据集划分、算法效率和模型评估的重要性,提出了使用kd-tree优化算法效率的方法,并强调了参数调优和避免过拟合的策略。
摘要由CSDN通过智能技术生成

实验过程

 

1、了解K-近邻算法的相关概念及含义;

K-近邻算法(K-Nearest Neighbor,简称KNN算法)是一种基本的分类与回归方法。其基本思想是通过测量不同特征值之间的距离来进行分类,即在特征空间中,将距离较近的样本归为一类。具体来说,KNN算法的步骤如下:

    1.计算测试样本与训练集中每个样本的距离,可以采用欧氏距离、曼哈顿距离等。

2.根据距离的大小,选取距离测试样本最近的K个样本作为候选样本。

3.对K个候选样本进行分类,可以采用投票法、加权投票法等。

2、掌握K-近邻算法求解问题的流程; 

收集数据:可以通过各种手段收集数据,例如爬取网站数据、采集传感器数据等。

准备数据:将收集到的数据进行处理和预处理,包括数据清洗、特征选择、特征变换等。

分析数据:对数据进行可视化和分析,了解数据的特点和分布情况,以便选择合适的K值和距离度量方法。

训练算法:将数据集分为训练集和测试集,使用训练集对KNN模型进行训练,得到模型参数。

测试算法:使用测试集对训练好的KNN模型进行测试,并计算分类的准确率、精度等指标。

使用算法:使用训练好的KNN模型对新数据进行分类,得到预测结果。

3、能够编写出K-近邻算法求解某一问题的代码;

设计实验方案,进行仿真和预测(主要包含:导包、导入数据集、特征和标签的提取、训练集和测试集的划分、特征处理(根据实际情况可选)、K-近邻算法对象的创建、在训练集上进行学习、在测试集上进行预测)。

实验详细操作步骤

from sklearn.datasets import load_iris
#加载数据Iris数据集是常用的分类实验数据集,Iris也称鸢尾花卉数据集是一类多重变量分析的数据集
# 1、获取鸢尾花数据集
iris=load_iris()
## 特征矩阵
X=iris.data
# 标签向量
y=iris.target
print(X[:5])
print(y[:5])

from sklearn.model_selection import train_test_split,GridSearchCV #划分数据集
# X=[[1,3],[2,4],[3,6],[4,6],[5,8],[6,8]]
# y=[1,1,1,0,0,0]
# 对鸢尾花数据集进行分割
# 训练集的特征值X_train 测试集的特征值X_test 训练集的目标值y_train 测试集的目标值y_test
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=2,shuffle=False)
#,random_state=2,shuffle=False 不加,测试集更好
print("训练集特征值:\n", X_train)
print("测试集目标值:\n", y_train)
print("测试集特征值:\n", X_test)
print("训练集目标值:\n", y_test)
print("x_train:\n", X_train.shape)  #查看形状

from sklearn.preprocessing import StandardScaler #数据训练
sc=StandardScaler()
sc.fit(X_train)
# print(sc.mean_)
# print(sc.var_)
X_train=sc.transform(X_train)
X_test=sc.transform(X_test)

from sklearn.neighbors import KNeighborsClassifier #数据预测
from sklearn.pipeline import Pipeline
# 创建一个KNN分类器,并指定k值为5 默认为5
knn=KNeighborsClassifier()
# 使用训练数据来拟合模型
knn.fit(X_train,y_train)
# 对测试数据进行预测,并计算模型的准确率
y_pred = knn.predict(X_test)
accuracy = knn.score(X_test, y_test)
print("预测结果:", y_pred)
print("模型准确率:", accuracy)

# print(y_pred==y_test)
# print((y_pred==y_test).mean())
# 代替
print(knn.score(X_test,y_test))

# 创建一个KNN分类器,并使用管道将标准化和KNN算法组合在一起
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('classifier', KNeighborsClassifier())
])
# 定义超参数网格搜索范围
param_grid = {
    'classifier__n_neighbors': [1, 3, 5, 7],
}
# 使用交叉验证来评估模型性能并进行超参数调优
grid_search = GridSearchCV(pipeline, param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)
# 输出最佳模型的超参数和准确率
print("最佳超参数:", grid_search.best_params_)
print("模型准确率:", grid_search.score(X_test, y_test))

import numpy as np #投入使用
X_new=np.array([[0.6,1.2,1.1,2.5]])
y_new=knn.predict(X_new)
print(y_new)
print(iris['target_names'][y_new])
print(iris['target_names'])

疑难小结

K-近邻算法是一种简单而有效的机器学习算法,可以用于分类和回归问题。在Python中实现K-近邻算法需要使用scikit-learn库。

在实验中,我遇到了以下几个问题和心得体会:

1. 数据预处理:KNN算法对数据的质量要求很高,因此需要进行数据清洗、缺失值填充等预处理操作。同时还需要将特征进行标准化或归一化,以便更好地计算距离。

2. K值选择:K值的选择对模型性能有重要影响。如果选取太小,则可能导致过拟合;如果选取太大,则可能导致欠拟合。因此需要通过交叉验证等方法选择最优的K值。

3. 距离度量:KNN算法中距离度量是非常重要的一部分,不同的距离度量方式会对模型性能产生影响。在实验中我尝试了欧氏距离、曼哈顿距离和闵可夫斯基距离等多种方式,并通过交叉验证选取最优方案。

4. 算法效率:由于KNN算法需要计算每个测试样本到所有训练样本之间的距离,因此随着数据集规模增大,算法效率会变得很低。为了解决这个问题,可以使用kd-tree等数据结构来加速KNN算法。在实验中我尝试了使用kd-tree对算法进行优化,并发现效果非常显著。

5. 模型评估:在实验中需要选择合适的指标来评估模型性能,如准确率、召回率、F1值等。同时还需要进行交叉验证和网格搜索等操作,以便确定最佳参数组合并防止过拟合。

总之,在实现KNN算法时需要注意数据预处理、参数选择、距离度量方式、算法效率和模型评估等方面的问题,并根据具体情况进行调整和优化。

此外,还有一些其他的注意事项:

6. 数据集划分:在实验中需要将数据集划分为训练集和测试集。通常情况下,可以使用随机抽样或者交叉验证等方法进行划分。同时还需要注意避免过度拟合。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真的卷不栋了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值