基于身高、体重和鞋码的性别预测:KNN算法实现

本文将利用KNN(K近邻算法)根据身高、体重、鞋子尺码等特征数据,预测未知样本的性别。

数据集

我们拥有以下数据集,前三列分别代表身高、体重、鞋子尺码,最后一列为对应的性别标签。

[170,65,41,'男']
[166,55,38,'女']
[177,80,39,'女']
[179,80,43,'男']
[170,60,40,'女']
[170,60,38,'女']

目标

现有一个特征数据 [176,71,38,'?'],我们需要利用KNN算法预测该样本的性别。

KNN示意图

KNN示意图

KNN流程图

KNN流程图

代码实现

import numpy as np
import operator

# 创建数据集
def createDataSet():
    group = np.array([[170,65,41],[166,55,38],[177,80,39],[179,80,43],[170,60,40],[170,60,38]])
    labels = ['男','女','女','男','女','女']
    return group, labels

# KNN分类器
def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    # 计算距离
    diffMat = np.tile(inX, (dataSetSize,1)) - dataSet
    sqDiffMat = diffMat ** 2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances ** 0.5
    # 选择距离最小的k个点
    sortedDistIndicies = distances.argsort()
    classCount={}
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    # 排序
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

# 测试数据
def classify():
    group, labels = createDataSet()
    test = np.array([176,71,38])
    k = 3
    # KNN分类
    test_class = classify0(test, group, labels, k)
    print('测试数据:',test)
    print('分类结果:',test_class)

classify()

实验过程

  1. 首先定义 createDataSet 函数,用于创建数据集。
  2. 定义 classify0 函数,实现KNN分类器。该函数使用欧式距离计算样本间的距离,并选择距离最近的k个样本。最后根据这k个样本的类别,进行投票,返回出现次数最多的类别作为预测结果。
  3. 定义 classify 函数,用于测试数据。该函数调用 createDataSet 函数创建数据集,并定义测试数据 test。然后调用 classify0 函数进行分类,并输出测试数据和预测结果。
  4. 运行 classify 函数,输出结果。

实验结果分析

根据给出的数据集,将测试数据 [176,71,38] 分别与数据集中的每个数据计算距离,然后选择距离最小的k个点。当k=3时,最近的3个点分别为 [177,80,39][170,65,41][170,60,40]。其中,[177,80,39][170,60,40] 属于女性,[170,65,41] 属于男性。

因此,根据KNN分类器,测试数据 [176,71,38] 所属的类别为 女性

总结心得体会

KNN算法是一种简单易懂的分类算法,它的核心思想是找到离待分类样本最近的k个样本,然后根据这k个样本的类别来判断待分类样本的类别。在实际应用中,k值的选择对分类结果有很大的影响。当k值较小时,分类器的预测误差会较小,但对异常值比较敏感;当k值较大时,分类器的预测误差会较大,但对异常值比较不敏感。因此,在实际应用中,需要根据具体情况选择合适的k值。

注意

  • 本文提供的代码和数据集仅供参考,实际应用中需要根据具体情况调整参数和数据集。
  • KNN算法是一种简单易懂的算法,但它存在一些局限性,例如对高维数据和异常值比较敏感。在实际应用中,需要根据具体情况选择合适的算法。
  • 本文提供的代码仅供参考,读者可以根据自己的需要进行修改和完善。
基于身高、体重和鞋码的性别预测:KNN算法实现

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

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