python實(shí)現(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個(gè)最大值 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])# 移除對(duì)應(yīng)位置的元素 #print(locate) return locate # 返回最終K個(gè)最接近的元素 else: return None
假設(shè)你在伯克利開個(gè)小小的面包店,每天都做新鮮面包,需要根據(jù)如下一組特征預(yù)測(cè)當(dāng)天該烤多少條面包:
a. 天氣指數(shù)1~5(1表示天氣很糟,5表示天氣非常好);
b. 是不是周末或節(jié)假日(周末或節(jié)假日為1,否則為0);
c. 有沒有活動(dòng)(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
回歸:周末,天氣不錯(cuò)
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個(gè)面包" % round(avg))
KNN算法:
- 創(chuàng)建分類系統(tǒng)
- 分類(分組),特征抽取(得到相似程度)
- 回歸,即預(yù)測(cè)數(shù)值
- KNN算法真的是很有用,堪稱你進(jìn)入神奇的機(jī)器學(xué)習(xí)領(lǐng)域的領(lǐng)路人!機(jī)器學(xué)習(xí)旨在讓計(jì)算機(jī)更聰明。你見過(guò)一個(gè)機(jī)器學(xué)習(xí)的例子:創(chuàng)建推薦系統(tǒng)。
- OCR指的是光學(xué)字符識(shí)別 (optical character recognition),這意味著你可拍攝印刷頁(yè)面的照片,計(jì)算機(jī)將自動(dòng)識(shí)別出其中的文字。Google使用OCR來(lái)實(shí)現(xiàn)圖書數(shù)字化。
- 一般而言,OCR算法提取線段、點(diǎn)和曲線等特征。
- OCR中的特征提取要復(fù)雜得多,但再?gòu)?fù)雜的技術(shù)也是基于KNN等簡(jiǎn)單理念的。這些理念也可用于語(yǔ)音識(shí)別和人臉識(shí)別。你將照片上傳到Facebook時(shí),它有時(shí)候能夠自動(dòng)標(biāo)出照片中的人物,這是機(jī)器學(xué)習(xí)在發(fā)揮作用!
- OCR的第一步是查看大量的數(shù)字圖像并提取特征,這被稱為訓(xùn)練(training)。大多數(shù)機(jī)器學(xué)習(xí)算法都包含訓(xùn)練的步驟:要讓計(jì)算機(jī)完成任務(wù),必須先訓(xùn)練它。
samples:
a. 垃圾郵件過(guò)濾器, 使用一種簡(jiǎn)單算法——樸素貝葉斯分類器(Naive Bayes classifier)
b. 預(yù)測(cè)股票市場(chǎng), 使用機(jī)器學(xué)習(xí)來(lái)預(yù)測(cè)股票市場(chǎng)的漲跌真的很難。對(duì)于股票市場(chǎng),如何挑選合適的特征呢?股票昨天漲了,今天也會(huì)漲,這樣的特征合適嗎?又或者每年五月份股票市場(chǎng)都以綠盤報(bào)收,這樣的預(yù)測(cè)可行嗎?在根據(jù)以往的數(shù)據(jù)來(lái)預(yù)測(cè)未來(lái)方面,沒有萬(wàn)無(wú)一失的方法。未來(lái)很難預(yù)測(cè),由于涉及的變量太多,這幾乎是不可能完成的任務(wù)。
conclude:
機(jī)器學(xué)習(xí)是個(gè)很有趣的領(lǐng)域,只要下定決心,你就能很深入地了解它。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python tkinter制作用戶登錄界面的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了python tkinter制作用戶登錄界面的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python腳本實(shí)現(xiàn)自動(dòng)將數(shù)據(jù)庫(kù)備份到 Dropbox
本文給大家分享的是作者使用python腳本實(shí)現(xiàn)自動(dòng)備份mysql數(shù)據(jù)庫(kù)到的dropbox網(wǎng)盤的代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2017-02-02關(guān)于對(duì)python中self的深入理解
self代表類的實(shí)例,而非類,下面這篇文章主要給大家介紹了關(guān)于對(duì)python中self的深入理解,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09pycharm下查看python的變量類型和變量?jī)?nèi)容的方法
今天小編就為大家分享一篇pycharm下查看python的變量類型和變量?jī)?nèi)容的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python語(yǔ)言進(jìn)階知識(shí)點(diǎn)總結(jié)
在本文中我們給學(xué)習(xí)PYTHON的朋友們總結(jié)了關(guān)于進(jìn)階知識(shí)點(diǎn)的全部?jī)?nèi)容,希望我們整理的內(nèi)容能夠幫助到大家。2019-05-05Paddle模型性能分析工具Profiler定位瓶頸點(diǎn)優(yōu)化程序詳解
這篇文章主要為大家介紹了Paddle模型性能分析工具Profiler定位瓶頸點(diǎn)優(yōu)化程序詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03