本題:根據接吻次數和打鬥次數來判斷電影的型別
k-近鄰演算法步驟如下
計算已知類別資料集中的點與當前點之間的距離;
按照距離遞增次序排序;
選取與當前點距離最小的k個點;
確定前k個點所在類別的出現頻率;
返回前k個點所出現頻率最高的類別作為當前點的**分類。
import numpy as np
import operator"""
函式說明:建立資料集
parameters:
無returns:
group - 資料集
labels - 分類標籤
modify:
2017-07-13"""
def createdataset(
): #四組二維特徵
group = np.array(
[[1,101],[5,89],[108,5],[115,8]])
#四組特徵的標籤
labels =
['愛情片','愛情片','動作片','動作片'
]return group, labels"""
函式說明:knn演算法,分類器
parameters:
inx - 用於分類的資料(測試集)
dataset - 用於訓練的資料(訓練集)
labes - 分類標籤
k - knn演算法引數,選擇距離最小的k個點
returns:
sortedclasscount[0][0] - 分類結果
modify:
2017-07-13"""
def classify0(inx, dataset, labels, k):
#計算出距離,np.sum(a,axis = 0)
#axis為0是壓縮行,即將每一列的元素相加,將矩陣壓縮為一行
#np.sum(a,axis = 1)
#axis為1是壓縮列,即將每一行的元素相加,將矩陣壓縮為一列
distances = np.sum((inx - dataset)**2, axis=1)**0.5
#返回distances中元素從小到大排序後的索引值,argsort()函式返回索引值
sorteddistindices = distances.argsort(
)#定乙個記錄類別次數的字典
classcount =
for i in range(k):
#取出前k個元素的類別,根據索引值到標籤中去尋找「愛情片or動作片」
voteilabel = labels[sorteddistindices[i]
]#dict.get(key,default=none),字典的get()方法,返回指定鍵的值,如果值不在字典中返回預設值。
#計算類別次數
classcount[voteilabel]
= classcount.get(voteilabel,0) + 1
#python3中用items()替換python2中的iteritems()
#key=operator.itemgetter(1)根據字典的值進行排序
#key=operator.itemgetter(0)根據字典的鍵進行排序
#reverse降序排序字典
sortedclasscount = sorted(classcount.items(
),key=operator.itemgetter(1),reverse=true)
#返回次數最多的類別,即所要分類的類別
return sortedclasscount[0]
[0]if __name__ ==
'__main__'
:#if __name__ == '__main__'的意思是:
# 當.py檔案被直接執行時,if __name__ == '__main__'之下的**塊將被執行;
# 當.py檔案以模組形式被匯入時,if __name__ == '__main__'之下的**塊不被執行。
#建立資料集
group, labels = createdataset(
)#測試集
test
=[101,20]
#knn分類
test_class = classify0(test, group, labels, 3)
#列印分類結果
print(test_class)
機器學習分類演算法(一)k NN分類演算法
k kk nn分類器是最簡單的機器學習分類演算法之一,它的基本思想是 從訓練樣本集中找出與測試樣本 距離 最近的k個樣本作為此測試樣本的 鄰居 然後根據這k個樣本的類別基於一定規則進行投票表決,最高的決定為測試樣本的 類別。用乙個詞來說就是 近朱者赤近墨者黑 由以上所述可以得知,k近鄰分類演算法主要...
python 機器學習KNN分類演算法
k近鄰演算法是機器學習中最簡單的演算法,其可以做最基本的分類操作,偽 如下 對未知類別屬性的資料集中的每個點依次執行以下操作 1 計算已知類別資料集中的每個點與當前點之間的距離 2 按照距離遞增次序排序 3 選怒與當前點距離最小的k個點 4 確定前k個點所在類別出現的頻率 5 返回前k個點出現頻率最...
機器學習 KNN分類演算法(上)
k近鄰演算法是機器學習演算法最簡單的演算法,流程如下 1 計算測試物件到訓練集中每個物件的距離 2 按照距離的遠近排序 3 選取與當前測試物件最近的k個物件,作為該測試物件的鄰居 4 統計這k個鄰居的類別頻率 5 k個鄰居裡頻率最高的類別,即為測試物件的類別 1 自實現knn演算法import nu...