zoukankan      html  css  js  c++  java
  • 【StatLearn】统计学习中knn算法的实验(1)

    Problem:

    1. Develop a k-NN classifier with Euclidean distance and simple voting
    2. Perform 5-fold cross validation, find out which k performs the best (in terms of accuracy)
    3. Use PCA to reduce the dimensionality to 6, then perform 2) again. Does PCA improve the accuracy
    问题:
    1. 设计一个采用欧式距离的的knn分类器
    2. 应用5-fold进行交叉验证,寻找出最好的k值(从准确度考虑)
    3. 使用PCA进行降维操作,将维数降至6维,这样应用PCA之后准确率有改善吗?

    开发的knn算法通过计算TestData中每一个观察点和TrainningData中的观察点的距离,得到k个最近距离的索引,然后统计其中频次最高的Class,并将这个Class作为该TestData的Class值。

    knn算法的Matlab源代码:

     

    function [OutputClass] = myKNN(TestData,TrainningData,Group,K)
    [M,N] = size(TrainningData);
    [R,C] = size(TestData);
    OutputClass=[];
    for i=1:R
       diff=TrainningData-repmat(TestData(i,:),M,1);
       dist=diff.*diff;
       [DistSort,Index]=sort(sum(dist,2),'descend');
       N=hist(Group(Index(1:K),:),3);%histgram of class
       [MaxClassSort,MaxSort]=sort(N,'descend');
        %MaxSort
       MaxClass=MaxSort(1);
       OutputClass(end+1)=MaxClass;
    end
    OutputClass=OutputClass';
    save('knn.mat');
    

    通过观察PCA处理之后的特征值,发现只有6个特征值不为0,这样采用PCA降维的方法实现的将源数据13维降为6维之后没有损失能量,所以最后直接进行KNN分类的结果和采用PCA分类的结果是一致的,数据处理的难度却下降了。并且当K=1的时候准确率最高。

    MaxAccuracy= 0.7525 when k=1 (KNN&PCA+KNN)

    PCA算法处理之后的特征值

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    99202

    173

    9

    5

    1

    1

    0

    0

    0

    ……



  • 相关阅读:
    3.6_分类性能评估
    3.5_逻辑回归案例分析
    3.4_分类算法之逻辑回归
    3.3_朴素贝叶斯
    3.2_k-近邻算法案例分析
    3.1_分类算法之k-近邻
    sklearn的estimator
    2.3_模型和交叉检验
    NYOJ 211 Cow Contest (弗洛伊德+传递闭包 )
    NYOJ 42 一笔画问题 (并查集+欧拉回路 )
  • 原文地址:https://www.cnblogs.com/riskyer/p/3400141.html
Copyright © 2011-2022 走看看