1、實驗目的
掌握了解knn演算法,運用演算法對資料點進行**
2、實驗內容
進行實驗前,要了解什麼是knn,以及knn的作用和用法,knn是一種基本的機器學習演算法,構建模型只用儲存訓練資料集即可,最主要考慮的是其近鄰數。
此次實驗的要求在於通過自己編寫knn演算法,在不呼叫任何方法的情況下編寫**。
3、實驗**
import random
from sklearn.datasets import load_iris
iris_dataset=load_iris()
def test(a,b,data,label):
listmin= #儲存各個測試資料與樣本資料的最小距離
list1=#儲存所有近鄰距離
list2=#儲存listmin用來排序查詢
listknn=#儲存n近鄰的n各最短距離
num=#儲存最短距離下標
result1=0
result2=0
result3=0
for j in range(len(data)): #計算最短距離度量,並儲存在陣列中
list1=
for i in range(1,b+1):
c=abs(a[0]-data[j][0])**i+abs(a[1]-data[j][1])**i+abs(a[2]-data[j][2])**i+abs(a[3]-data[j][3])**i
d=round((pow(c,1/i)),3)#保留三位小數
list2.extend(listmin)#建立乙個新的陣列用來運算
list2.sort()
for i in range(b): #找尋陣列中與目標點距離最短的n個點,進行記錄,並且進行**
for j in range(len(listmin)):
if list2[i]==listmin[j]:
if(label[listmin.index(listmin[j])]==0):
result1+=1
elif(label[listmin.index(listmin[j])]==1):
result2+=1
else:
result3+=1
if (result1>result2 and result1>result3):
n=0elif(result2>result1 and result2>result3):
n=1else:
n=2print("目標點為:{},當模型設為{}近鄰時,與目標點最近的點是{},距離為:{},**標籤為:{}".format(a,b,(list(data[num[i]] for i in range(len(num)))),listknn,n))
data=iris_dataset['data']
#data=[[1.0,2.0],[1.2,0.1],[0.1,0.4],[0.3,3.5],[1.5,2.3],[1.1,0.7],[0.6,0.9],[0.2,1.5]]
label=iris_dataset['target']
a=[random.uniform(1,8) for i in range(4)]
print("測試資料為:{}".format(a))
knn=int(input("請輸入近鄰:"))
test(a,knn,data,label)
4、執行結果
5、經驗總結
因為knn演算法在機器學習中屬於較簡單的演算法,所以此次**的目的在於通過自己的理解以及思維來編寫乙個knn演算法,在理解之餘還要加深對演算法的昇華。
此次實驗的困難在於理解knn演算法後不是太明白如何將其變為平常語句來形容,所以此次我編寫的**有些冗長,大部分**也是根據自己的理解來編寫,最主要的還是通過歐氏距離公式以及數**算來完成**。
因為機器學習的難度還是較大,理解的東西也比較多,後面的時間還需繼續加強學習。
csdn:
6、參考資料
張亮(譯).python機器學習基礎教程.人民郵電出版社.2019.6
董付國.python程式設計(第二版).清華大學出版社.2019.3
李航.統計學習方法.清華大學出版社.2012
部落格:
KNN演算法原理與自實現
1.計算已知類別資料集中的點與當前點之間的距離 2.按照距離遞增次序排序 3.選擇與當前距離最小的k個點 4.確定前k個點所在類別的出現概率 5.返回前k個點出現頻率最高的類別作為當前點的 分類 距離計算 param v1 第乙個點的位置 param v2 第二個點的位置 return distan...
自寫 求全排列 新演算法 遞迴實現
演算法思想從根本上區別於網 上的諸多方法,思想基於把用來儲存一組數形成的所有序列的二維陣列看成乙個表 每個排列都是豎著放的,看著順眼 而使用遞迴進行了類似於把表從上到下一行一行的填滿,有幾個數就有幾層遞迴 每層有多個遞迴 這次關鍵乙個遞迴函式 只有30左右行 但從構思到寫 到除錯完成,花了將近一天半...
KNN演算法 鄰近演算法
knn演算法是機器學習裡面比較簡單的乙個分類演算法了,整體思想比較簡單 計算乙個點a與其他所有點之間的距離,取出與該點最近的k個點,然後統計這k個點裡面所屬分模擬例最大的,則點a屬於該分類。這樣講可能還有點迷糊,下面用乙個例子來說明一下 電影名稱 打鬥次數 接吻次數 電影型別 california ...