0
点赞
收藏
分享

微信扫一扫

knn算法学习记录2


knn算法学习记录2_python

import matplotlib.pyplot as plt
import numpy as np
x1=[3,2,1]
y1=[104,100,81]
x2=[101,99,98]
y2=[10,5,2]
plt.scatter(x1,y1,c='y',label="Romance")
plt.scatter(x2,y2,c="black",label="Action")
plt.legend(loc="best")
plt.show()

knn算法学习记录2_算法_02

import numpy as np;
#1、KNN算法第一步:收集数据

x_data = np.array([[3,104],
[2,100],
[1,81],
[101,10],
[99,5],
[98,2]])
print(x_data)
#x_data的行数代表样本点的个数,列数是特征数
y_data = ["Romance","Romance","Romance","Action","Action","Action"]
x_test = np.array([18,90])
print(x_test)

knn算法学习记录2_数组_03

#KNN算法第二步: 计算未知点到所有已知类别点的距离

x_dataSize = x_data.shape[0]
#shape图数读取矩阵的长度,返回的是一个元组,(行数,列数)
#print(x_data.shape)
#print(np.tile(x_test,(x_dataSize,1)))
diffMat = np.tile(x_test,(x_dataSize,1)) - x_data
#print(diffMat)
#tile函数实现数组的复制,np.tile(数组,(a, b))a函数的复制,b代表列数复制的次数
sqDiffMat = diffMat**2
#print(sqDiffMat)
sqDistance = sqDiffMat.sum(axis=1)
#print(sqDistance.sum(axis=0))
distance = np.sqrt(sqDistance)
print(distance)

#距离由小到大排序,argsort函数返回的是数组值从小到大的索引值

sortedDistance = distance.argsort()
print(sortedDistance)

knn算法学习记录2_算法_04

from operator import itemgetter

#4.找到距离未知类别点最近的K个点,根据少数服从多数的原则(标签出现的次数),决定类别(标签)
k=5
#不仅需要知道标签,而且需要知道标签出现的次数,key代表标签,value标签出现的次数

dict={}
for i in range(5):
votelable = y_data[sortedDistance[i]]
#字典里面添加元素dict[key]=value,三种:key:value, get方法,setdefault
dict[votelable] = dict.get(votelable,0)+1
#距离测试点最近的k个点的标签出现的次数
#未知类别点,归类到标签出现最多的标签
print(dict)
print(dict.items())
sortedDict = sorted(dict.items(),key=itemgetter(1),reverse=True)
print(sortedDict)
sortedDict[0][0]

knn算法学习记录2_数据_05



举报

相关推荐

0 条评论