1. 程式人生 > >自己實現的簡易的knn算法

自己實現的簡易的knn算法

http plt mage sort 循環 數據 .so tin image

程序代碼:

import csv
import random
import operator
import math
import matplotlib.pyplot as plt

#計算距離的函數
def getdistance(testIntance,trainInstance):

    length=len(testIntance)
    distance=0
    # 這個循環只能取到數字
    for i in range(length):
        testInstance1=float(testInstance[i])
        trainInstance1=float(trainInstance[i])
        distance+=(pow((testInstance1-trainInstance1),2))
    # print(distance)
    return math.sqrt(distance)

#讀文件
with open(r‘b.txt‘,‘rt‘) as f:
    lines=csv.reader(f)
    dataSet=list(lines)

#測試點
testInstance=[5,5]

distances=[]
for i in range(len(dataSet)):
    dist=getdistance(testInstance,dataSet[i])
    distances.append((dataSet[i],dist))
# 到這裏的distances是帶有坐標和各個點與待測點距離的列表了
# print(distances)
# 這裏采用尋找離他最近的4個樣本,然後統計
# 排序操作
distances.sort(key=operator.itemgetter(1))

# 對排序後的前k個值進行種類統計na
tj={}
for i in range(5):
    result=distances[i][0][2]
    if result in tj:
        tj[result]+=1
    else:
        tj[result]=1
print(tj)
# 把字典中統計的結果拿來比較,去統計數大的作為結果

for key in tj:
    if tjresult==None:
        tjresult=key

    if tj[key]>tj[tjresult]:
        tjresult=key
    print(tjresult)
print(tjresult)

數據樣式:
技術分享圖片

自己實現的簡易的knn算法