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)
解读一下代码:
代码的主要步骤如下:
-
导入所需的库:
numpy
:用于支持数组和矩阵运算。pandas
:用于数据处理和分析。IPython.display
:用于在 IPython 环境中显示数据。seaborn
:用于创建统计图形的库。matplotlib.pyplot
:用于绘制图形。sklearn.neighbors.KNeighborsClassifier
:用于构建 K 近邻分类器模型。
-
从 Excel 文件中读取数据集:
data = pd.read_excel('/Users/guo_qiang/Desktop/盲识别数据集.xlsx', sheet_name=1)
-
显示数据集的内容:
display(data)
-
提取特征和标签:
y = data["类别"] X = data[["打斗镜头", "亲吻镜头"]]
-
对标签数据进行映射处理:
y.map({"动作片": 0, "爱情片": 1})
-
绘制散点图:
- 使用
plt.scatter
函数绘制特征数据的散点图,并根据标签进行着色。
- 使用
-
将数据集按类别拆分:
- 将数据集分为动作片和爱情片两个子集,分别进行散点图展示。
- 将数据集分为动作片和爱情片两个子集,分别进行散点图展示。
-
创建 K 近邻分类器模型:
knn = KNeighborsClassifier(n_neighbors=3)
-
将标签数据数值化并训练模型:
target = y.map({"动作片": 0, "爱情片": 1}) knn.fit(X, target)
-
使用训练好的模型进行预测:
film = [[10, 2], [12, 7], [5, 10]]
prediction = knn.predict(film)
print(prediction)
最后的输出将显示对电影类别的预测结果。
其中使用到的表格数据如下所示:
就介绍到这里啦~~
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!