代码如下:

import numpy as np

# 计算欧式距离
def euclideanDistance(x1, x2):
    return np.sqrt(np.sum((x1 - x2) ** 2))

# KNN算法
def KNN(X_train, y_train, X_test, k):
    # 计算测试数据与每个训练数据的距离
    distances = [euclideanDistance(X_test, x_train) for x_train in X_train]
    # 取距离最近的k个训练数据的索引
    k_indices = np.argsort(distances)[:k]
    # 取k个训练数据的标签
    k_labels = [y_train[i] for i in k_indices]
    # 返回出现最多的标签
    return max(k_labels, key=k_labels.count)

# 训练数据
X_train = np.array([[170,65,41], [166,55,38], [177,80,39], [179,80,43], [170,60,40], [170,60,38]])
y_train = ['男', '女', '女', '男', '女', '女']

# 测试数据
X_test = np.array([176,71,38])

# K值
k = 3

# 预测性别
y_pred = KNN(X_train, y_train, X_test, k)

print('预测性别为:', y_pred)

实验过程:

首先导入必要的库,并定义计算欧式距离的函数。然后定义KNN算法,该算法接受训练数据、标签、测试数据和K值作为参数,返回测试数据对应的标签。在KNN算法中,首先计算测试数据与每个训练数据的距离,然后取距离最近的K个训练数据的标签,最后返回出现最多的标签。

接着,我们定义训练数据和测试数据,以及K值。训练数据包括6个样本,每个样本有3个特征。标签包括男和女两个类别。测试数据包括一个样本,也有3个特征。我们将K值设为3。

最后,我们调用KNN函数预测测试数据对应的性别,并输出结果。

结果分析:

根据计算得到的结果,预测性别为女。

总结心得体会:

KNN算法是一种简单有效的分类算法,其基本思想是通过计算测试数据与训练数据的距离来预测测试数据的标签。在实际应用中,KNN算法的性能受到许多因素的影响,如K值的选择、距离度量的选择等。因此,在使用KNN算法时需要注意这些因素,并进行适当的调整,以获得更好的性能

2、根据身高、体重、鞋子尺码预测性别现有如下数据前三列为对应的特征数据最后一列为对应的性别标签。1706541‘男’1665538‘女’1778039‘女’1798043‘男’1706040‘女’1706038‘女’现有特征数据1767138‘?’试利用KNN计算改组数据对应的性别。要求:用python写出完整代码实验过程结果分析和总结心得体会

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

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