国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python語言實現機器學習的K-近鄰算法

Python語言實現機器學習的K-近鄰算法

2020-07-15 10:04Python教程網 Python

今天學習的算法是KNN近鄰算法。KNN算法是一個監督學習分類器類別的算法。下面我們來詳細的探討下

寫在前面

額、、、最近開始學習機器學習嘛,網上找到一本關于機器學習的書籍,名字叫做《機器學習實戰》。很巧的是,這本書里的算法是用Python語言實現的,剛好之前我學過一些Python基礎知識,所以這本書對于我來說,無疑是雪中送炭啊。接下來,我還是給大家講講實際的東西吧。

什么是K-近鄰算法?

簡單的說,K-近鄰算法就是采用測量不同特征值之間的距離方法來進行分類。它的工作原理是:存在一個樣本數據集合,也稱作訓練樣本集,并且樣本集中每個數據都存在標簽,即我們知道樣本集中每一數據與所屬分類的對應關系,輸入沒有標簽的新數據之后,將新數據的每個特征與樣本集中數據對應的特征進行比較,然后算法提取出樣本集中特征最相似數據的分類標簽。一般來說,我們只選擇樣本數據集中前k個最相似的數據,這就是K-近鄰算法名稱的由來。

提問:親,你造K-近鄰算法是屬于監督學習還是無監督學習呢?

使用Python導入數據

從K-近鄰算法的工作原理中我們可以看出,要想實施這個算法來進行數據分類,我們手頭上得需要樣本數據,沒有樣本數據怎么建立分類函數呢。所以,我們第一步就是導入樣本數據集合。

建立名為kNN.py的模塊,寫入代碼:

?
1
2
3
4
5
6
7
from numpy import *
import operator
 
def createDataSet():
  group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
  labels = ['A','A','B','B']
  return group, labels

代碼中,我們需要導入Python的兩個模塊:科學計算包NumPy和運算符模塊。NumPy函數庫是Python開發環境的一個獨立模塊,大多數Python版本里沒有默認安裝NumPy函數庫,因此這里我們需要單獨安裝這個模塊。

下載地址:http://sourceforge.net/projects/numpy/files/

Python語言實現機器學習的K-近鄰算法

有很多的版本,這里我選擇的是numpy-1.7.0-win32-superpack-python2.7.exe。

實現K-近鄰算法

K-近鄰算法的具體思想如下:

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

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

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

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

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

Python語言實現K-近鄰算法的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# coding : utf-8
from numpy import *
import operator
import kNN
group, labels = kNN.createDataSet()
def classify(inX, dataSet, labels, k):
  dataSetSize = dataSet.shape[0]
  diffMat = tile(inX, (dataSetSize,1)) - dataSet
  sqDiffMat = diffMat**2
  sqDistances = sqDiffMat.sum(axis=1)
  distances = sqDistances**0.5
  sortedDistances = distances.argsort()
  classCount = {}
  for i in range(k):
    numOflabel = labels[sortedDistances[i]]
    classCount[numOflabel] = classCount.get(numOflabel,0) + 1
  sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1),reverse=True)
  return sortedClassCount[0][0]
my = classify([0,0], group, labels, 3)
print my

運算結果如下:

Python語言實現機器學習的K-近鄰算法

 輸出結果是B:說明我們新的數據([0,0])是屬于B類。

代碼詳解

相信有很多朋友們對上面這個代碼有很多不理解的地方,接下來,我重點講解幾個此函數的關鍵點,以方便讀者們和我自己回顧一下這個算法代碼。

classify函數的參數:

inX:用于分類的輸入向量
dataSet:訓練樣本集合
labels:標簽向量
k:K-近鄰算法中的k
shape:是array的屬性,描述一個多維數組的維度

tile(inX, (dataSetSize,1)):把inX二維數組化,dataSetSize表示生成數組后的行數,1表示列的倍數。整個這一行代碼表示前一個二維數組矩陣的每一個元素減去后一個數組對應的元素值,這樣就實現了矩陣之間的減法,簡單方便得不讓你佩服不行!

axis=1:參數等于1的時候,表示矩陣中行之間的數的求和,等于0的時候表示列之間數的求和。

argsort():對一個數組進行非降序排序

classCount.get(numOflabel,0) + 1:這一行代碼不得不說的確很精美啊。get():該方法是訪問字典項的方法,即訪問下標鍵為numOflabel的項,如果沒有這一項,那么初始值為0。然后把這一項的值加1。所以Python中實現這樣的操作就只需要一行代碼,實在是很簡潔高效。

后話

K-近鄰算法(KNN)原理以及代碼實現差不多就這樣了,接下來的任務就是更加熟悉它,爭取達到裸敲的地步。

以上所述上就是本文的全部內容了,希望大家能夠喜歡。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲国产精品久久久久秋霞蜜臀 | 亚洲 欧美 另类 综合 偷拍 | 97精品国产一区二区三区 | 天天射天天干 | 四虎免费在线播放 | 亚洲精品专区 | 瑟瑟视频网站 | 亚洲精品一区二三区不卡 | 欧美日韩在线免费观看 | 中文在线a在线 | 狠狠干天天干 | 日韩精品极品视频在线观看免费 | 中文字幕一区在线 | 中文字幕亚洲一区二区三区 | 亚洲一区中文字幕在线观看 | 欧美啪啪 | 久久国产99 | 懂色av一区二区三区免费观看 | 日韩一区精品视频 | 麻豆网址 | 成年网站视频 | 国产一区二区三区免费播放 | 色综合久久88色综合天天6 | 亚洲国产成人av好男人在线观看 | 福利在线观看 | av网站有哪些 | 欧美一级做a爰片久久高潮 免费在线毛片 | 久久噜噜噜精品国产亚洲综合 | 黄色片免费在线 | 欧美精品乱码久久久久久按摩 | 日本不卡免费新一二三区 | 日本丶国产丶欧美色综合 | 夜夜草av| 日本中文字幕在线电影 | 亚洲精品成人av | 欧美日韩不卡合集视频 | 色天天天天色 | 成人亚洲| 日韩av一区二区在线观看 | 国产精品视频专区 | 国产视频中文字幕 |