基于身高、体重、鞋码的性别预测:KNN算法应用
基于身高、体重、鞋码的性别预测: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个样本点的类别进行投票,将测试样本归为票数最多的类别。
流程图

代码实现
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算法的应用,实际中根据身高、体重、鞋码等特征数据预测性别是一个非常复杂的问题,需要考虑更多因素,并使用更复杂的数据分析方法。
原文地址: https://www.cveoy.top/t/topic/omU8 著作权归作者所有。请勿转载和采集!