ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

KNN算法--python实现

2020-02-27 13:07:05  阅读:264  来源: 互联网

标签:KNN plt python color 算法 train np import scatter


1.KNN算法作为分类的算法,也被成为k近邻算法。
2.KNN算法的核心思想是新增一个样本在特征空间中,k个最近的样本大多数是 一类的,那么这个样本也属于这一类。
在这里插入图片描述
这里我们利用欧拉公式计算样本间的距离。
在这里插入图片描述

import math

import numpy as np

from sklearn import datasets
import matplotlib.pyplot as plt

raw_data_X = [[3.393533211, 2.331273381],
              [3.110073483, 1.781539638],
              [1.343808831, 3.368360954],
              [3.582294042, 4.679179110],
              [2.280362439, 2.866990263],
              [7.423436942, 4.696522875],
              [5.745051997, 3.533989803],
              [9.172168622, 2.511101045],
              [7.792783481, 3.424088941],
              [7.939820817, 0.791637231]
             ]
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

X_train = np.array(raw_data_X)
y_train = np.array(raw_data_y)


首先,我们将建立数据,然后将数据转换成numpy数组。

plt.scatter(X_train[y_train == 0,0],X_train[y_train == 0,1],color = 'g')
plt.scatter(X_train[y_train == 1,0],X_train[y_train == 1,1],color = 'r')
plt.show()

然后利用matplotlib画出相应的散点图。
在这里插入图片描述
然后,插入一个新的点。

x = np.array([8.093607318, 3.365731514])

plt.scatter(X_train[y_train == 0,0],X_train[y_train == 0,1],color = 'g')
plt.scatter(X_train[y_train == 1,0],X_train[y_train == 1,1],color = 'r')
plt.scatter(x[0],x[1],color = 'b')
plt.show()

在这里插入图片描述
利用欧拉距离公式,判定新的点,为哪一类。
我们将最近的六个点的距离组为判定依据。

distances = []

for x_train in X_train:
    d = sqrt(np.sum((x_train - x)**2))
    distances.append(d)

nearest = np.argsort(distance)

c = [y_train[k] for k in nearest[:6]]

输出c为:
在这里插入图片描述
可知,将新的数据点判定为1.
如果数据点多的话,也可利用collections.

from collections import Counter

vote = Counter(c)
vote.most_common()

输出为
在这里插入图片描述

喜欢你的小小叔 发布了2 篇原创文章 · 获赞 0 · 访问量 49 私信 关注

标签:KNN,plt,python,color,算法,train,np,import,scatter
来源: https://blog.csdn.net/qq_45779388/article/details/104532401

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有