機器學習之KNN演算法

2021-07-08 12:53:05 字數 2780 閱讀 7258

在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。

knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。

1.knn的應用

客戶流失**、欺詐偵測等(更適合於稀有事件的分類問題)

2.優缺點

- 優點:這是乙個簡單有效的演算法,易於理解,易於實現;

- 缺點:必須儲存全部資料集,如果訓練集過大,消耗大量的儲存空間,對每個資料計算距離值,實際使用很耗時。

3.距離計算方式

-歐式距離

-夾角余弦(適合文字分析)

-曼哈頓距離

-切比雪夫距離

4.演算法實現

對未知類別屬性的資料集中的每個點依次執行以下操作:

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

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

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

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

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

乙個簡單的例子,用python語言實現knn演算法,資料與後面將要寫的其他演算法使用一樣的資料。

訓練資料

tid house   marriage    income  borrower

1 yes single 125

k no

2 no married 100

k no

3 no single 70

k no

4 yes married 120

k no

5 no divorced 95

k yes

6 no married 60

k no

7 yes divorced 220

k no

8 no single 85

k yes

9 no married 75

k no

10 no single 90

k yes

測試資料

tid house   marriage    income

test no married 120

k

準備資料

def

loaddataset_train

(path_read):

df = pd.read_csv(path_read, sep='\t', header=0, dtype=str, na_filter=false)

group = np.array(np.matrix(df[['house','marriage','income']]))

label = np.array(np.matrix(df["borrower"]))

y = np.zeros(group.shape)

y[group=='yes']=1

y[group=='married']=1

y[group=='divorced']=2

for i in group[:,2]:

y[group==i]=i[0:-1]

#print(i[0:-1])

labels=['no', 'no', 'no', 'no', 'yes', 'no', 'no', 'yes', 'no', 'yes']

return y,labels

defloaddataset_test

(path):

df = pd.read_csv(path, sep='\t', header=0, dtype=str, na_filter=false)

group = np.array(np.matrix(df[['house','marriage','income']]))

return group

資料分類,參考機器學習**

def

classify

(inx,dataset,label,k):

datasetsize = dataset.shape[0]

diffmat = np.tile(inx, (datasetsize,1)) - dataset

sqdiffmat = diffmat ** 2

sqdistance = sqdiffmat.sum(axis=1)

distance = sqdistance ** 0.5

sorteddistindicies = distance.argsort()

classcount={}

for i in range(k):

voteilabel = label[sorteddistindicies[i]]

classcount[voteilabel] = classcount.get(voteilabel,0) + 1

sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)

return sortedclasscount[0][0]

選取不同的k值發現對結果的影響還是很大的,訓練資料畢竟很少。這只是方便理解演算法,簡單的實現,後面還會繼續學習機器學習其他的演算法,**嘗試著自己寫一寫,之前沒使用過python語言,也對機器學習了解甚少,只在研究生階段開始學習,**以及其他地方不及之處,希望大家多多交流。

機器學習演算法之KNN

物以類聚 人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。inpu...

機器學習之kNN演算法

knn原理及實踐 1 演算法介紹 總的來說,機器學習入門的第乙個演算法是k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...

機器學習之KNN演算法

如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn是一種非常古老而且簡單的分類方法 a a1,a2,a3 b b1,b2,b3 兩點的歐式距離是 因為計算的特徵值的平方,所以計算前需要先進行特徵處理 sklearn.neighbo...