KNN分类器决策边界可视化:基于动作数据集的实战应用
KNN分类器决策边界可视化:基于动作数据集的实战应用
本文将介绍如何使用KNN分类器对动作数据集进行分类,并通过可视化展示分类器决策边界。
一、 导入必要的库
import cv2
import math
import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
二、 定义全局变量
distance_threshold = 121 # 设置KNN距离阈值
neighbors = 2 # 邻居
三、 加载动作数据集
warmup_df = pd.read_csv('dataset_warm-up.csv')
combat_df = pd.read_csv('dataset_SHIZHAN POSE.csv')
attack_df = pd.read_csv('dataset_hit.csv')
respect_df = pd.read_csv('dataset_respect.csv')
gongbu_df = pd.read_csv('dataset_gongbu.csv')
四、 数据清洗
print('数据清洗')
for df in [warmup_df, combat_df, attack_df, respect_df, gongbu_df]:
df.drop(df[(np.abs(df[['angle1','angle2','angle3', 'angle4','angle5','angle5_1' ,'angle6', 'angle7','angle8','angle9','angle10','angle11']] - df[['angle1','angle2','angle3', 'angle4','angle5','angle5_1' ,'angle6', 'angle7','angle8','angle9','angle10','angle11']].mean()) > 2 * df[['angle1','angle2','angle3', 'angle4','angle5' ,'angle6', 'angle7','angle8','angle9','angle10','angle11']].std()).any(axis=1)].index, inplace=True)
五、 数据集合并
data = pd.concat([warmup_df, combat_df, attack_df, respect_df, gongbu_df], ignore_index=True)
六、 训练KNN分类器
print('开始训练knn')
knn = KNeighborsClassifier(n_neighbors=neighbors, weights='distance', metric='manhattan')
knn.fit(data[['angle1','angle2','angle3', 'angle4','angle5','angle5_1' ,'angle6', 'angle7','angle8','angle9','angle10','angle11']], data['label'])
七、 可视化决策边界
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
# 取出训练集中的特征和标签
X = data[['angle1','angle2','angle3', 'angle4','angle5','angle5_1' ,'angle6', 'angle7','angle8','angle9','angle10','angle11']]
y = data['label']
# 将特征缩放到[0, 1]范围内
X_normalized = (X - X.min()) / (X.max() - X.min())
# 将特征降维到二维
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_normalized)
# 训练KNN分类器
knn = KNeighborsClassifier(n_neighbors=neighbors, weights='distance', metric='manhattan')
knn.fit(X_pca, y)
# 绘制分类器的决策边界
cmap_light = ListedColormap(['#AAAAFF', '#FFAAAA', '#AAFFAA', '#AFAFAF'])
cmap_bold = ListedColormap(['#0000FF', '#FF0000', '#00FF00', '#AFAFAF'])
h = .02 # 步长
x_min, x_max = X_pca[:, 0].min() - 0.1, X_pca[:, 0].max() + 0.1
y_min, y_max = X_pca[:, 1].min() - 0.1, X_pca[:, 1].max() + 0.1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure(figsize=(8, 6))
plt.pcolormesh(xx, yy, Z, cmap=cmap_light, shading='auto')
# 绘制训练集中的样本点
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y.astype('category').cat.codes, cmap=cmap_bold, edgecolor='k', s=20)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title('KNN decision boundary')
plt.xlabel('PCA1')
plt.ylabel('PCA2')
plt.show()
八、 总结
本代码示例展示了如何使用KNN分类器对动作数据集进行分类,并通过可视化展示分类器决策边界。通过该示例,我们可以更直观地理解KNN分类器的原理和应用。
注意:
- 该代码示例仅供参考,实际应用中可能需要根据具体情况进行调整。
- 为了更好地展示决策边界,代码示例对特征进行了降维处理。
- 在实际应用中,需要根据具体情况选择合适的距离度量和邻居数。
- 在进行数据清洗时,可以选择更合适的标准差倍数来剔除异常样本。
原文地址: https://www.cveoy.top/t/topic/gQ0Z 著作权归作者所有。请勿转载和采集!