導航:首頁 > 編程語言 > knn演算法matlab代碼

knn演算法matlab代碼

發布時間:2023-03-21 21:25:52

① R語言-KNN演算法

1、K最近鄰(k-NearestNeighbor,KNN)分類演算法,是一孝含個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。

2、KNN演算法中,所選擇的鄰居都是已經正確分類的對象。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。 KNN方法雖然從原理上也依賴於極限定理,但在類別決策時,只與極少量的相鄰樣本有關。由於KNN方法主要靠周圍有限的鄰近的樣本,而不簡大是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。

3、KNN演算法不僅可以用於分類,還可以用於回歸。通過找出一個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的權值(weight),如權值與距離成正比。

簡言之,就是將未標記的案例歸類為與它們最近相似的、帶有標記的案例所在的類 。

原理及舉例

工作原理:我們知道樣本集中每一個數據與所屬分類的對應關系,輸入沒有標簽的新數據後,將新數據與訓練集的數據對應特徵進行比較,找出「距離」最近的k(通常k<20)數據,選擇這k個數據中出現最多的分類作為新數據的分類。

演算法描述

1、計算已知數據集中的點與當前點的距離

2、按距離遞增次序排序

3、選取與當前數據點距離最近的K個點

4、確定前K個點所在類別出現的頻率

5、返回頻率最高的類別作為當前類別的預測巧咐笑

距離計算方法有"euclidean"(歐氏距離),」minkowski」(明科夫斯基距離), "maximum"(切比雪夫距離), "manhattan"(絕對值距離),"canberra"(蘭式距離), 或 "minkowski"(馬氏距離)等

Usage

knn(train, test, cl, k = 1, l = 0, prob =FALSE, use.all = TRUE)

Arguments

train

matrix or data frame of training set cases.

test

matrix or data frame of test set cases. A vector will  be interpreted as a row vector for a single case.

cl

factor of true classifications of training set

k

number of neighbours considered.

l

minimum vote for definite decision, otherwisedoubt. (More precisely, less thank-ldissenting votes are allowed, even

ifkis  increased by ties.)

prob

If this is true, the proportion of the votes for the

winning class are returned as attributeprob.

use.all

controls handling of ties. If true, all distances equal

to thekth largest are

included. If false, a random selection of distances equal to thekth is chosen to use exactlykneighbours.

kknn(formula = formula(train), train, test, na.action = na.omit(), k = 7, distance = 2, kernel = "optimal", ykernel = NULL, scale=TRUE, contrasts = c('unordered' = "contr.mmy", ordered = "contr.ordinal"))

參數:

formula                            A formula object.

train                                 Matrix or data frame of training set cases.

test                                   Matrix or data frame of test set cases.

na.action                         A function which indicates what should happen when the data contain 』NA』s.

k                                       Number of neighbors considered.

distance                          Parameter of Minkowski distance.

kernel                              Kernel to use. Possible choices are "rectangular" (which is standard unweighted knn), "triangular", "epanechnikov" (or beta(2,2)), "biweight" (or beta(3,3)), "triweight" (or beta(4,4)), "cos", "inv", "gaussian", "rank" and "optimal".

ykernel                            Window width of an y-kernel, especially for prediction of ordinal classes.

scale                                Logical, scale variable to have equal sd.

contrasts                         A vector containing the 』unordered』 and 』ordered』 contrasts to use

kknn的返回值如下:

fitted.values              Vector of predictions.

CL                              Matrix of classes of the k nearest neighbors.

W                                Matrix of weights of the k nearest neighbors.

D                                 Matrix of distances of the k nearest neighbors.

C                                 Matrix of indices of the k nearest neighbors.

prob                            Matrix of predicted class probabilities.

response                   Type of response variable, one of continuous, nominal or ordinal.

distance                     Parameter of Minkowski distance.

call                              The matched call.

terms                          The 』terms』 object used.

iris%>%ggvis(~Length,~Sepal.Width,fill=~Species)

library(kknn)
data(iris)

dim(iris)

m<-(dim(iris))[1]
val<-sample(1:m,size=round(m/3),replace=FALSE,prob=rep(1/m,m))

建立訓練數據集

data.train<-iris[-val,]

建立測試數據集

data.test<-iris[val,]

調用kknn  之前首先定義公式

formula : Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

iris.kknn<-kknn(Species~.,iris.train,iris.test,distance=1,kernel="triangular")

summary(iris.kknn)

# 獲取fitted.values

fit <- fitted(iris.kknn)

# 建立表格檢驗判類准確性

table(iris.valid$Species, fit)
# 繪畫散點圖,k-nearest neighbor用紅色高亮顯示

pcol <- as.character(as.numeric(iris.valid$Species))

pairs(iris.valid[1:4], pch = pcol, col = c("green3", "red")[(iris.valid$Species != fit)+1]

二、R語言knn演算法

install.packages("class")

library(class)

對於新的測試樣例基於距離相似度的法則,確定其K個最近的鄰居,在K個鄰居中少數服從多數

確定新測試樣例的類別

1、獲得數據

2、理解數據

對數據進行探索性分析,散點圖

如上例

3、確定問題類型,分類數據分析

4、機器學習演算法knn

5、數據處理,歸一化數據處理

normalize <- function(x){

num <- x - min(x)

denom <- max(x) - min(x)

return(num/denom)

}

iris_norm <-as.data.frame(lapply(iris[,1:4], normalize))

summary(iris_norm)

6、訓練集與測試集選取

一般按照3:1的比例選取

方法一、set.seed(1234)

ind <- sample(2,nrow(iris), replace=TRUE, prob=c(0.67, 0.33))

iris_train <-iris[ind==1, 1:4]

iris_test <-iris[ind==2, 1:4]

train_label <-iris[ind==1, 5]

test_label <-iris[ind==2, 5]

方法二、

ind<-sample(1:150,50)

iris_train<-iris[-ind,]

iris_test<-iris[ind,1:4]

iris_train<-iris[-ind,1:4]

train_label<-iris[-ind,5]

test_label<-iris[ind,5]

7、構建KNN模型

iris_pred<-knn(train=iris_train,test=iris_test,cl=train_label,k=3)

8、模型評價

交叉列聯表法

table(test_label,iris_pred)

實例二

數據集

http://archive.ics.uci.e/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data

導入數據

dir <-'http://archive.ics.uci.e/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data'wdbc.data <-read.csv(dir,header = F)

names(wdbc.data) <- c('ID','Diagnosis','radius_mean','texture_mean','perimeter_mean','area_mean','smoothness_mean','compactness_mean','concavity_mean','concave points_mean','symmetry_mean','fractal dimension_mean','radius_sd','texture_sd','perimeter_sd','area_sd','smoothness_sd','compactness_sd','concavity_sd','concave points_sd','symmetry_sd','fractal dimension_sd','radius_max_mean','texture_max_mean','perimeter_max_mean','area_max_mean','smoothness_max_mean','compactness_max_mean','concavity_max_mean','concave points_max_mean','symmetry_max_mean','fractal dimension_max_mean')

table(wdbc.data$Diagnosis)## M = malignant, B = benign

wdbc.data$Diagnosis <- factor(wdbc.data$Diagnosis,levels =c('B','M'),labels = c(B ='benign',M ='malignant'))

② 哪本書有講到knn演算法matlab

knnsearch(x,y,'k',5); 就表示在x中找y的最近的5個。返塵哪歲回結果 idx 是m行5列的矩陣,每一行派睜是結果中緩世最近的5個

③ 求k近鄰法實例,有的給我發一個,matlab程序。求高手啊!

大奎!哥來要分!
發個演算法吧,以免口舌,VS2008C#演算法代碼,剛學C#,代碼有些粗糙,絕對好使,想要全部代碼與本人聯系。呵呵~: )
public void knnsf(float PH,float JD,float NH4,float COD,float BOD,float SS,float XTD)
{
double[,] kn = new double[81, 2];
int a = 0, b = 0, c = 0;
//計算歐氏距離
for (int i = 0; i < 27; i++ )
{
kn[i, 0] = Math.Sqrt( Math.Pow(class1[i, 1] - PH, 2) + Math.Pow(class1[i, 2] - JD, 2) + Math.Pow(class1[i, 3] - NH4, 2) +
Math.Pow(class1[i, 4] - COD, 2) + Math.Pow(class1[i, 5] - BOD, 2) + Math.Pow(class1[i, 6] - SS, 2) +
Math.Pow(class1[i, 7] - XTD, 2));
kn[i, 1] = 1;

kn[i+27,0] = Math.Sqrt(Math.Pow(class2[i, 1] - PH, 2) + Math.Pow(class2[i, 2] - JD, 2) + Math.Pow(class2[i, 3] - NH4, 2) +
Math.Pow(class2[i, 4] - COD, 2) + Math.Pow(class2[i, 5] - BOD, 2) + Math.Pow(class2[i, 6] - SS, 2) +
Math.Pow(class2[i, 7] - XTD, 2));
kn[i+27, 1] = 2;

kn[i+54,0] = Math.Sqrt(Math.Pow(class3[i, 1] - PH, 2) + Math.Pow(class3[i, 2] - JD, 2) + Math.Pow(class3[i, 3] - NH4, 2) +
Math.Pow(class3[i, 4] - COD, 2) + Math.Pow(class3[i, 5] - BOD, 2) + Math.Pow(class3[i, 6] - SS, 2) +
Math.Pow(class3[i, 7] - XTD, 2));
kn[i+54, 1] = 3;
}

//選擇排序法
for (int i = 0; i < 81; i++ )
{
int k = 0;
double mintmp = kn[i, 0],clas=kn[i,1];
for (int j = i+1; j < 81; j++)
{
if (mintmp > kn[j, 0])
{
mintmp = kn[j, 0];
clas = kn[j, 1];
k = j;
}
}

kn[k, 0] = kn[i, 0];
kn[k, 1] = kn[i, 1];

kn[i, 0] = mintmp;
kn[i, 1] = clas;
}
//選擇K=30個近鄰
for (int k = 0; k < 3; k++)
{
if (kn[k, 1] == 1) a++;
if (kn[k, 1] == 2) b++;
if (kn[k, 1] == 3) c++;
}
//統計近鄰類別
if (a > b && a > c)
{
classes = 1;
}
if (b > a && b > c)
{
classes = 2;
}
if (c > b && c > a)
{
classes = 3;
}

}

④ KNN-分類演算法

KNN,K-NearestNeighbor,即K個最近的鄰居的意思。對於一個輸入樣本,用特徵上最接近它的K個臨近值大多數屬於的標簽來對它進行分類。KNN是最簡單的機器學習演算法之一,可以用於分類和回歸,是一種監督學習演算法。

具體實現過程如下:
①准備數據,對數據進行預處理

在已經分好類的情況下,我們需要對沒有分類的物品進行分類 。
②計算測試樣本點(也就是待分類點)到其他每個樣本點的距離。

其實就是計算(x1,y1)和(x2,y2)的距離。拓展到多維空間,則公式變成這晌岩樣:

k值是KNN演算法的一個參數,K的含義即參考」鄰居「標簽值的個數。
如含陪果當K的取值過小時,一旦有雜訊得成分存在們將會對預測產生比較大影響,例如取K值為1時,一旦最近的一個點是雜訊,那麼就會出現偏差,K值的減小就意味著整體模型變得復雜,容易發生過擬合;
如果K的值取的過大時,就相當於用較大鄰域中的訓練實例進行預測,學習的近似誤差會增大。這時與輸入目標點較遠實例也會對預測起作用,使預測發生錯誤。K值的增大就意味著整體的模型變得簡單;
如果K==N的時候,那麼就是取全部的實例,即為取實例中某分類下最多的點,就對預測沒有什麼實際的意義了
在劃分好數據集後,我們可以通過交叉驗證法來得到宴老御最佳的K值

優點:
1.無數據輸入假定,在分類完的情況下進行測試
2.預測精度高
3.對異常值不敏感
缺點:
1.時間復雜度和空間復雜度高,計算到每一個點的距離,計算量較大
2.當樣本不平衡的時候,比如一個類的樣本容量大,另一個類的樣本容量很小,對於測試識別的樣本來說,投票結果更容易靠近樣本容量大的類,從而導致分類錯誤

⑤ MATLAB中KNN均值濾波器代碼…… 作業,急!!求教大蝦

道德

⑥ knn最基本的Matlab模擬怎麼弄

准備條件:已經把特徵數據和樣本標號保存為文件
測試代碼為:
[plain]
view
plain
train_data=load('sample_feature.txt');
train_label=load('train_label.txt');
test_data=load('features.txt');
k=knnclassify(test_data,train_data,train_label,3,'cosine','random');
train_data保存的是訓練樣本特徵,要求是最能代表本類胡閉別的,不一定多,當然不能太少橡做戚;
train_label保存梁陵的是樣本標號,如0,1,2等等,隨便設置,只有能區分就行,具體格式可以為:
[plain]
view
plain
1
1
2
2
3
3
test_data測試文件保存的是測試數據的特徵;

⑦ KNN演算法,k近鄰

K最近鄰(k-Nearest Neighbour,KNN)分類演算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算回法之一。該方法的思路答是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。

⑧ 文本分類器(基於KNN演算法),語言最好是Matlab的,有測試數據集。。。。


好像這些演算法在數據缺失的情況下是沒法進行的吧,只能說改進之後在數據缺失情況下做了相應處理,你說的這些演算法都可以在網上找到代碼

閱讀全文

與knn演算法matlab代碼相關的資料

熱點內容
專題學習網站源碼 瀏覽:163
jsphead什麼 瀏覽:88
gps串口數據怎麼發送 瀏覽:968
win10文件主頁共享查看 瀏覽:411
中國聯通有哪些app是免流的 瀏覽:176
邊做邊保存的文件找不到了 瀏覽:858
win10照片應用文件夾名稱 瀏覽:966
編程如何解決資金的原子性 瀏覽:638
如何製作廣角鏡頭矯正文件 瀏覽:513
在網頁開發中應該選用哪個資料庫 瀏覽:742
iphone5移動卡貼 瀏覽:990
電腦文件的格式 瀏覽:127
extjs的xtype 瀏覽:959
suse11iso文件要u盤安裝 瀏覽:153
如何將報表統計數據轉化為圖形 瀏覽:444
如何寄快遞材料文件 瀏覽:265
java構造方法private 瀏覽:475
手機文件找回恢復 瀏覽:516
word怎麼把u盤里的文件拔掉 瀏覽:976
港版蘋果用的插排 瀏覽:1000

友情鏈接