python -- K最近鄰演算法
阿新 • • 發佈:2018-12-27
KNN核心演算法函式
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# fileName : KNNdistance.py
# author : [email protected]
import math
def getMaxLocate(target): # 查詢target中最大值的locate
maxValue = float("-inFinIty")
for i in range(len(target)):
if maxValue < target[i]:
maxValue = target[i]
flag = i
return flag
def KDistance(K, dest, source):
destlen = len(dest)
source1len = len(source[1])
sourcelen = len(source)
KNN = []
locate = source # 準備從source中剔除N-K個最大值
if destlen == source1len:
for i in range(sourcelen):
delta = 0
for j in range(source1len):# 畢達哥拉斯公式
delta += (dest[j] - source[i][j])*(dest[j] - source[i][j])
KNN.append(math.sqrt(delta))
for k in range(sourcelen, K, -1):
flag = getMaxLocate(KNN)
#print("%s 最大元素位置為%d" % (KNN, flag))
KNN.remove(KNN[flag]);
locate.remove(locate[flag])# 移除對應位置的元素
#print(locate)
return locate # 返回最終K個最接近的元素
else:
return None
假設你在伯克利開個小小的麵包店,每天都做新鮮麵包,需要根據如下一組特徵預測當天該烤多少條麵包:
a. 天氣指數1~5(1表示天氣很糟,5表示天氣非常好);
b. 是不是週末或節假日(週末或節假日為1,否則為0);
c. 有沒有活動(1表示有,0表示沒有)。
已知
historyA(5, 1, 0) = 300
historyB(3, 1, 1) = 225
historyC(1, 1, 0) = 75
historyD(4, 0, 1) = 200
historyE(4, 0, 0) = 150
historyF(2, 0, 0) = 50
迴歸:週末,天氣不錯
Now(4, 1, 0) = ?
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# fileName : KNNdistance.py
# author : [email protected]
if __name__ == "__main__":
history = {}
history[5, 1, 0] = 300
history[3, 1, 1] = 225
history[1, 1, 0] = 75
history[4, 0, 1] = 200
history[4, 0, 0] = 150
history[2, 0, 0] = 50
dest = [4, 1, 0]
source = []
for i in history:
source.append(i)
print(source)
from KNNdistance import KDistance
K = 4
locate = KDistance(K, dest, source)
avg = 0
for i in range(len(locate)):
avg+=history[locate[i]]
avg/=K
print("迴歸結果:今天應該烤%d個麵包" % round(avg))
KNN演算法:
- 建立分類系統
- 分類(分組),特徵抽取(得到相似程度)
- 迴歸,即預測數值
- KNN演算法真的是很有用,堪稱你進入神奇的機器學習領域的領路人!機器學習旨在讓計算機更聰明。你見過一個機器學習的例子:建立推薦系統。
- OCR指的是光學字元識別 (optical character recognition),這意味著你可拍攝印刷頁面的照片,計算機將自動識別出其中的文字。Google使用OCR來實現圖書數字化。
- 一般而言,OCR演算法提取線段、點和曲線等特徵。
- OCR中的特徵提取要複雜得多,但再複雜的技術也是基於KNN等簡單理念的。這些理念也可用於語音識別和人臉識別。你將照片上傳到Facebook時,它有時候能夠自動標出照片中的人物,這是機器學習在發揮作用!
- OCR的第一步是檢視大量的數字影象並提取特徵,這被稱為訓練(training)。大多數機器學習演算法都包含訓練的步驟:要讓計算機完成任務,必須先訓練它。
samples:
a. 垃圾郵件過濾器, 使用一種簡單演算法——樸素貝葉斯分類器(Naive Bayes classifier)
b. 預測股票市場, 使用機器學習來預測股票市場的漲跌真的很難。對於股票市場,如何挑選合適的特徵呢?股票昨天漲了,今天也會漲,這樣的特徵合適嗎?又或者每年五月份股票市場都以綠盤報收,這樣的預測可行嗎?在根據以往的資料來預測未來方面,沒有萬無一失的方法。未來很難預測,由於涉及的變數太多,這幾乎是不可能完成的任務。
conclude:
機器學習是個很有趣的領域,只要下定決心,你就能很深入地瞭解它.