人工智能 - K近邻分类算法的Python实现
KNN算法
KNN的全称是K Nearest Neighbors。K个最近邻居,K的取值肯定是至关重要的。 KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。
举个例子:
如果K=3,绿色圆将被分类为红色三角形。
如果K=5,绿色圆被分类为蓝色四方形类。
欧拉距离计算方程:
实验
处理txt文件容易读取,所以这里是选择txt文件。如:
代码:
import math
# global k
# k = int(input("输入k "))
def solve(s1,p):
tran = open("iris-data-training.txt")
t = tran.readlines()
disty = []
for j in t:
t1 = j.rstrip().split("\t") # 每个训练花的数据
sum = 0
for l in range(4):
sum += pow(float(t1[l]) - float(s1[l]), 2)
dis = math.sqrt(sum)
disty.append((dis, int(t1[4])))
res = sorted(disty, key=lambda disty: disty[0])
typec = [0, 0, 0, 0]
for n in range(p):
typec[res[n][1]] += 1
return typec.index(max(typec))
def main(ko):
with open("iris-data-testing.txt") as test:
s = test.readlines()
count = 0
for i in s:
s1 = i.rstrip().split("\t") # 每个测试花的数据
tpye = solve(s1,ko) # 返回投票后类型
if (tpye == int(s1[4])):
count += 1
print("k值为{},正确率为:{}".format(ko,float(count / 31)))
ans = float(count / 31)
vatr.append((ko,ans))
aes = sorted(vatr, key=lambda vatr: vatr[1])
if(ko == 120):
print("k为{}时,正确率最高为{}".format(aes[119][0],aes[119][1]))
if __name__ == "__main__":
vatr = []
for i in range(1,121):
main(i)
结果:
输出了1–120的k值,发现49时正确率最高即识别出正确结果。
注释掉的代码也可以手动输入K值计算正确率,但是没有输出全部的k值及结果更加明显。