python實現(xiàn)K最近鄰算法
KNN核心算法函數(shù),具體內(nèi)容如下
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# fileName : KNNdistance.py
# author : zoujiameng@aliyun.com.cn
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 # 準(zhǔn)備從source中剔除N-K個最大值
if destlen == source1len:
for i in range(sourcelen):
delta = 0
for j in range(source1len):# 畢達(dá)哥拉斯公式
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])# 移除對應(yīng)位置的元素
#print(locate)
return locate # 返回最終K個最接近的元素
else:
return None
假設(shè)你在伯克利開個小小的面包店,每天都做新鮮面包,需要根據(jù)如下一組特征預(yù)測當(dāng)天該烤多少條面包:
a. 天氣指數(shù)1~5(1表示天氣很糟,5表示天氣非常好);
b. 是不是周末或節(jié)假日(周末或節(jié)假日為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 : zoujiameng@aliyun.com.cn
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("回歸結(jié)果:今天應(yīng)該烤%d個面包" % round(avg))
KNN算法:
- 創(chuàng)建分類系統(tǒng)
- 分類(分組),特征抽取(得到相似程度)
- 回歸,即預(yù)測數(shù)值
- KNN算法真的是很有用,堪稱你進(jìn)入神奇的機(jī)器學(xué)習(xí)領(lǐng)域的領(lǐng)路人!機(jī)器學(xué)習(xí)旨在讓計算機(jī)更聰明。你見過一個機(jī)器學(xué)習(xí)的例子:創(chuàng)建推薦系統(tǒng)。
- OCR指的是光學(xué)字符識別 (optical character recognition),這意味著你可拍攝印刷頁面的照片,計算機(jī)將自動識別出其中的文字。Google使用OCR來實現(xiàn)圖書數(shù)字化。
- 一般而言,OCR算法提取線段、點和曲線等特征。
- OCR中的特征提取要復(fù)雜得多,但再復(fù)雜的技術(shù)也是基于KNN等簡單理念的。這些理念也可用于語音識別和人臉識別。你將照片上傳到Facebook時,它有時候能夠自動標(biāo)出照片中的人物,這是機(jī)器學(xué)習(xí)在發(fā)揮作用!
- OCR的第一步是查看大量的數(shù)字圖像并提取特征,這被稱為訓(xùn)練(training)。大多數(shù)機(jī)器學(xué)習(xí)算法都包含訓(xùn)練的步驟:要讓計算機(jī)完成任務(wù),必須先訓(xùn)練它。
samples:
a. 垃圾郵件過濾器, 使用一種簡單算法——樸素貝葉斯分類器(Naive Bayes classifier)
b. 預(yù)測股票市場, 使用機(jī)器學(xué)習(xí)來預(yù)測股票市場的漲跌真的很難。對于股票市場,如何挑選合適的特征呢?股票昨天漲了,今天也會漲,這樣的特征合適嗎?又或者每年五月份股票市場都以綠盤報收,這樣的預(yù)測可行嗎?在根據(jù)以往的數(shù)據(jù)來預(yù)測未來方面,沒有萬無一失的方法。未來很難預(yù)測,由于涉及的變量太多,這幾乎是不可能完成的任務(wù)。
conclude:
機(jī)器學(xué)習(xí)是個很有趣的領(lǐng)域,只要下定決心,你就能很深入地了解它。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python通過zlib實現(xiàn)壓縮與解壓字符串的方法
這篇文章主要介紹了python通過zlib實現(xiàn)壓縮與解壓字符串的方法,較為詳細(xì)的介紹了zlib的用法及使用zlib.compressobj和zlib.decompressobj對文件進(jìn)行壓縮解壓的方法,需要的朋友可以參考下2014-11-11
django+echart數(shù)據(jù)動態(tài)顯示的例子
今天小編就為大家分享一篇django+echart數(shù)據(jù)動態(tài)顯示的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python自動化測試ConfigParser模塊讀寫配置文件
本文主要介紹Python自動化測試,這里詳細(xì)說明了ConfigParser模塊讀寫配置文件,有興趣的小伙伴可以參考下2016-08-08

