第二章 K 近鄰演算法

2021-08-04 04:12:58 字數 2065 閱讀 1234

步驟:

1)收集資料

2)準備資料

3)分析資料

4)訓練資料

5)測試演算法

6)適用演算法

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

1)計算一直類別資料集中的點與當前點之間的距離

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

3)選取與當前點距離最小的k個點

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

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

knn.py檔案**

#coding:utf-8

from numpy import *;#引入科學計算包

import operator #引入科學計算包

#建立資料集

#dataset:訓練樣本集

#labels:標籤向量

defcreatedataset

(): group = array([[1.0,1.1],[1.0,1.0],[0.0,0.0],[0.0,0.1]])

labels = ['a','a','b','b']

return group, labels

classify.py檔案**

# -*- coding: utf-8 -*-

from numpy import * #引入科學計算包

import operator #引入科學計算包

#分類演算法核心

#inx:用於分類的輸入向量。即將對其進行分類。

#dataset:訓練樣本集

#labels:標籤向量

#k:選取的離當前點距離最短的點個數k

defclassify0

(inx, dataset,labels,k):

datasetsize = dataset.shape[0] #得到陣列的行數。即知道有幾個訓練資料

diffmat = tile(inx, (datasetsize, 1)) - dataset # tile:numpy中的函式。tile將原來的乙個陣列,擴充成了4個一樣的陣列。diffmat得到了目標與訓練數值之間的差值。

sqdiffmat = diffmat ** 2

# 各個元素分別平方

sqdistances = sqdiffmat.sum(axis=1) # 一位陣列相加,即得到了每乙個距離的平方

distances = sqdistances ** 0.5

# 開方,得到距離。

sorteddistindicies = distances.argsort() # 公升序排列返回對應的原始位置值

# 選擇距離最小的k個點。

classcount = {} #定義字典

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

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

#dict.get(key,defautnonereturnvalue)

# 排序

sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true) #第乙個屬性是字典迭代 key是定義比較的維度 比較第1維度的值大小 reverse是排序方式 false預設為生序排序 true為降序排序

return sortedclasscount[0][0] #返回目標標籤中和目標向量最近的k個值對應的標籤出現頻率最大的值作為**值

測試呼叫class2test.py檔案

import knn

import classify

group,labels = knn.createdataset()

inx =[0.0,0.0]

result = classify.classify0(inx,group,labels,2)

print result

機器學習實戰 第二章 K 近鄰演算法

本系列目的在於總結每乙個分類器的特點 優點 缺點 使用資料型別 使用時的注意事項等 相關 自己搜。python 建議使用2.7 python常用函式庫 numpy scikit learn等 python整合環境 anaconda 優點 1 對異常值不敏感 2 無資料輸入假設 缺點 1 計算複雜度高...

《機器學習實戰》第二章 k 近鄰演算法 筆記

在看這一章的書之前,在網上跟著博主jack cui的部落格學習過,非常推薦。python3 機器學習實戰 學習筆記 一 k 近鄰演算法 史詩級乾貨長文 講述的非常細緻,文字幽默有趣,演算法細節也講述的非常清楚,較書中而言還有sklearn調庫的補充內容。因此,在這裡,我只總結自己的筆記。2.k 近鄰...

第二章 演算法

本章內容了解即可。如果大家對資料結構完全不了解,我建議你先去看一下b站上郝斌老師的課程。演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的優先序列,並且每條指令表示乙個或多個操作。只聽資料結構課程,當然可以,但是聽完後你可能沒有什麼感覺,因為你不知道他是幹嘛的。但是如果配合演算法來講解,你就...