KNN算法预测性别:基于身高、体重、鞋码的分类实验
KNN算法预测性别:基于身高、体重、鞋码的分类实验
本实验利用KNN算法,根据身高、体重、鞋子尺码等特征数据,预测个体的性别。
实验数据:
| 身高 | 体重 | 鞋码 | 性别 | |---|---|---|---| | 170 | 65 | 41 | '男' | | 166 | 55 | 38 | '女' | | 177 | 80 | 39 | '女' | | 179 | 80 | 43 | '男' | | 170 | 60 | 40 | '女' | | 170 | 60 | 38 | '女' |
待预测数据:
| 身高 | 体重 | 鞋码 | 性别 | |---|---|---|---| | 176 | 71 | 38 | '?' |
实验过程:
- 导入所需库和数据
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,'?'])
- 计算样本之间的距离
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]))
- 对距离进行排序,并选择k个最近邻样本
k = 3
distances.sort()
nearest = []
for i in range(k):
nearest.append(distances[i][1])
- 对k个最近邻样本进行投票,得出预测结果
from collections import Counter
result = Counter(nearest).most_common(1)[0][0]
- 输出预测结果
print('预测结果为:', result)
- 绘制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()
- 绘制流程图
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进行数据处理和可视化,提高了编程能力。在实际应用中,需要根据具体问题选择合适的算法和参数,才能取得最佳效果。
原文地址: https://www.cveoy.top/t/topic/omUV 著作权归作者所有。请勿转载和采集!