KNN最近鄰算法原理
KNN英文全稱K-nearst neighbor,中文名稱為K近鄰算法,它是由Cover和Hart在1968年提出來的
KNN算法原理:
1. 計算已知類別數據集中的點與當前點之間的距離;
2. 按照距離遞增次序排序;
3. 選擇與當前距離最小的k個點;
4. 確定前k個點所在類別的出現概率
5. 返回前k個點出現頻率最高的類別作為當前點的預測分類
如果數據集中序號1-12為已知的電影分類,分為喜劇片、動作片、愛情片三個種類,使用的特征值分別為搞笑鏡頭、打斗鏡頭、擁抱鏡頭的數量。那么來了一部新電影《唐人街探案》,它屬於上述3個電影分類中的哪個類型?

代碼實現如下
import pandas as pd import numpy as np def distance(v1, v2): """ 距離計算 :param v1:點1 :param v2: 點2 :return: 距離 """ dist = np.sqrt(np.sum(np.power((v1 - v2), 2))) return dist # 加載數據 data = pd.read_excel("./電影分類數據.xlsx") print("data:\n", data) print("*" * 80) # 獲取訓練集 train = data.iloc[:, :6] print("train:\n", train) # 獲取訓練集的特征值 與目標值 train_x = train.iloc[:, :-1] train_y = train.iloc[:, -1] # 獲取測試集 print("*" * 80) test = data.columns[-4:] print("test:\n", test) # 進行計算距離 # 循環計算訓練集每一個樣本與測試集的距離 for i in range(train.shape[0]): # 計算距離 dist = distance(train_x.iloc[i,2:5],test[1:]) train.loc[i,'dist'] = dist print(train) # 對距離按照升序進行排序 train.sort_values(by='dist',inplace=True) print("*" * 80) print("排序后的train:\n",train) # 確定K 值 k值不同結果不同 k =5 res = train.loc[:,'電影類型'][:k].mode()[0] print("*" * 80) print(res)