如何用Python编写KNN算法?

WBOY
发布: 2023-09-19 13:18:29
原创
1547人浏览过

如何用python编写knn算法?

如何用Python编写KNN算法?

KNN(K-Nearest Neighbors,K近邻算法)是一种简单而常用的分类算法。它的思想是通过测量不同样本之间的距离,将测试样本分类到最近的K个邻居中。本文将介绍如何使用Python编写并实现KNN算法,并提供具体的代码示例。

首先,我们需要准备一些数据。假设我们有一组二维的数据集,每个样本都有两个特征。我们将数据集分为两个类别,并在二维平面上绘制出来。代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(0)
X1 = np.random.randn(100, 2) + np.array([0, 2])
X2 = np.random.randn(100, 2) + np.array([2, 0])
X = np.vstack((X1, X2))
y = np.hstack((np.zeros(100), np.ones(100)))

# 绘制数据集
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()
登录后复制

接下来,我们需要编写KNN算法的实现代码。首先,我们定义一个函数来计算两个样本之间的欧氏距离(Euclidean Distance)。代码如下:

立即学习Python免费学习笔记(深入)”;

法语写作助手
法语写作助手

法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

法语写作助手 31
查看详情 法语写作助手
def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2)**2))
登录后复制

然后,我们编写一个函数来预测一个测试样本的类别。该函数首先计算测试样本与所有训练样本之间的距离,然后选择距离最近的K个样本,并根据这K个邻居的类别进行投票,最后返回得票最多的类别作为预测结果。代码如下:

def knn_predict(X_train, y_train, x_test, k):
    distances = [euclidean_distance(x_test, x) for x in X_train]
    k_indices = np.argsort(distances)[:k]
    k_nearest_labels = [y_train[i] for i in k_indices]
    return np.argmax(np.bincount(k_nearest_labels))
登录后复制

最后,我们将数据集划分为训练集和测试集,并使用KNN算法进行预测。代码如下:

from sklearn.model_selection import train_test_split

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 对每个测试样本进行预测
predictions = [knn_predict(X_train, y_train, x_test, k=3) for x_test in X_test]

# 计算准确率
accuracy = np.mean(predictions == y_test)
print("Accuracy:", accuracy)
登录后复制

通过以上代码示例,我们完成了KNN算法的编写。可以看到,使用Python实现KNN算法相对简单,而且代码量较少。在实际应用中,我们可以根据具体问题调整K值,以达到最佳的分类效果。

总结起来,本文介绍了如何使用Python编写KNN算法,包括数据准备、欧氏距离计算、算法实现和准确率计算等步骤。希望本文能对读者理解和应用KNN算法有所帮助。

以上就是如何用Python编写KNN算法?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号