//2019.08.01下午
机器学习算法1——k近邻算法1、k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用。2、kNN机器学习算法具有以下的特点:(1)思想极度简单(2)应用的数学知识非常少(3)解决相关问题的效果非常好(4)可以解释机器学习算法使用过程中的很多细节问题(5)更加完整地刻画机器学习应用的流程其原理图如下:在所有的原有数据集基础上判断新的点的属性分类时,指定k的值,然后找到所有原始数据点中与其新输入需要判断的点的最近的k的点,然后根据这k个点的属性分类来确定新的点的属性。
图1 原始数据点
图2 新输入点的分布位置,指定k为3,即找到最近的三个点
4、KNN算法原理介绍及其训练学习代码实现:
import numpy as npimport 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 sqrtdistance=[]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=6n_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=cprint(y_predict)plt.show() #输出点的个数实现代码及其结果如下: