K近鄰估計

2021-08-02 13:27:20 字數 2340 閱讀 8778

kn近鄰估計基本思想:預先確定n的某個函式kn,然後再x點周圍選擇乙個區域,調整區域體積大小,直至kn個樣本落入區域中。這些樣本被稱為點x的kn個最近鄰。

如果x點附近的密度比較高,則v的體積自然就相對較小,從而可以提公升分辨力;

如果x點附近的密度比較低,則v的體積就較大,但一進入高密度區就會停止增長。

固定樣本數kn,在x附近選取與之最近的kn個樣本,計算該kn個樣本的最小體積v。在x處的概率密度估計值為:

通常選擇:

乙個例子:

matlab實現:

kn_estimate.m

clc;

clear;

% 資料的均值向量

mu = [0; 1]';

% 協方差矩陣

s(:, :, 1) = 1;

s(:, :, 2) = 1;

p = [1/3 2/3];

% 樣本資料規模

n = 100;

knn = fix( sqrt(n) );

% 1.生成資料

randn('seed', 0);

[x] = generate_gauss_classes(mu, s, p, n);

% 待估計的概率密度函式

x = -5:0.1:5;

pdfx = (1/3)*(1/sqrt(2*pi*0.2))*exp(-.5*(x.^2)/0.2)+...

(2/3)*(1/sqrt(2*pi*0.2))*exp(-.5*((x-2).^2)/0.2);

figure();

hold on;

plot(x, pdfx, '-b');

% 使用knn估計方法

hold off;

xlabel(['n=', num2str(n), ', k=', num2str(knn)]);

legend('真實概率密度函式','knn估計密度函式','location','best');

% 取不同的n和k看估計的變化

range_n = [100, 1000, 10000];

range_k = fix( sqrt(range_n) );

figure();

k = 1;

for i=1:3

temp_n = range_n(i);

[temp_x] = generate_gauss_classes(mu, s, p, temp_n);

subplot(1,3,k);

grid on;

title(['n=', num2str(temp_n), ', k=', num2str(range_k(i))]);

k = k+1;

end

generate_gauss_classes.m(生成正態分佈資料)

function [ data, c ] = generate_gauss_classes( m, s, p, n )

%[~, c] = size(m);

data = ;

c = ;

for j = 1:c

% z = mvnrnd(mu,sigma,n);

% 產生多維正態隨機數,mu為期望向量,sigma為協方差矩陣,n為規模。

% fix 函式向零方向取整

t = mvnrnd(m(:,j), s(:,:,j), fix(p(j)*n))';

data = [data t];

c = [c ones(1, fix(p(j) * n)) * j];

endend

knn_density_estimate.m(k近鄰估計)

k 近鄰演算法

此文章參考機器學習實戰一書,具體的理論知識可以參考該書。本文的初衷只是為了做乙個複習,將學過的知識加以整理,其中不免有一定的錯誤。2.k 近鄰演算法的原理介紹 k 近鄰演算法通過測量不同的特徵值之間的距離進行分類。它的工作原理如下 存在乙個樣本的資料集合,也成為訓練樣本集合。並且樣本集中的每個資料都...

走進K近鄰

k最近鄰 k nearest neighbour,knn 分類演算法的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。k近鄰演算法的想法很簡單,類似於多數表決,關鍵點是參與多數表決的人是離你最近的k個人。給定乙個例項,首先從訓...

K 近鄰演算法

k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定 缺點 計算複雜度高 空間複雜度高 適用資料範圍 數值型和標稱型 工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入...