實現《統計學習方法》p39 例3.1
輸入:資料集,例項x,k值,以及計算距離的方法
輸出:距離最近的k個資料,以及最近距離
首先定義三種計算距離的方法:歐氏距離,曼哈頓距離,以及各個座標值的最大值
對傳入的例項x,計算再不同的距離計算方法下的最近距離,及對應的最近的座標值
import numpy as np
import math
x = np.array([[5,1],[4,4],[2,1],[3,3],[4,5],[7,2]])
xx = [1,1]
def euclidean_distance(xi,yi):
"""歐式距離計算
:param xi:
:param yi:
:return:
"""sum_distance = 0
for i in range(len(xi)):
sum_distance += pow(abs(xi[i] - yi[i]) , 2)
return math.sqrt(sum_distance)
def manhattan_distance(xi,yi):
"""曼哈頓距離
:param xi:
:param yi:
:return:
"""sum_distance = 0
for i in range(len(xi)):
sum_distance += abs(xi[i] - yi[i])
return sum_distance
def max_distance(xi,yi):
"""各個座標距離的最大值
:param xi:
:param yi:
:return:
"""sum_distance = 0
for i in range(len(xi)):
sum_distance = max(sum_distance , abs(xi[i] - yi[i]))
return sum_distance
def nearest_neighbr(xx , x , k , functin):
nearest_dict = {}
max_list =
nearest_list =
for i in range(len(x)):
distance = functin(xx,x[i])
if distance not in nearest_dict:
nearest_dict[distance] = [x[i].tolist()]
else:
max_list.sort()
for i in max_list[:k]:
nearest_list += [z for z in nearest_dict[i]]
return max_list[:k] , nearest_list[:k]
e , e_list = nearest_neighbr(xx , x , 2 , euclidean_distance)
m , m_list = nearest_neighbr(xx , x , 2 , manhattan_distance)
ma , ma_list = nearest_neighbr(xx , x , 2 , max_distance)
print(e)
print(e_list)
print(m)
print(m_list)
print(ma)
print(ma_list)
當後期需要實現knn分類時
可將最近k個樣本點的label值,取多數原則,對x例項進行類別劃分即可
手寫實現bind
bind 方法會建立乙個新函式。當這個新函式被呼叫時,bind 的第乙個引數將作為它執行時的 this,之後的一串行引數將會在傳遞的實參前傳入作為它的引數。來自於 mdn 由此我們可以首先得出 bind 函式的兩個特點 返回乙個函式 可以傳入引數 返回函式的模擬實現 從第乙個特點開始,我們舉個例子 ...
python手寫實現進度條
哈哈哈,我們平時都經常見到python的進度條,安裝pip包的時候,更新的時候,呼叫第三方庫的時候,但是很少有人試過自己實現,今天來了興趣就自己寫一套哈哈哈 使用print for i in range 0,101,2 print r i,end flush true time.sleep 0.1 ...
手寫實現RPC 框架
乙個簡易的rpc框架,別的先不多說上github github gitee 註冊中心 zookeeper 使用curator 操作 通訊框架 netty 4.1.25版本 序列化 kryo 以下只寫了大體專案流程,以及展示部分 具體上方github 裡基本都寫了注釋 本rpc框架,有乙個統一的 框架...