根据身高、体重、鞋子尺码预测性别现有如下数据前三列为对应的特征数据最后一列为对应的性别标签。1706541‘男’1665538‘女’1778039‘女’1798043‘男’1706040‘女’1706038‘女’现有特征数据1767138‘?’试利用KNN计算改组数据对应的性别。要求:用python绘制KNN示意图流程图写出实验过程分析实验结果总结心得体会
实验过程:
- 导入所需库和数据
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算法是一种简单有效的分类算法,但也有一些局限性,如对噪声和异常值敏感等
原文地址: https://www.cveoy.top/t/topic/fHhJ 著作权归作者所有。请勿转载和采集!