機器學習 k近鄰演算法(分類電影)

2021-09-28 19:26:34 字數 3149 閱讀 7001

【案例】利用k近鄰演算法判斷電影類別。

假設有如下資料,判斷新電影(打鬥鏡頭24,接吻鏡頭67)應該屬於愛情片還是動作片。

繪製圖表如下:

k-近鄰演算法步驟如下:

(1) 計算已知類別資料集中的點與當前點之間的距離;

(2) 按照距離遞增次序排序;

(3) 選取與當前點距離最小的k個點;

(4) 確定前k個點所在類別的出現頻率;

(5) 返回前k個點出現頻率最高的類別作為當前點的**類別。

演算法實現:

演算法步驟:

1.構建已經分類好的原始資料集。

2.計算已知類別資料集中的點與當前點之間的距離。

3.將距離公升序排列,然後選取距離最小的k個點。

4.確定前k個點所在類別的出現頻率。

5.選擇頻率最高的類別作為當前點的**類別。

**:

import pandas as pd

# 1.構建已經分類好的原始資料集

rowdata =

movie_data = pd.dataframe(rowdata)

# print(movie_data)

# 2.計算已知類別資料集中的點與當前點之間的距離

new_data = [24, 67]

delta = (((movie_data.iloc[:6, 1:3] - new_data) ** 2).sum(1)) ** 0.5 # sum(1):按行相加

# print(delta)

'''delta:

0 41.048752

1 29.068884

2 32.310989

3 104.403065

4 105.394497

5 108.452755

dtype: float64

'''delta_list = list(delta)

# print(delta_list)

# [41.048751503547585, 29.068883707497267, 32.31098884280702, 104.4030650891055, 105.39449701004318, 108.45275469069469]

# 3.將距離公升序排列,然後選取距離最小的k個點

k = 4

dist_l = pd.dataframe()

dr = dist_l.sort_values(by='dist')[:k]

# print(dr)

''' dist labels

1 29.068884 愛情片

2 32.310989 愛情片

0 41.048752 愛情片

3 104.403065 動作片

'''# 4.確定前k個點所在類別的出現頻率

res = dr.loc[:, 'labels'].value_counts()

# print(res)

'''愛情片 3

動作片 1

name: labels, dtype: int64

'''# 5.選擇頻率最高的類別作為當前點的**類別

result =

print(result) # ['愛情片']

將分類方法提取成乙個函式:

'''

函式功能:knn分類器

引數說明:

new_data:需要**分類的資料集

dataset:已知分類標籤的資料集(訓練集)

k:k-近鄰演算法引數,選擇距離最小的k個點

返回:result:分類結果

'''def classify0(inx, dataset, k):

result = # 用於存放結果

dist = list((((dataset.iloc[:, 1:3] - inx) ** 2).sum(1)) ** 0.5) # 計算該點與其他所有點的距離

dist_l = pd.dataframe()

dr = dist_l.sort_values(by='dist')[: k] # 根據dist值對距離進行排序,取最小的k個值

re = dr.loc[:, 'labels'].value_counts()

return result

完整的**:

import pandas as pd

rowdata =

movie_data = pd.dataframe(rowdata)

new_data = [24, 67]

''' 函式功能:knn分類器

引數說明:

new_data:需要**分類的資料集

dataset:已知分類標籤的資料集(訓練集)

k:k-近鄰演算法引數,選擇距離最小的k個點

返回:result:分類結果

'''def classify0(inx, dataset, k):

result = # 用於存放結果

dist = list((((dataset.iloc[:, 1:3] - inx) ** 2).sum(1)) ** 0.5) # 計算該點與其他所有點的距離

dist_l = pd.dataframe()

dr = dist_l.sort_values(by='dist')[: k] # 根據dist值對距離進行排序,取最小的k個值

re = dr.loc[:, 'labels'].value_counts()

return result

if __name__ == "__main__":

inx = new_data

dataset = movie_data

k = 3

print(classify0(inx, dataset, k))

機器學習 分類演算法 K 近鄰演算法06

k最近鄰 k nearest neighbor,knn 分類演算法,是乙個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是 在特徵空間中,如果乙個樣本附近的k個最近 即特徵空間中最鄰近 樣本的大多數屬於某乙個類別,則該樣本也屬於這個類別。我們對應上面的流程來說 1.給定了紅色和藍...

k近鄰法 電影分類

import math movie data 測試樣本 唐人街探案 23,3,17,片 下面為求與資料集中所有資料的距離 x 23,3,17 knn for key,v in movie data.items d math.sqrt x 0 v 0 2 x 1 v 1 2 x 2 v 2 2 輸出所...

《機器學習實戰》 k近鄰分類演算法kNN

knn全稱為k nearest neighbors,是模式識別中比較簡單的一種演算法,可以用於分類和回歸。使用時,輸入的訓練樣本帶有標籤,輸出根據是用於分類還是回歸 分類問題的輸出為 找出k個和要 物件最近鄰的樣本,這k個樣本中,大多數 屬於哪一類即為 物件的分類標籤。回歸問題的輸出為 找出k個和回...