本教程展示如何使用Python实现KNN分类算法,并以水果数据集为例进行演示。

数据集

训练集:

[[5.1, 3.5, 1.4, 0.2, 'apple'],
[4.9, 3.0, 1.4, 0.2, 'apple'],
[4.7, 3.2, 1.3, 0.2, 'apple'],
[4.6, 3.1, 1.5, 0.2, 'apple'],
[5.0, 3.6, 1.4, 0.2, 'apple'],
[5.4, 3.9, 1.7, 0.4, 'apple'],
[4.6, 3.4, 1.4, 0.3, 'apple'],
[5.0, 3.4, 1.5, 0.2, 'apple'],
[4.4, 2.9, 1.4, 0.2, 'apple'],
[4.9, 3.1, 1.5, 0.1, 'apple'],
[5.4, 3.7, 1.5, 0.2, 'apple'],
[4.8, 3.4, 1.6, 0.2, 'apple'],
[4.8, 3.0, 1.4, 0.1, 'apple'],
[4.3, 3.0, 1.1, 0.1, 'apple'],
[5.8, 4.0, 1.2, 0.2, 'apple'],
[5.7, 4.4, 1.5, 0.4, 'apple'],
[5.4, 3.9, 1.3, 0.4, 'apple'],
[5.1, 3.5, 1.4, 0.3, 'apple'],
[5.7, 3.8, 1.7, 0.3, 'apple'],
[5.1, 3.8, 1.5, 0.3, 'apple'],
[5.4, 3.4, 1.7, 0.2, 'apple'],
[5.1, 3.7, 1.5, 0.4, 'apple'],
[4.6, 3.6, 1.0, 0.2, 'apple'],
[5.1, 3.3, 1.7, 0.5, 'apple'],
[4.8, 3.4, 1.9, 0.2, 'apple'],
[5.0, 3.0, 1.6, 0.2, 'apple'],
[5.0, 3.4, 1.6, 0.4, 'apple'],
[5.2, 3.5, 1.5, 0.2, 'apple'],
[5.2, 3.4, 1.4, 0.2, 'apple'],
[4.7, 3.2, 1.6, 0.2, 'apple'],
[4.8, 3.1, 1.6, 0.2, 'apple'],
[5.4, 3.4, 1.5, 0.4, 'apple'],
[5.2, 4.1, 1.5, 0.1, 'apple'],
[5.5, 4.2, 1.4, 0.2, 'apple'],
[4.9, 3.1, 1.5, 0.1, 'apple'],
[5.0, 3.2, 1.2, 0.2, 'apple'],
[5.5, 3.5, 1.3, 0.2, 'apple'],
[4.9, 3.1, 1.5, 0.1, 'apple'],
[4.4, 3.0, 1.3, 0.2, 'apple'],
[5.1, 3.4, 1.5, 0.2, 'apple'],
[5.0, 3.5, 1.3, 0.3, 'apple'],
[4.5, 2.3, 1.3, 0.3, 'apple'],
[4.4, 3.2, 1.3, 0.2, 'apple'],
[5.0, 3.5, 1.6, 0.6, 'apple'],
[5.1, 3.8, 1.9, 0.4, 'apple'],
[4.8, 3.0, 1.4, 0.3, 'apple'],
[5.1, 3.8, 1.6, 0.2, 'apple'],
[4.6, 3.2, 1.4, 0.2, 'apple'],
[5.3, 3.7, 1.5, 0.2, 'apple'],
[5.0, 3.3, 1.4, 0.2, 'apple']]

测试集:

[5.0, 3.6, 1.4, 0.2]

算法步骤

  1. 计算距离: 使用欧氏距离计算测试样本与每个训练样本之间的距离。
  2. 寻找邻居: 找到与测试样本最近的k个邻居。
  3. 预测类别: 使用投票法预测测试样本的类别,即选择k个邻居中出现次数最多的类别。

代码实现

import math
from collections import Counter

# 计算欧氏距离
def euclidean_distance(instance1, instance2):
    distance = 0
    for i in range(len(instance1)-1):
        distance += pow((instance1[i] - instance2[i]), 2)
    return math.sqrt(distance)

# 获取最近的邻居
def get_neighbors(training_set, test_instance, k):
    distances = []
    for i in range(len(training_set)):
        dist = euclidean_distance(test_instance, training_set[i])
        distances.append((training_set[i], dist))
    distances.sort(key=lambda x: x[1])
    neighbors = []
    for i in range(k):
        neighbors.append(distances[i][0])
    return neighbors

# 预测类别
def predict_classification(neighbors):
    class_counter = Counter()
    for neighbor in neighbors:
        class_counter[neighbor[-1]] += 1
    return class_counter.most_common(1)[0][0]

# 主函数
def main():
    training_set = [[5.1, 3.5, 1.4, 0.2, 'apple'],
                    [4.9, 3.0, 1.4, 0.2, 'apple'],
                    [4.7, 3.2, 1.3, 0.2, 'apple'],
                    ...
                    [5.0, 3.3, 1.4, 0.2, 'apple']]
    test_instance = [5.0, 3.6, 1.4, 0.2]
    k = 3
    
    neighbors = get_neighbors(training_set, test_instance, k)
    prediction = predict_classification(neighbors)
    print('Predicted class:', prediction)

if __name__ == '__main__':
    main()

运行结果

运行以上代码将输出预测的类别,例如:

Predicted class: apple

总结

本教程展示了如何使用Python实现KNN分类算法,并以水果数据集为例进行演示。KNN是一种简单易懂的分类算法,可以用于各种数据分析和机器学习任务。

KNN分类算法Python实现:基于水果数据集的案例

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

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