KNN算法的简单应用将一维数据集分类——打开就可以跑

本文详细介绍了KNN算法的工作原理,包括步骤、源代码实现以及实验结果。通过实例展示,KNN是如何根据距离判断未知数据类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、算法原理

    KNN算法属于监视类算法,即需要人类自己进行将数据分类,然后根据已知的数据类型来预测未知的数据类型

KNN算法
第一步:先在数据库里面引入数据
第二步:先预先设定不同的类别,我设为 0 类于1类
第三步:再在数据库中引入数据与已预先设定的个类别进行欧式计算
第四步:对计算得到的数据进行排序,然后取计算得到的最小的n个数据
#第五步:对这n个数据统计,计算出各个类别的频数并排序,最后打印出类别频数最多的类别

二、源代码

# 基本数据
x=[0,1,2,3,4,5,6,7,8]    # 样本距离
y=[0,0,0,0,1,1,1,1,1]     # 类别
x0=3.1                 # 根据到各个样本距离来判断类型
# 算出x0到其他所有值的距离,并将0,1表示的类别与之对应
data=[]
for i in range(len(x)):
    dis=(x[i]-x0)**2
    data.append((y[i],dis))        
 # 元组有两个数据并入列表中 ,第一个数据为类型,第二个数据为距离
 #根据第二个值来排序
data_one=sorted(data,  key=lambda x: x[1])  # 按元组第二个数据进行排序
 #只取距离最近的前三个来比较,选最优的类别
k = 5  # 超参数
data_two=data_one[:k]
c={}
for i in data_two:                 # data_two 为列表,该列表包括元组,一个元组里面包含了两个数据
    if i[0] in c.keys():    # i[0] 为元组的第零个元素,即类别
        c[i[0]]=c[i[0]]+1   # c[i[0]]为字典对应的值,即类别出现的频次
    else:
        c[i[0]]=1
 #再根据上一步的结果,再进行排序(不排序则是按出现什么情况,进行将什么情况并入字典中,是无序排列的)
type_max=sorted(c.items(), key=lambda x:x[1])            # #返回列表,里面包含元组
print("如果 0,1,2,3 的类别是 0;\n4,5,6,7,8的类别是 1")
print("则x0的类别是:",type_max[-1][-2])

三、实验结果及总结

由图片可知,分类符合我们的预期。
在这里插入图片描述
请添加图片描述

### 使用KNN算法对酒数据集进行分类 对于使用KNN算法来处理酒的数据集,可以借鉴鸢尾花数据集应用的方法[^1]。具体而言,在构建模型之前要加载并预览数据集以了解其结构。 为了实现这一目标,Python中的`scikit-learn`库提供了方便快捷的方式来导入葡萄酒数据集,并且可以直接调用其中的KNeighborsClassifier类创建KNN分类器。下面是一个简单的例子展示如何完成这项工作: ```python from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier import pandas as pd # 加载葡萄酒数据集 wine = load_wine() X, y = wine.data, wine.target # 将特征缩放至同一量级有助于提高KNN性能 scaler = StandardScaler().fit(X) X_scaled = scaler.transform(X) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, test_size=0.3, random_state=42) # 创建KNN分类器实例 knn_classifier = KNeighborsClassifier(n_neighbors=5).fit(X_train, y_train) # 输出预测结果 predictions = knn_classifier.predict(X_test) print(predictions) ``` ### 绘制散点图用于数据可视化 当涉及到绘制散点图时,matplotlib和seaborn确实是非常强大的绘图工具[^2]。考虑到葡萄酒数据集具有多个维度(即超过两个以上的属性),通常会选择两个最重要的特性或者通过降维技术如PCA减少到二维空间后再做图形表示。这里给出一个基于前两列特性的简单示例代码片段: ```python import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(8, 6)) sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=wine.target, palette='viridis') plt.title('Wine Dataset Scatter Plot of First Two Features') plt.xlabel(wine.feature_names[0]) plt.ylabel(wine.feature_names[1]) plt.show() ``` 上述代码会生成一张关于葡萄酒数据集中第一个和第二个特征之间关系的散点图,并根据不同类别着色以便区分不同类型的红酒样品。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

会做饭的网络工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值