【案例】利用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個和回...