K分類演算法

2021-08-13 18:14:26 字數 1848 閱讀 7951

很簡單,k分類用四個字來概括就是物以類聚,如果要再加四個字的話就是人以群分。

匯入訓練樣本集合(這個必須有)。每個樣本擁有乙個或多個已經確定好的特徵並且存在乙個確定的標籤(label)。

匯入測試樣本集合(knn已經開始啦~~),將樣本集合中的每乙個資料繼續抽象(想象)為多維座標系中的乙個點。

對樣本集合中的每乙個資料,計算其與訓練樣本中全部資料的距離。此處使用了我們初中時學過的座標系中兩點間的距離公式: d=

(x0−

y0)2

+(x1

−y1)

2+(x

2−y2

)2+.

..+(

xn−y

n)2−

−−−−

−−−−

−−−−

−−−−

−−−−

−−−−

−−−−

−−−−

−−−−

−−√

選擇k個(沒錯,就是k-classify的k)距離樣本資料最近的點,讀取它們的標籤,根據少數服從多數原則,確定樣本資料的標籤(label)。

以下是k分類演算法的python**

import numpy as np

#inputmatrix: 輸入的測試樣本集,dataset: 測試樣本集資料(無標籤),labels:測試樣本集標籤

defk_algorithm

(inputmatrix, dataset, labels, k):

datasetsize = dataset.shape[0]

distancemat = tile(inputmatrix, (datasetsize, 1)) - dataset

distance = (distancemat**2.sum(axis = 1))**0.5

distancesi = np.argsort(distance, axis = 0)

count = {}

for index in range(k):

label = labels[distancesi[i]]

count[label[0]] = count.get(labels[0], 0)+1

sortedresult = sorted(count.intms(), key = operator.itemgetter(1), reverse = true)

return sortedresult[0][0]

absolutely not,雖然現在我們已經有了k分類的結果,但是這個結果並不是最優解,由於k分類的結果基本上取決於那些在數值上較大的特徵值,例如:如果乙個特徵值為年齡,另乙個為薪水,那麼年齡的值一般來說會比薪水值小很多,也就很難影響到k分類的結果。所以,我們就要對k分類資料的各個特徵值進行歸一化計算,從而減少由於數值大小所帶來的影響。

歸一化過程:

選擇資料某一特徵的所有可能值,並得到這些可能值中的最大和最小值。

通過計算最大最小值的差得到取值區間。

用所有的可能值與最小值的差除以取值區間,得到歸一化之後的值。

歸一化的python實現

def

normalization

(dataset):

min = dataset.min(axis = 0)

max = dataset.max(axis = 0)

range = max - min

num = dataset.shape(0)

normdata = dataset - tile(min, (m, 1))

normdata = normdata/tile(range, (num,1))

return normdata

分類演算法 k近鄰演算法

k最近鄰 k nearest neighbor,knn 分類演算法,是乙個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。用官方的話來說,所謂k近鄰演算法,即是給定...

分類演算法 K 近鄰演算法

如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。兩個樣本的距離可以通過如下公式計算,又叫歐式距離 案例 from sklearn.datasets import load iris from sklearn.model selecti...

K近鄰(KNN) 分類演算法

k近鄰 knn 分類演算法 knn是non parametric分類器 不做分布形式的假設,直接從資料估計概率密度 是memory based learning.knn不適用於高維資料 curse of dimension machine learning的python庫很多,比如mlpy 更多pa...