1. 程式人生 > >CS231n-2017 Assignment1 k-近鄰方法、SVM、Softmax、兩層神經網路

CS231n-2017 Assignment1 k-近鄰方法、SVM、Softmax、兩層神經網路

一、k近鄰方法

1. 使用兩層迴圈計算距離矩陣

訓練資料X_train和測試資料X中每一行是一個樣本點。距離矩陣dists中每一行為X中的一點與X_train中各個點的距離。

k_nearest_neighbor檔案中的compute_distances_two_loops()函式:

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 tqdm(xrange(num_test)): for j in xrange(num_train): # TODO dists[i, j] = np.sqrt(np.sum((X[i] - self.X_train[j])**2)) return dists
2. 實現分類函式

使用numpy.argsort()獲取k近鄰,使用numpy.bincount()實現k近鄰的投票統計。

k_nearest_neighbor檔案中的predict_labels()函式:

def predict_labels
(self, dists, k=1): num_test = dists.shape[0] y_pred = np.zeros(num_test) indxRangeList = range(k) for i in xrange(num_test): closest_y = [] # TODO closest_y = self.y_train[np.argsort(dists[i])[:k]] # TODO y_pred[i] = np.argmax(np.bincount(closest_y)
) return y_pred
3. 使用一層迴圈計算距離矩陣

每次取出X中的一個點,計算其與X_train中各個點的距離。

這時就可看出使用矩陣中的一行代表一個樣本點的好處:按行進行索引後,取出的向量與另一個矩陣自動滿足numpy的廣播條件。

k_nearest_neighbor檔案中的compute_distances_one_loop()函式:

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 tqdm(xrange(num_test)):
        # TODO
        dists[i, :] = np.sqrt(np.sum((X[i] - self.X_train)**2, axis = 1))
    return dists 
4. 使用向量化方法計算距離矩陣(不使用迴圈)

假設點用行向量表示,先考慮計算兩個點 x \vec{x} y \vec{y} 的距離:

x y 2 = ( x y ) ( x y ) T = x x T 2 x y T + y y T = x 2 2 x y T + y 2 \|\vec{x} - \vec{y}\|^2 = (\vec{x}-\vec{y})\cdot(\vec{x}-\vec{y})^T = \vec{x}\vec{x}^T - 2\vec{x}\vec{y}^T + \vec{y}\vec{y}^T=\|\vec{x}\|^2 - 2\vec{x}\vec{y}^T + \|\vec{y}\|^2
若設兩個點集為:

X = [    x 1       x 2       x n    ] Y = [    y 1       y 2       y m    ] X = \left[ \begin{array}{c} -\,\, \vec{x}_1 \,\,-\\ -\,\, \vec{x}_2 \,\,-\\ \vdots \\ - \,\, \vec{x}_n \,\,- \end{array} \right] \quad Y = \left[ \begin{array}{c} -\,\, \vec{y}_1 \,\,-\\ -\,\, \vec{y}_2 \,\,-\\ \vdots \\ - \,\, \vec{y}_m \,\,- \end{array} \right]

x 2 \|\vec{x}\|^2 y 2 \|\vec{y}\|^2 分別可用 X X Y Y 的按行取模的值替代; x y T \vec{x}\vec{y}^T 可用 X Y T XY^T 替代。然後在計算距離矩陣時,與 X X 相關的沿列方向進行廣播,與 Y Y 相關的沿行方向進行廣播。

k_nearest_neighbor檔案中的compute_distances_no_loops()函式:

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)) 
    
    # TODO
    XY 
            
           

相關推薦

CS231n-2017 Assignment1 k-近鄰方法SVMSoftmax神經網路

一、k近鄰方法 1. 使用兩層迴圈計算距離矩陣 訓練資料X_train和測試資料X中每一行是一個樣本點。距離矩陣dists中每一行為X中的一點與X_train中各個點的距離。 k_nearest_neighbor檔案中的compute_distances_two_loops()

Python 實現感知器模型神經網路

python 3.4 因為使用了 numpy 這裡我們首先實現一個感知器模型來實現下面的對應關係 [[0,0,1], ——- 0 [0,1,1], ——- 1 [1,0,1], ——- 0 [1,1,1]] —

parzen窗方法k近鄰方法估計概率密度

機器學習實驗四,詳情請參考《模式分類》第二版第四章課後上機練習4.3、4.4節 實驗環境: Matlab2016a Parzen窗估計方法: 已知測試樣本資料x1,x2,…,xn,在不利用有關資料分佈的先驗知識,對資料分佈不附加任何假定的前提下,

非引數估計法之 parzen窗方法k近鄰方法估計概率密度

無論是引數估計還是費引數估計 其目的都是為了求出總體的概率密度函式parzen窗基本原理嗯哼哼 ,畫個圈圈 ,在圈圈裡面又畫一個正方形,在往圈圈裡面隨機扔豆豆,豆豆在正方形裡面的概率約等於在正方形內的總數k比豆豆總數n即k/n,其正好是正方形與圈圈的面積比,假設正方形的面積為

長短期記憶(LSTM)系列_LSTM的建模方法(2)——如何堆疊多LSTM網路

導讀: 堆疊式LSTM屬於深度學習,通過新增網路的深度,提高訓練的效率,獲得更高的準確性。 文中介紹了堆疊式LSTM的架構和實現方法 在堆疊式LSTM中,層與層的輸數出通過return_sequences = True引數修改成3D資料,以便供下一層網路使用。 為什麼要增加深度?

關於softmaxargmaxsoftargmax 關於softmaxargmaxsoftargmax

關於softmax、argmax、softargmax   在閱讀LIFT:Learned Invariant Feature Transform一文時,文中第1節提到為了保證端到端的可微性,利用softargmax來代替傳統的NMS(非極大值抑制)來挑選極值點位置。由於只瞭

cs231n的第一次作業2神經網路

一個小測試,測試寫的函式對不對 首先是初始化 input_size = 4 hidden_size = 10 num_classes = 3 num_inputs = 5 def init_toy_mode

79tensorflow計算一個五神經網路的正則化損失係數防止網路過擬合正則化的思想就是在損失函式中加入刻畫模型複雜程度的指標

''' Created on Apr 20, 2017 @author: P0079482 ''' import tensorflow as tf #獲取一層神經網路邊上的權重,並將這個權重的L2正

帶有xavier初始化dropout的多神經網路

#!/usr/bin/env python # -*- coding: utf-8 -*- # created by fhqplzj on 2017/07/07 下午3:22 import random import matplotlib.pyplot as plt im

【統計學習方法-李航-筆記總結】三k近鄰

本文是李航老師《統計學習方法》第三章的筆記,歡迎大佬巨佬們交流。 主要參考部落格:https://blog.csdn.net/u013358387/article/details/53327110 主要包括以下幾部分: 1. k近鄰演算法 2. k近鄰模型 3. kd樹 1.

數組索引的kdtree建立及簡明快速的k近鄰搜索方法

排除 訪問 count min 計算 ddl pri hid 提高 1. kdtree概念 kd樹(k-dimensional樹的簡稱),是一種分割k維數據空間的數據結構,主要應用於多維空間關鍵數據的搜索,如範圍搜索和最近鄰搜索。 如下圖所示,在既定的分割維度上,每一個根節

《統計學習方法》筆記三 k近鄰

學習 屬於 基本 mage 容易 向量 規則 統計學 圖片 k近鄰是一種基本分類與回歸方法,書中只討論分類情況。輸入為實例的特征向量,輸出為實例的類別。k值的選擇、距離度量及分類決策規則是k近鄰法的三個基本要素。 k近鄰算法 給定一個訓練數據集,對新的輸入實例,在訓練數

統計學習方法筆記(一):K近鄰法的實現:kd樹

  實現k近鄰演算法時,首要考慮的問題是如何對訓練資料進行快速的k近鄰搜尋。這點在特徵空間的維數大於訓練資料容量時尤為重要。 構造kd樹   kd 樹是一種對k為空間中的例項點進行儲存的一邊對其進行快速檢索的樹形資料結構。kd樹是二叉樹,表示對k維空間的一個劃分(parti

統計學習方法c++實現之二 k近鄰

統計學習方法c++實現之二 k近鄰演算法 前言 k近鄰演算法可以說概念上很簡單,即:“給定一個訓練資料集,對新的輸入例項,在訓練資料集中找到與這個例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入分為這個類。”其中我認為距離度量最關鍵,但是距離度量的方法也很簡單,最長用的就是歐氏距離,其他的距離

《統計學習方法(李航)》k近鄰 學習筆記

作者:jliang https://blog.csdn.net/jliang3   1.重點歸納 1)k近鄰是一種基本分類與迴歸方法,不具有顯式的學習過程。 2)模型由三個基本要素決定:距離度量、k值選擇和分類決策規則。 3)k近鄰法最簡單的實現方法是線性掃描,當

K近鄰(KNN)演算法KD樹及其python實現

1、k近鄰演算法 1.1 KNN基本思想 k近鄰法是基本且簡單的分類與迴歸方法,即對於輸入例項,依據給定的距離度量方式(歐式距離),以及選擇合適的k值(交叉驗證),在樣本集中找到最近鄰新例項的k個樣例,通過k個最近鄰樣例的類別表決出新例項的類別(多數表決)。

決策樹SVMAdaBoost方法的比較

- 選擇的演算法:決策樹、整合方法、支撐向量機 決策樹 模型在真實世界中也應用場景 在金融方面使用決策樹建模分析,用於評估使用者的信用、貸款違約率等;在電子商務中,可以根據使用者的以往的交易種類

SVM三種尋優方法matlab程式碼 grid searchGAPSO

function [bestCVaccuarcy,bestc,bestg,pso_option] = psoSVMcgForClass(train_label,train,pso_option)% psoSVMcgForClass%%% by faruto%Email:[email protecte

ML實驗:k-近鄰概率密度估計方法

一 實驗題目 二 演算法分析 程式碼: 2.1 load('data3.mat') n=size(w,1); px=zeros(n,1); s=150; cen=zeros(s,1); for i=1:s cen(i)=i*0.01; end

2python機器學習基礎教程——K近鄰演算法鳶尾花分類

一、第一個K近鄰演算法應用:鳶尾花分類 import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors