1. 程式人生 > >【cs231n學習筆記(2017)】——— KNN

【cs231n學習筆記(2017)】——— KNN

好久沒寫部落格了,最近有點忙,然後自己也有點懶。。。。。。
最近確定自己要搞計算機視覺方向,然後就開始看斯坦福的cs231n課程,準備寫系列部落格記錄自己的學習過程及心得。
———————————–————以下是正文——————————————————–

KNN(K-鄰近演算法)

L1 distance: 曼哈頓距離

表示式

d1(I1,I2)=p|I1pI2p|
示例:(自己簡單畫的,略潦草)這裡寫圖片描述
python實現:
import numpy as np


class KNN_L1:
    def __init__(self)
:
pass def train(self, x, y): self.x_train = x self.y_train = y def predict(self, x): num_test = x.shape[0] Ypred = np.zeros(num_test, dtype=self.y_train.dtype) # 求和 distances = np.sum(np.abs(self.x_train-x[i, :]), axis=1) # 求最小索引
min_index = np.argmin(distances) # 排序 Ypred[i] = self.y_train[min_index] return Ypred
L2 distance: 歐式距離

表示式

d2(I1,I2)=p(I1pI2p)2
示例
這裡寫圖片描述
python程式碼實現
import numpy as np


class KNN_L2:

    def __init__(self):
        pass
def train(self,X,y): self.X_train=X self.y_train=y def predict(self,X,k=1,num_loops=0): if num_loops==0: dists=self.compute_distances_no_loops(X) elif num_loops==1: dists=self.compute_distances_one_loops(X) elif num_loops==2: dists=self.compute_distances_one_loops(X) return self.predict_labels(dists,k=k) #雙重迴圈 def compute_distances_two_loops(self,X): num_test=X.shape[0] num_train=self.X_train.shape[0] dists=np.zeros((num_test,num_train)) for i in range(num_test): for j in range(num_train): dists[i,j]=np.sqrt(np.sum(X[i,:]-self.X_train[j,:])**2)) return dists # 一層迴圈 def compute_distances_one_loop(self, X): num_test = X.shape[0] num_train = self.X_train.shape[0] dists = np.zeros((num_test, num_train)) for i in range(num_test): dists[i, :] = np.sqrt(np.sum(np.square(self.X_train - X[i, :]), axis=1)) return dists #無迴圈 def compute_distances_no_loops(self, X): num_test = X.shape[0] num_train = self.X_train.shape[0] dists = np.zeros((num_test, num_train)) test_sum = np.sum(np.square(X), axis=1) train_sum = np.sum(np.square(self.X_train), axis=1) inner_product = np.dot(X, self.X_train.T) dists = np.sqrt(-2 * inner_product + test_sum.reshape(-1, 1) + train_sum) return dists def predict_labels(self, dists, k=1): # 2 num_test = dists.shape[0] y_pred = np.zeros(num_test) for i in range(num_test): closest_y = [] y_indicies = np.argsort(dists[i, :], axis=0) closest_y = self.y_train[y_indicies[: k]] y_pred[i] = np.argmax(np.bincount(closest_y)) return y_pred

L1與L2區別

1.L1與座標軸有關,會隨著座標軸改變而改變,L2不會隨著座標軸的改變而改變
2.L1適用於某個有重要意義的特徵向量,L2適用於某個空間通用量,不知道其實際意義

相關推薦

cs231n學習筆記2017——— KNN

好久沒寫部落格了,最近有點忙,然後自己也有點懶。。。。。。 最近確定自己要搞計算機視覺方向,然後就開始看斯坦福的cs231n課程,準備寫系列部落格記錄自己的學習過程及心得。 ———————————–

web框架zheng學習筆記阿里雲自定義映象的使用

要想成功執行zheng專案,必須要安裝JDK,Tomcat,Redis,Zookeeper等工具,如果下次再買新的伺服器,又重新安裝這些軟體,阿里雲提供了自定義映象功能,可以快速複製伺服器,免除了再次配置環境的痛苦。 背景: 華東2區有原來的A伺服器,在華北3區新購了B伺服器,想要把A的系統

web框架zheng學習筆記本地環境搭建

zheng專案是一個非常值得學習的web開發框架,在碼雲的web開發框架排名第一。特此記錄下學習過程。 zheng的簡介吧:https://gitee.com/shuzheng/zheng。 zheng是基於Spring+SpringMVC+Mybatis分散式敏捷開發系統架構,提供整套公共

TensorFlow學習筆記利用Anaconda安裝TensorFlowwindows系統

1.安裝Anaconda Anaconda官網 由於檔案很大,所以下載速度會很慢,可以採用映象下載 下載完之後,如果你的電腦系統時win8+,一定要以管理員身份執行安裝包。 有一個地方需要注意下: 第一個勾是是否把Anaconda加入環境變數,這涉及到

python學習筆記2指令碼報錯"AttributeError: 'module' object has no attribute 'xxx'"解決方法

最近在編寫Python指令碼過程中遇到一個問題比較奇怪:Python指令碼完全正常沒問題,但執行總報錯"AttributeError: 'module' object has no attribute 'xxx'"。這其實是.pyc檔案存在問題。 問題定位: 檢視imp

EOS學習筆記linux下的C++程式設計師的春天,附EOS環境安裝詳細步驟

在參加了4月28日柏鏈道捷組織的EOS沙龍後,對linux下c/c++程式設計師來說,彷彿深夜裡點亮了一盞明燈,EOS在6月份主網上線,目前智慧合約只能使用c/c++編寫,門檻不低,而且需要使用很多unix命令,這個對linux程式設計師來說簡直就是量身打造的!      學

web框架 Cloud-Admin學習筆記ace-gate閘道器

Cloud-Admin專案裡的api閘道器專案是ace-gate,採用的是Spring Cloud Gateway元件,對外提供一個統一的api入口,並實現了api鑑權的功能。 從前端專案的配置裡可以看到,所有的api請求首先都轉到localhost:8765閘道器伺服器  

web框架 Cloud-Admin學習筆記前後端分離的釋出配置

因為spirng前後端分離設計,釋出流程略有不同,前後端單獨釋出,通過nginx整合 1、前端專案打包 #轉到前端專案根目錄 cd D:\001\myProject\GitHub\AG-Admin-v2-UI # 構建生成環境 cnpm run build:prod 然後等待伺服

web框架 Cloud-Admin學習筆記環境搭建

Cloud-Admin是目前比較流行的基於Spring Cloud的web框架. 碼雲下載地址: https://gitee.com/minull/ace-security 1、用git也可直接下載,(也可直接下載解壓安裝)   2、用idea開啟專案 file-

DirectX11學習筆記2開始畫圖

可程式設計渲染管線 概述:渲染管線就是用來建立虛擬攝像機看到的2d影象的設定步驟。它包含以下幾個階段 1. Input Assembler (IA) Stage 2. Vertex Shader (VS) Stage 3. Hull Shader (HS) Sta

DirectX11學習筆記3修改三角形顏色

本章內容主要是關於如何修改我們的著色器,頂點結構,包括輸入佈局(layout) 賦值給每個頂點的顏色,最終會在整個三角形上進行插值。 Effects File 在fx檔案中我們建立了頂點和畫素著色器。   首先我們在檔案裡建立一個新的結構體,這個結構體是VS的返回型別

phaser.js學習筆記3開發H5遊戲“穿越小行星”並適配微信小遊戲

這篇筆記主要記錄使用phaser.js開發一個完整HTML5遊戲的整個過程,並將web端程式適配到微信小遊戲。  1、遊戲基本架構由於phaser社群目前僅有phaser2對微信小程式的支援,因此我選擇phaser v2.6.2作為遊戲的引擎。為便於開發除錯,以單獨的phas

phaser.js學習筆記1使用phaser.js製作遊戲

phaser.js是一款開源的HTML5遊戲框架,GitHub主頁上star超過了2萬。phaser.js支援使用JavaScript或TypeScript編寫遊戲,支援WebGL和Canvas渲染並可藉助第三方工具編譯成iOS,Android原生程式。phaser.js有兩

vtk.js學習筆記2繪製紋理深度圖

在vtk.js學習筆記(1)中搭建好了vtk.js的開發環境,並繪製了一個圓錐,這篇筆記將通過繪製一個帶深度資訊的紋理圖繼續學習vtk.js,實際效果如下圖所示。1、通過vtkElevationReader實現帶深度資訊的紋理對映import vtkTexture from

CS231n 學習筆記1 Image CLassification

eight function 分享 便是 數據驅動 rain 分類問題 很難 特征 圖像分類是計算機視覺中的一項核心任務,那麽什麽是圖像分類? 例如,給你一個標簽集,其中包括(貓、狗、鳥、卡車、飛機...等) 然後給你一張圖片,那麽這張圖片屬於哪個類別呢?這就是一個分類

cs231n學習筆記圖像分類

根據 stanford nbsp 學習筆記 cif 線性分類 這一 差異 測距 圖像分類可說是計算機視覺中的基礎任務同時也是核心任務,做好分類可為檢測,分割等高階任務打好基礎。 本節課主要講了兩個內容,K近鄰和線性分類器,都是以貓的分類為例。 一.  K近鄰 以貓的分

斯坦福cs231n學習筆記11------神經網路訓練細節梯度下降演算法大總結/SGD/Momentum/AdaGrad/RMSProp/Adam/牛頓法

神經網路訓練細節系列筆記: 通過學習,我們知道,因為訓練神經網路有個過程: <1>Sample 獲得一批資料; <2>Forward 通過計算圖前向傳播,獲得loss; <3>Backprop 反向傳播計算梯度,這

斯坦福大學深度學習公開課cs231n學習筆記10卷積神經網路

前記:20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用於區域性敏感和方向選擇的神經元時,發現其獨特的網路結構可以有效地降低反饋神經網路的複雜性,繼而提出了卷積神經網路(Convolutio

Stanford cs231n 學習筆記2SVM、Loss Function、Optimization

##Loss Function ###什麼是損失函式,損失函式的意義 應用於Supervised Learning Algorithms 中,用於衡量所學習的模型對待預測的輸入樣本的預測能力。 ###損失函式的構成 -只考慮資料上的損失: L = 1/N * sigma_i L_

Stanford cs231n 學習筆記1Linear Model

##非引數化學習(資料驅動型學習)和引數化學習 ###資料驅動型學習 整個學習演算法依賴的是訓練集中的資料樣本。典型代表:KNN。即通過對比帶預測樣本與訓練集中的樣本的“距離”或者某種度量,來實現分類的功能。在這種演算法中,每次的樣本預測是依賴和訓練集中樣本的比對得到的,可以理解為並沒有一個