日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python算法的基本原理_kNN算法基本原理与Python代码实践

發布時間:2024/7/23 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python算法的基本原理_kNN算法基本原理与Python代码实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

kNN是一種常見的監督學習方法。工作機制簡單:給定測試樣本,基于某種距離度量找出訓練集中與其最靠近的k各訓練樣本,然后基于這k個“鄰居”的信息來進行預測,通常,在分類任務中可使用“投票法”,即選擇這k個樣本中出現最多的類別標記作為預測結果;在回歸任務中可以使用“平均法”,即將這k個樣本的實值輸出標記的平均值作為預測結果;還可以基于距離遠近進行加權平均或加權投票,距離越近的樣本權重越大。[1]

kNN的偽代碼如下:[2]

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

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

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

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

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

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

以下通過圖來進一步解釋:

假定要對紫色的點進行分類,現有紅綠藍三個類別。此處以k為7舉例,即找出到紫色距離最近的7個點。

分別找出到紫色距離最近的7個點后,我們將這七個點分別稱為1、2、3、4、5、6、7號小球。其中紅色的有1、3兩個小球,綠色有2、4、5、6四個小球,藍色有7這一個小球。

顯然,綠色小球的個數最多,則紫色小球應當歸為綠色小球一類。

以下給出利用kNN進行分類任務的最基本的代碼。

KNN.py文件內定義了kNN算法的主體部分

from numpy import *

import operator

def createDataSet():

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

labels = ['A', 'A', 'B', 'B']

return group, labels

def kNN_Classify(inX, dataSet, labels, k):

dataSetSize = dataSet.shape[0]

diffMat = tile(inX, (dataSetSize, 1)) - dataSet

#關于tile函數的用法

#>>> b=[1,3,5]

#>>> tile(b,[2,3])

#array([[1, 3, 5, 1, 3, 5, 1, 3, 5],

# [1, 3, 5, 1, 3, 5, 1, 3, 5]])

sqDiffMat = diffMat ** 2

sqDistances = sum(sqDiffMat, axis = 1)

distances = sqDistances ** 0.5# 算距離

sortedDistIndicies = argsort(distances)

#關于argsort函數的用法

#argsort函數返回的是數組值從小到大的索引值

#>>> x = np.array([3, 1, 2])

#>>> np.argsort(x)

#array([1, 2, 0])

classCount = {} # 定義一個字典

# 選擇k個最近鄰

for i in range(k):

voteLabel = labels[sortedDistIndicies[i]]

# 計算k個最近鄰中各類別出現的次數

classCount[voteLabel] = classCount.get(voteLabel, 0) + 1

# 返回出現次數最多的類別標簽

maxCount = 0

for key, value in classCount.items():

if value > maxCount:

maxCount = value

maxIndex = key

return maxIndex

KNN_TEST.py文件中有兩個樣例測試。

#!/usr/bin/python

# coding=utf-8

import KNN

from numpy import *

# 生成數據集和類別標簽

dataSet, labels = KNN.createDataSet()

# 定義一個未知類別的數據

testX = array([1.2, 1.0])

k = 3

# 調用分類函數對未知數據分類

outputLabel = KNN.kNN_Classify(testX, dataSet, labels, 3)

print("Your input is:", testX, "and classified to class: ", outputLabel)

testX = array([0.1, 0.3])

outputLabel = KNN.kNN_Classify(testX, dataSet, labels, 3)

print("Your input is:", testX, "and classified to class: ", outputLabel)

代碼輸出:

畫圖解釋一下輸出結果:

參考文獻:

[1]機器學習,周志華,清華大學出版社2016.

[2]機器學習實戰,Peter Harrington,人民郵電出版社.

2019-03-06

01:52:08

總結

以上是生活随笔為你收集整理的python算法的基本原理_kNN算法基本原理与Python代码实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。