KNN算法预测性别:基于身高、体重、鞋码的分类实验

本实验利用KNN算法,根据身高、体重、鞋子尺码等特征数据,预测个体的性别。

实验数据:

| 身高 | 体重 | 鞋码 | 性别 | |---|---|---|---| | 170 | 65 | 41 | '男' | | 166 | 55 | 38 | '女' | | 177 | 80 | 39 | '女' | | 179 | 80 | 43 | '男' | | 170 | 60 | 40 | '女' | | 170 | 60 | 38 | '女' |

待预测数据:

| 身高 | 体重 | 鞋码 | 性别 | |---|---|---|---| | 176 | 71 | 38 | '?' |

实验过程:

  1. 导入所需库和数据
import numpy as np
import matplotlib.pyplot as plt

data = np.array([[170,65,41,'男'],[166,55,38,'女'],[177,80,39,'女'],
                 [179,80,43,'男'],[170,60,40,'女'],[170,60,38,'女']])
predict = np.array([176,71,38,'?'])
  1. 计算样本之间的距离
def distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2) ** 2))

distances = []
for d in data:
    dis = distance(d[:-1], predict[:-1])
    distances.append((dis, d[-1]))
  1. 对距离进行排序,并选择k个最近邻样本
k = 3
distances.sort()
nearest = []
for i in range(k):
    nearest.append(distances[i][1])
  1. 对k个最近邻样本进行投票,得出预测结果
from collections import Counter

result = Counter(nearest).most_common(1)[0][0]
  1. 输出预测结果
print('预测结果为:', result)
  1. 绘制KNN示意图
plt.scatter(data[:,0], data[:,1], c=[1 if i == '男' else 0 for i in data[:,3]],
            cmap='cool', label=data[:,3])
plt.scatter(predict[0], predict[1], c='r', marker='x', label='预测数据')
plt.legend()
plt.show()
  1. 绘制流程图
st=>start: 开始
op1=>operation: 导入数据
op2=>operation: 计算样本之间的距离
op3=>operation: 对距离进行排序
op4=>operation: 选择k个最近邻样本
op5=>operation: 对k个最近邻样本进行投票
op6=>operation: 输出预测结果
op7=>operation: 绘制KNN示意图
op8=>operation: 绘制流程图
e=>end: 结束

st->op1->op2->op3->op4->op5->op6->op7->op8->e

分析实验结果:

根据给定的样本数据和特征数据,利用KNN算法实现了对未知性别的预测。通过计算样本之间的距离,选择k个最近邻样本,并对这k个样本进行投票,得出预测结果。同时,利用Python绘制了KNN示意图和流程图,更好地理解了算法的执行过程。在实验过程中,需要注意选择k值的大小,过大或过小都会影响预测结果。总的来说,KNN算法是一种简单有效的分类算法,但也有一些局限性,如对噪声和异常值敏感等。

心得体会:

通过本次实验,我对KNN算法有了更深入的理解,了解了其工作原理和应用场景。同时,也学习了利用Python进行数据处理和可视化,提高了编程能力。在实际应用中,需要根据具体问题选择合适的算法和参数,才能取得最佳效果。

KNN算法预测性别:基于身高、体重、鞋码的分类实验

原文地址: https://www.cveoy.top/t/topic/omUV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录