zoukankan      html  css  js  c++  java
  • Knn算法C++实现

    相对简单的模拟。C++11

    /* ***********************************************
    Author        :guanjun
    Created Time  :2016/6/20 18:22:32
    File Name     :1.cpp
    ************************************************ */
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <stdio.h>
    #include <algorithm>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <fstream>
    #define maxn 10010
    using namespace std;
    
    int k;
    struct node{
        double x1,x2,x3,x4,x5;
        string s;
    }nod[maxn];
    pair<double,string>p[maxn];
    map<string,int>mp;
    
    ifstream fin;
    int input(string s){
        fin.open(s);
        if(!fin){
            cout<<"can not open the file "<<s<<endl;
            exit(1);
        }
        int i=1;
        while(fin>>nod[i].x1>>nod[i].x2>>nod[i].x3>>nod[i].x4>>nod[i].x5>>nod[i].s){
            nod[i].x1*=100.0;nod[i].x2*=100.0;nod[i].x3*=100.0;nod[i].x4*=100.0;nod[i].x5*=100.0;
            i++;
        }
        return i;
    }
    double mul(double x,double y){
        return (x-y)*(x-y);
    }
    double dis(node a,node b){
        double tmp=mul(a.x1,b.x1)+mul(a.x2,b.x2)+mul(a.x3,b.x3)+mul(a.x4,b.x4)+mul(a.x5,b.x5);
        return sqrt(tmp);
    }
    string knn(int n,node x){
        for(int i=1;i<=n;i++){
            p[i]={dis(x,nod[i]),nod[i].s};
        }
        //for(int i=1;i<=n;i++)cout<<p[i].first<<endl;
        sort(p+1,p+1+n);
        //for(int i=1;i<=n;i++)cout<<p[i].first<<endl;
        mp.clear();
        for(int i=1;i<=k;i++)mp[p[i].second]++;
        int Max=0;
        string ans;
        for(auto x:mp){
            if(x.second>Max){
                Max=x.second;
                ans=x.first;
            }
        }
        return ans;
    }
    int main()
    {
        int n,m;
        puts("input k");
        cin>>k;
        n=input("in.txt");
        puts("input the test case");
        cin>>m;
        node tes;
        for(int i=1;i<=m;i++){
            cin>>tes.x1>>tes.x2>>tes.x3>>tes.x4>>tes.x5;
            tes.x1*=100.0;tes.x2*=100.0;tes.x3*=100.0;tes.x4*=100.0;tes.x5*=100.0;
            cout<<"belong to "<<knn(n,tes)<<endl;
        }
        return 0;
    }

     训练数据:

    0 0 0 0 0 very_low
    0.08 0.08 0.1 0.24 0.9 High
    0.06 0.06 0.05 0.25 0.33 Low
    0.1 0.1 0.15 0.65 0.3 Middle
    0.08 0.08 0.08 0.98 0.24 Low
    0.09 0.15 0.4 0.1 0.66 Middle
    0.1 0.1 0.43 0.29 0.56 Middle
    0.15 0.02 0.34 0.4 0.01 very_low
    0.2 0.14 0.35 0.72 0.25 Low
    0 0 0.5 0.2 0.85 High
    0.18 0.18 0.55 0.3 0.81 High
    0.06 0.06 0.51 0.41 0.3 Low
    0.1 0.1 0.52 0.78 0.34 Middle
    0.1 0.1 0.7 0.15 0.9 High
    0.2 0.2 0.7 0.3 0.6 Middle
    0.12 0.12 0.75 0.35 0.8 High
    0.05 0.07 0.7 0.01 0.05 very_low
    0.1 0.25 0.1 0.08 0.33 Low
    0.15 0.32 0.05 0.27 0.29 Low
    0.2 0.29 0.25 0.49 0.56 Middle
    0.12 0.28 0.2 0.78 0.2 Low
    0.18 0.3 0.37 0.12 0.66 Middle
    0.1 0.27 0.31 0.29 0.65 Middle
    0.18 0.31 0.32 0.42 0.28 Low
    0.06 0.29 0.35 0.76 0.25 Low
    0.09 0.3 0.68 0.18 0.85 High
    0.04 0.28 0.55 0.25 0.1 very_low
    0.09 0.255 0.6 0.45 0.25 Low
    0.08 0.325 0.62 0.94 0.56 High
    0.15 0.275 0.8 0.21 0.81 High
    0.12 0.245 0.75 0.31 0.59 Middle
    0.15 0.295 0.75 0.65 0.24 Low
    0.1 0.256 0.7 0.76 0.16 Low
    0.18 0.32 0.04 0.19 0.82 High
    0.2 0.45 0.28 0.31 0.78 High
    0.06 0.35 0.12 0.43 0.29 Low
    0.1 0.42 0.22 0.72 0.26 Low
    0.18 0.4 0.32 0.08 0.33 Low
    0.09 0.33 0.31 0.26 0 very_low
    0.19 0.38 0.38 0.49 0.45 Middle
    0.02 0.33 0.36 0.76 0.1 Low
    0.2 0.49 0.6 0.2 0.78 High
    0.14 0.49 0.55 0.29 0.6 Middle
    0.18 0.33 0.61 0.64 0.25 Middle
    0.115 0.35 0.65 0.27 0.04 very_low
    0.17 0.36 0.8 0.14 0.66 Middle
    0.1 0.39 0.75 0.31 0.62 Middle
    0.13 0.39 0.85 0.38 0.77 High
    0.18 0.34 0.71 0.71 0.9 High
    0.09 0.51 0.02 0.18 0.67 Middle
    0.06 0.5 0.09 0.28 0.25 Low
    0.23 0.7 0.19 0.51 0.45 Middle
    0.09 0.55 0.12 0.78 0.05 Low
    0.24 0.75 0.32 0.18 0.86 High
    0.18 0.72 0.37 0.29 0.55 Middle
    0.1 0.6 0.33 0.42 0.26 Low
    0.2 0.52 0.36 0.84 0.25 Middle
    0.09 0.6 0.66 0.19 0.59 Middle
    0.18 0.51 0.58 0.33 0.82 High
    0.08 0.58 0.6 0.64 0.1 Low
    0.09 0.61 0.53 0.75 0.01 Low
    0.06 0.77 0.72 0.19 0.56 Middle
    0.15 0.79 0.78 0.3 0.51 Middle
    0.2 0.68 0.73 0.48 0.28 Low
    0.24 0.58 0.76 0.8 0.28 Middle
    0.25 0.1 0.03 0.09 0.15 very_low
    0.32 0.2 0.06 0.26 0.24 very_low
    0.29 0.06 0.19 0.55 0.51 Middle
    0.28 0.1 0.12 0.28 0.32 Low
    0.3 0.08 0.4 0.02 0.67 Middle
    0.27 0.12 0.37 0.29 0.58 Middle
    0.31 0.1 0.41 0.42 0.75 High
    0.29 0.15 0.33 0.66 0.08 very_low
    0.3 0.2 0.52 0.3 0.53 Middle
    0.28 0.16 0.69 0.33 0.78 High
    0.255 0.18 0.5 0.4 0.1 very_low
    0.265 0.06 0.57 0.75 0.1 Low
    0.275 0.1 0.72 0.1 0.3 Low
    0.245 0.1 0.71 0.26 0.2 very_low
    0.295 0.2 0.86 0.44 0.28 Low
    0.32 0.12 0.79 0.76 0.24 Low
    0.295 0.25 0.26 0.12 0.67 Middle
    0.315 0.32 0.29 0.29 0.62 Middle
    0.25 0.29 0.15 0.48 0.26 Low
    0.27 0.1 0.1 0.7 0.25 Low
    0.248 0.3 0.31 0.2 0.03 very_low
    0.325 0.25 0.38 0.31 0.79 High
    0.27 0.31 0.32 0.41 0.28 Low
    0.29 0.29 0.4 0.78 0.18 Low
    0.29 0.3 0.52 0.09 0.67 Middle
    0.258 0.28 0.64 0.29 0.56 Middle
    0.32 0.255 0.55 0.78 0.34 Middle
    0.251 0.265 0.57 0.6 0.09 very_low
    0.288 0.31 0.79 0.23 0.24 Low
    0.323 0.32 0.89 0.32 0.8 High
    0.255 0.305 0.86 0.62 0.15 Low
    0.295 0.25 0.73 0.77 0.19 Low
    0.258 0.25 0.295 0.33 0.77 High
    0.29 0.25 0.29 0.29 0.57 Middle
    0.243 0.27 0.08 0.42 0.29 Low
    0.27 0.28 0.18 0.48 0.26 Low
    0.299 0.32 0.31 0.33 0.87 High
    0.3 0.27 0.31 0.31 0.54 Middle
    0.245 0.26 0.38 0.49 0.27 Low
    0.295 0.29 0.31 0.76 0.1 Low
    0.29 0.3 0.56 0.25 0.67 Middle
    0.26 0.28 0.6 0.29 0.59 Middle
    0.305 0.255 0.63 0.4 0.54 Middle
    0.32 0.27 0.52 0.81 0.3 Middle
    0.299 0.295 0.8 0.37 0.84 High
    0.276 0.255 0.81 0.27 0.33 Low
    0.258 0.31 0.88 0.4 0.3 Low
    0.32 0.28 0.72 0.89 0.58 High
    0.329 0.55 0.02 0.4 0.79 High
    0.295 0.59 0.29 0.31 0.55 Middle
    0.285 0.64 0.18 0.61 0.45 Middle
    0.265 0.6 0.28 0.66 0.07 very_low
    0.315 0.69 0.28 0.8 0.7 High
    0.28 0.78 0.44 0.17 0.66 Middle
    0.325 0.61 0.46 0.32 0.81 High
    0.28 0.65 0.4 0.65 0.13 Low
    0.255 0.75 0.35 0.72 0.25 Low
    0.305 0.55 0.5 0.11 0.333 Low
    0.3 0.85 0.54 0.25 0.83 Middle
    0.325 0.9 0.52 0.49 0.76 High
    0.312 0.8 0.67 0.92 0.5 High
    0.299 0.7 0.95 0.22 0.66 High
    0.265 0.76 0.8 0.28 0.28 Low
    0.255 0.72 0.72 0.63 0.14 Low
    0.295 0.6 0.72 0.88 0.28 Middle
    0.39 0.05 0.02 0.06 0.34 Low
    0.4 0.18 0.26 0.26 0.67 Middle
    0.45 0.04 0.18 0.55 0.07 very_low
    0.48 0.12 0.28 0.7 0.71 High
    0.4 0.12 0.41 0.1 0.65 Middle
    0.41 0.18 0.33 0.31 0.5 Middle
    0.38 0.1 0.4 0.48 0.26 Low
    0.37 0.06 0.32 0.78 0.1 Low
    0.41 0.09 0.58 0.18 0.58 Middle
    0.38 0.01 0.53 0.27 0.3 Low
    0.33 0.04 0.5 0.55 0.1 very_low
    0.42 0.15 0.66 0.78 0.4 Middle
    0.44 0.08 0.8 0.22 0.56 Middle
    0.39 0.15 0.81 0.22 0.29 Low
    0.42 0.21 0.87 0.56 0.48 Middle
    0.46 0.2 0.76 0.95 0.65 High
    0.365 0.243 0.19 0.24 0.35 Low
    0.33 0.27 0.2 0.33 0.1 very_low
    0.345 0.299 0.1 0.64 0.13 Low
    0.48 0.3 0.15 0.65 0.77 High
    0.49 0.245 0.38 0.14 0.86 High
    0.334 0.295 0.33 0.32 0.3 Low
    0.36 0.29 0.37 0.48 0.13 very_low
    0.39 0.26 0.39 0.77 0.14 Low
    0.43 0.305 0.51 0.09 0.64 Middle
    0.44 0.32 0.55 0.33 0.52 Middle
    0.45 0.299 0.63 0.36 0.51 Middle
    0.495 0.276 0.58 0.77 0.83 High
    0.465 0.258 0.73 0.18 0.59 Middle
    0.475 0.32 0.79 0.31 0.54 Middle
    0.348 0.329 0.83 0.61 0.18 Low
    0.385 0.26 0.76 0.84 0.3 Middle
    0.445 0.39 0.02 0.24 0.88 High
    0.43 0.45 0.27 0.27 0.89 High
    0.33 0.34 0.1 0.49 0.12 very_low
    0.4 0.33 0.12 0.3 0.9 High
    0.34 0.4 0.38 0.2 0.61 Middle
    0.38 0.36 0.46 0.49 0.78 High
    0.35 0.38 0.32 0.6 0.16 Low
    0.41 0.49 0.34 0.21 0.92 High
    0.42 0.36 0.63 0.04 0.25 Low
    0.43 0.38 0.62 0.33 0.49 Middle
    0.44 0.33 0.59 0.53 0.85 High
    0.4 0.42 0.58 0.75 0.16 Low
    0.46 0.44 0.89 0.12 0.66 Middle
    0.38 0.39 0.79 0.33 0.3 Low
    0.39 0.42 0.83 0.65 0.19 Low
    0.49 0.34 0.88 0.75 0.71 High
    0.46 0.64 0.22 0.22 0.6 Middle
    0.44 0.55 0.11 0.26 0.83 High
    0.365 0.68 0.1 0.63 0.18 Low
    0.45 0.65 0.19 0.99 0.55 High
    0.46 0.78 0.38 0.24 0.89 High
    0.37 0.55 0.41 0.29 0.3 Low
    0.38 0.59 0.31 0.62 0.2 Low
    0.49 0.64 0.34 0.78 0.21 Low
    0.495 0.82 0.67 0.01 0.93 High
    0.44 0.69 0.61 0.29 0.57 Middle
    0.365 0.57 0.59 0.55 0.25 Low
    0.49 0.9 0.52 0.9 0.47 High
    0.445 0.7 0.82 0.16 0.64 Middle
    0.42 0.7 0.72 0.3 0.8 High
    0.37 0.6 0.77 0.4 0.5 Middle
    0.4 0.61 0.71 0.88 0.67 High
    0.6 0.14 0.22 0.11 0.66 Middle
    0.55 0.1 0.27 0.25 0.29 Low
    0.68 0.19 0.19 0.48 0.1 very_low
    0.73 0.2 0.07 0.72 0.26 Low
    0.78 0.15 0.38 0.18 0.63 Middle
    0.55 0.1 0.34 0.3 0.1 very_low
    0.59 0.18 0.31 0.55 0.09 very_low

    测试数据

    0.64 0.09 0.33 0.65 0.5 Middle
    0.6 0.19 0.55 0.08 0.1 very_low
    0.69 0.02 0.62 0.3 0.29 Low
    0.78 0.21 0.68 0.65 0.75 High
    0.62 0.14 0.52 0.81 0.15 Low
    0.7 0.18 0.88 0.09 0.66 Middle
    0.75 0.015 0.78 0.31 0.53 Middle
    0.55 0.17 0.71 0.48 0.11 very_low
    0.85 0.05 0.91 0.8 0.68 High
    0.78 0.27 0.13 0.14 0.62 Middle
    0.8 0.29 0.06 0.31 0.51 Middle
    0.9 0.26 0.19 0.58 0.79 High
    0.76 0.258 0.07 0.83 0.34 Middle
    0.72 0.32 0.48 0.2 0.6 Middle
    0.6 0.251 0.39 0.29 0.3 Low
    0.52 0.288 0.32 0.5 0.3 Low
    0.6 0.31 0.31 0.87 0.58 High
    0.51 0.255 0.55 0.17 0.64 Middle
    0.58 0.295 0.62 0.28 0.3 Low
    0.61 0.258 0.56 0.62 0.24 Low
    0.77 0.267 0.59 0.78 0.28 Middle
    0.79 0.28 0.88 0.2 0.66 Middle
    0.68 0.27 0.78 0.31 0.57 Middle
    0.58 0.299 0.73 0.63 0.21 Low
    0.77 0.29 0.74 0.82 0.68 High
    0.71 0.475 0.13 0.23 0.59 Middle
    0.58 0.348 0.06 0.29 0.31 Low
    0.88 0.335 0.19 0.55 0.78 High
    0.99 0.49 0.07 0.7 0.69 High
    0.73 0.43 0.32 0.12 0.65 Middle
    0.61 0.33 0.36 0.28 0.28 Low
    0.51 0.4 0.4 0.59 0.23 Low
    0.83 0.44 0.49 0.91 0.66 High
    0.66 0.38 0.55 0.15 0.62 Middle
    0.58 0.35 0.51 0.27 0.3 Low
    0.523 0.41 0.55 0.6 0.22 Low
    0.66 0.36 0.56 0.4 0.83 High
    0.62 0.37 0.81 0.13 0.64 Middle
    0.52 0.44 0.82 0.3 0.52 Middle
    0.5 0.4 0.73 0.62 0.2 Low
    0.71 0.46 0.95 0.78 0.86 High
    0.64 0.55 0.15 0.18 0.63 Middle
    0.52 0.85 0.06 0.27 0.25 Low
    0.62 0.62 0.24 0.65 0.25 Middle
    0.91 0.58 0.26 0.89 0.88 High
    0.62 0.67 0.39 0.1 0.66 Middle
    0.58 0.58 0.31 0.29 0.29 Low
    0.89 0.68 0.49 0.65 0.9 High
    0.72 0.6 0.45 0.79 0.45 Middle
    0.68 0.63 0.65 0.09 0.66 Middle
    0.56 0.6 0.6 0.31 0.5 Middle
    0.54 0.51 0.55 0.64 0.19 Low
    0.61 0.78 0.69 0.92 0.58 High
    0.78 0.61 0.71 0.19 0.6 Middle
    0.54 0.82 0.71 0.29 0.77 High
    0.5 0.75 0.81 0.61 0.26 Middle
    0.66 0.9 0.76 0.87 0.74 High

  • 相关阅读:
    树、森林和二叉树的转换
    弱校ACM奋斗史
    安徽科技学院2016-2017-1学期2013信息与计算科学12班期末测试_题解
    安徽省2016“京胜杯”程序设计大赛_K_纸上谈兵
    安徽省2016“京胜杯”程序设计大赛_J_YZK的大别墅
    安徽省2016“京胜杯”程序设计大赛_I_恶魔A+B
    安徽省2016“京胜杯”程序设计大赛_H_单身晚会
    安徽省2016“京胜杯”程序设计大赛_G_木条染色
    安徽省2016“京胜杯”程序设计大赛_F_吃在工大
    LeetCode() Merge Intervals 还是有问题,留待,脑袋疼。
  • 原文地址:https://www.cnblogs.com/pk28/p/5601728.html
Copyright © 2011-2022 走看看