knn原理及借助電影分類實現knn算法


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)

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM