knn算法python代码_k-近邻算法python代码实现(非常全)

1、k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用。它是一种经典简单的分类算法,当然也可以用来解决回归问题。

2、kNN机器学习算法具有以下的特点:

(1)思想极度简单

(2)应用的数学知识非常少

(3)解决相关问题的效果非常好

(4)可以解释机器学习算法使用过程中的很多细节问题

(5)更加完整地刻画机器学习应用的流程

3、KNN算法pyhton代码实现如下:

(1)解决分类问题的代码如下:

#1-1输入任意的自定义数据集来进行相关的验证

import numpy as np

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]

print(raw_data_X)

print(raw_data_Y)

x_train=np.array(raw_data_X)

y_train=np.array(raw_data_Y) #数据的预处理,需要将其先转换为矩阵,并且作为训练数据集

print(x_train)

print(y_train)

plt.figure(1)

plt.scatter(x_train[y_train==0,1],x_train[y_train==0,0],color="g")

plt.scatter(x_train[y_train==1,0],x_train[y_train==1,1],color="r") #将其散点图输出

x=np.array([8.093607318,3.365731514]) #定义一个新的点,需要判断它到底属于哪一类数据类型

plt.scatter(x[0],x[1],color="b") #在算点图上输出这个散点,看它在整体散点图的分布情况

#kNN机器算法的使用

from math import sqrt

distance=[]

for x_train in x_train:

d=sqrt(np.sum((x_train-x)**2))

distance.append(d)

print(distance)

d1=np.argsort(distance) #输出distance排序的索引值

print(d1)

k=6

n_k=[y_train[(d1[i])] for i in range(0,k)]

print(n_k)

from collections import Counter #导入Counter模块

c=Counter(n_k).most_common(1)[0][0] #Counter模块用来输出一个列表中元素的个数,输出的形式为列表,其里面的元素为不同的元组

#另外的话对于Counter模块它有.most_common(x)可以输出统计数字出现最多的前x个元组,其中元组的key是其元素值,后面的值是出现次数

y_predict=c

print(y_predict)

plt.show() #输出点的个数

#在scikitlearn中调用KNN算法的操作步骤

from sklearn.neighbors import KNeighborsClassifier

KNN_classifier=KNeighborsClassifier(n_neighbors=6)

raw_data_X=[[3.393533211,2.331273381],

[3.110073483,1.781539638],

[1.343808831,3.368360954],

[3.582294042,4.679179110],

[2.280362439,2.86699026

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值