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