KNN 算法分類電影類型


需求:怎樣用KNN算法來分類電影是動作片還是愛情片。

分類標准:統計電影中打斗鏡頭和接吻鏡頭的次數

'''

KNN算法:
1.計算測試數據於訓練數據之間的距離
2.按照距離的遠近排序(距離由近到遠)
3.選取距離最近的K個點
4.統計K個點分別對應類別出現的概率
5.概率最高的就是測試數據類別

通過計算對象間距離來作為各個對象之間的非相似性指標,避免了對象之間的匹配問題
KNN通過依據k個對象中占優的類別進行決策,而不是單一的對象類別決策


'''

KNN算法:
1.計算測試數據於訓練數據之間的距離
2.按照距離的遠近排序(距離由近到遠)
3.選取距離最近的K個點
4.統計K個點分別對應類別出現的概率
5.概率最高的就是測試數據類別

通過計算對象間距離來作為各個對象之間的非相似性指標,避免了對象之間的匹配問題
KNN通過依據k個對象中占優的類別進行決策,而不是單一的對象類別決策



'''
import numpy as np

# 構建數據
def creatDataSet():
# 喜劇片 科幻片 愛情片 動作片
group = np.array([[3,10,23,114],
[2,5,23,160],
[1,9,8,154],
[101,10,12,11],
[99,5,7,8,],
[98,2,10,5],
[4,99,14,10],
[6,100,11,23],
[9,100,1,1],
[1,4,99,3],
[4,5,78,6],
[1,4,88,9]])
labels = ["動作片","動作片","動作片","喜劇片","喜劇片","喜劇片","科幻片","科幻片","科幻片","愛情片","愛情片","愛情片"]
return group, labels

def classify(input, dataSet, labels, k):
# 獲得樣本的行數
dataSize = dataSet.shape[0]
print(dataSet.shape[0])
# 利用歐式距離公式計算距離
# nump.tile() 就是把數組沿各個方向復制
print(input)
kdiff = np.tile(input, (dataSize, 1)) - dataSet
sqdiff = kdiff**2
# 行向量分別相加,從而得到新的一個行向量
sqnumdiff = np.sum(sqdiff, axis=1)
dist = sqnumdiff**0.5
# 將距離進行排序
soreDistIndex = np.argsort(dist)
classCount = {}
for i in range(k):
print(soreDistIndex[i])
voteLabel = labels[soreDistIndex[i]]
print(voteLabel)
# 對選取的K個樣本所屬的類別個數進行統計
classCount[voteLabel] = classCount.get(voteLabel, 0) + 1
# 選取出現的類別次數最多的類別
maxCount = 0
for key, value in classCount.items():
if value > maxCount:
maxCount = value
classes = key

return classes

if __name__ == "__main__":
dataSet, labels = creatDataSet()
# 測試數據
input = np.array([9,90,500,4])
k = 3
output = classify(input, dataSet, labels, k)
print("測試數據為:", input, "分類結果為:", output)



免責聲明!

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



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