k近邻分类算法实现(KNN)

时间:2024-03-10 10:20:18

KNN算法实现

最近要用到对 某些数据进行自动识别分类,简单学习了一下k近邻算法,分享一下。

例如:电影动作片爱情片分类识别

这里我们使用了sklearn库,它用起来简单方便。

先提供代码如下:

import numpy as np
import pandas as pd
from IPython.display import display
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier


data=pd.read_excel('/Users/_qiang/Desktop/识别数据集.xlsx',sheet_name=1)
display(data)
y = data["类别"]
X = data[["打斗镜头","亲吻镜头"]]
display(y)
display(X)
y.map({"动作片":0,"爱情片":1})
plt.figure()
plt.scatter(X["打斗镜头"],X["亲吻镜头"],c=y.map({"动作片":0,"爱情片":1}))

action=X.loc[y == "动作片"]
love = X.loc[y =="爱情片"]
colors = sns.color_palette("husl")
plt.figure()
plt.scatter(action["打斗镜头"],action["亲吻镜头"],marker="+",s=80,color = colors[0],label="action")
plt.scatter(love["打斗镜头"],love["亲吻镜头"],marker="_",s=80,color = colors[1],label="love")
plt.legend()
plt.xlabel("action",color=colors[0],fontsize=20)
plt.ylabel("love",color=colors[1],fontsize=20)
plt.show()

knn = KNeighborsClassifier(n_neighbors=3)
# 样本标签数值化处理
target = y.map({"动作片":0,"爱情片":1})
knn.fit(X,target)
#knn算法对象被训练之后,就成为了一个 模型对象。可以预测未知数据
film=[[10,2],[12,7],[5,10]]
prediction = knn.predict((film))
print(prediction)

解读一下代码:

代码的主要步骤如下:

  1. 导入所需的库:

    • numpy:用于支持数组和矩阵运算。
    • pandas:用于数据处理和分析。
    • IPython.display:用于在 IPython 环境中显示数据。
    • seaborn:用于创建统计图形的库。
    • matplotlib.pyplot:用于绘制图形。
    • sklearn.neighbors.KNeighborsClassifier:用于构建 K 近邻分类器模型。
  2. 从 Excel 文件中读取数据集:

    data = pd.read_excel('/Users/guo_qiang/Desktop/盲识别数据集.xlsx', sheet_name=1)
    
  3. 显示数据集的内容:

    display(data)
    
  4. 提取特征和标签:

    y = data["类别"]
    X = data[["打斗镜头", "亲吻镜头"]]
    
  5. 对标签数据进行映射处理:

    y.map({"动作片": 0, "爱情片": 1})
    
  6. 绘制散点图:

    • 使用 plt.scatter 函数绘制特征数据的散点图,并根据标签进行着色。
      在这里插入图片描述
  7. 将数据集按类别拆分:

    • 将数据集分为动作片和爱情片两个子集,分别进行散点图展示。
      在这里插入图片描述
  8. 创建 K 近邻分类器模型:

    knn = KNeighborsClassifier(n_neighbors=3)
    
  9. 将标签数据数值化并训练模型:

    target = y.map({"动作片": 0, "爱情片": 1})
    knn.fit(X, target)
    
  10. 使用训练好的模型进行预测:

film = [[10, 2], [12, 7], [5, 10]]
prediction = knn.predict(film)
print(prediction)

最后的输出将显示对电影类别的预测结果。

其中使用到的表格数据如下所示:

在这里插入图片描述


就介绍到这里啦~~

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!