基于身高、体重、鞋码的性别预测:KNN算法应用

本文将通过一个实际案例,演示如何利用KNN算法根据身高、体重、鞋码等特征数据预测性别。

问题描述

假设我们收集了部分人的身高、体重、鞋码以及性别信息,如下表所示:

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

现在我们有一组新的数据: [176, 71, 38, '?'],想知道该组数据对应的性别。

KNN算法简介

KNN算法是一种基于距离度量进行分类的算法。其核心思想是在训练集中找到距离测试样本最近的K个样本点,然后根据这K个样本点的类别进行投票,将测试样本归为票数最多的类别。

流程图

KNN流程图

代码实现

import numpy as np
from collections import Counter

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

class KNN:
    def __init__(self, k=3):
        self.k = k
    
    def fit(self, X, y):
        self.X_train = X
        self.y_train = y
    
    def predict(self, X):
        y_pred = [self._predict(x) for x in X]
        return np.array(y_pred)
    
    def _predict(self, x):
        # 计算距离
        distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
        # 找到距离最近的k个样本点
        k_idx = np.argsort(distances)[:self.k]
        # 投票,选票最多的类别作为预测结果
        k_labels = [self.y_train[i] for i in k_idx]
        most_common = Counter(k_labels).most_common(1)
        return most_common[0][0]

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

# KNN分类
knn = KNN(k=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(y_pred)

实验结果

运行上述代码,我们得到预测结果为 ['男']。也就是说,对于输入的特征数据 [176, 71, 38],KNN算法预测其对应的性别为“男”。

心得体会

KNN算法是一种简单而有效的分类算法,其核心在于距离度量和投票机制。在实际应用中,KNN算法的效果很大程度上取决于K值的选择和距离度量的方法。需要根据具体问题和数据集进行调参和选择合适的距离度量方法。

需要注意的是,这个例子只是为了说明KNN算法的应用,实际中根据身高、体重、鞋码等特征数据预测性别是一个非常复杂的问题,需要考虑更多因素,并使用更复杂的数据分析方法。

基于身高、体重、鞋码的性别预测:KNN算法应用

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

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