以后写代码一定要谨慎,提高代码的正确率。

  1. /***************************************
  2. * 1.初始化距离为最大值
  3. * 2.计算未知样本和每个训练样本的距离为dist
  4. * 3.得到目前k个最邻近样本中的最大距离maxdist
  5. * 4.如果dist小于maxdist,则将改训练样本作为k-最近邻样本
  6. * 5.重复2、3、4,直至未知样本和训练样本的距离都算完
  7. * 6.统计k个最近邻样本中每个类别出现的次数
  8. * 7.选择出现频率最大的类别作为未知样本的类别
  9. * *****************************************/
  10.  
  11. #include <stdio.h>
  12. #include <math.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #define MAX 0x7fffffff
  16. #define K 3
  17.  
  18. double cal_dist(int n,double *x,double *y)
  19. {
  20. double sum = 0.0;
  21. int i =;
  22. for(i=;i<n;i++)
  23. {
  24. sum += pow((x[i]-y[i]),2.0);
  25. }
  26. return sqrt(sum);
  27. }
  28.  
  29. void bubbleSort(double **array,int count,int flag)
  30. {
  31. int i = count,j;
  32. double temp;
  33. while(i>)
  34. {
  35. for(j=;j<i-;j++)
  36. {
  37. if(flag == )
  38. {
  39. if(array[][j] > array[][j+])
  40. {
  41. temp = array[][j];
  42. array[][j] = array[][j+];
  43. array[][j+] = temp;
  44. temp = array[][j];
  45. array[][j] = array[][j+];
  46. array[][j+] = temp;
  47. }
  48.  
  49. }
  50. else if(flag == )
  51. {
  52. if(array[][j] > array[][j+])
  53. {
  54. temp = array[][j];
  55. array[][j] = array[][j+];
  56. array[][j+] = temp;
  57. temp = array[][j];
  58. array[][j] = array[][j+];
  59. array[][j+] = temp;
  60. }
  61. }
  62. }
  63. i--;
  64. }
  65. return;
  66. }
  67. int main()
  68. {
  69. int n,m;
  70. FILE *fp;
  71. fp = fopen("/data.txt","r");
  72. fscanf(fp,"N=%d,D=%d",&n,&m);
  73. printf("N=%d,D=%d\n",n,m);
  74. double **array;
  75. array = (double **)malloc(n*sizeof(double));
  76. array[] = (double *)malloc(n*m*sizeof(double));
  77. int h,j = ,i =;
  78. for(i=;i<n;i++)
  79. {
  80. array[i] = array[i-] + m;
  81. }
  82. for(i=;i<n;i++)
  83. {
  84. for(j=;j<m;j++)
  85. {
  86. fscanf(fp,"%lf",&array[i][j]);
  87. }
  88. }
  89. double **temp;
  90. temp = (double **)malloc(*sizeof(double));
  91. temp[] = (double *)malloc(*K*sizeof(double));
  92. for(i=;i<;i++)
  93. {
  94. temp[i] = temp[i-] + K;
  95. }
  96. for(i=;i<;i++)
  97. {
  98. for(j=;j<K;j++)
  99. {
  100. temp[i][j] = MAX*0.1;
  101. }
  102. }
  103. double *testdata;
  104. double max_dist = 0.0;
  105. double distance = 0.0;
  106. double tmp = 0.0;
  107. testdata=(double *)malloc((m-)*sizeof(double));
  108. printf("input test data containing %d numbers:\n",m-);
  109. for(i=;i<(m-);i++)
  110. {
  111. fscanf(fp,"%lf",&testdata[i]);
  112. }
  113. close(fp);
  114. while()
  115. {
  116. for(i=;i<K;i++)
  117. {
  118. if(K > n) break;
  119. temp[][i] = cal_dist(n,testdata,array[i]);
  120. temp[][i] = array[i][m-];
  121. }
  122. for(i=;i<K;i++)
  123. {
  124. printf("%4lf,%4lf\n",temp[][i],temp[][i]);
  125. }
  126. printf("\n");
  127. bubbleSort(temp,K,);
  128. max_dist = temp[][K-];
  129. for(i=K;i<n;i++)
  130. {
  131. distance = cal_dist(n,testdata,array[i]);
  132. if(max_dist > distance)
  133. {
  134. for(j=;j<K;j++)
  135. {
  136. if(distance < temp[][j])
  137. {
  138. for(h=K-;h>j;h--)
  139. {
  140. temp[][h] = temp[][h-];
  141. temp[][h] = temp[][h-];
  142. }
  143. }
  144. temp[][j] = distance;
  145. temp[][j] = array[i][m-];
  146. }
  147. }
  148. max_dist = temp[][K-];
  149. }
  150. bubbleSort(temp,K,);
  151. break;
  152. }
  153.  
  154. int value_label = ;
  155. int count = ;
  156. int flag = ;
  157. for(i=;i<K-;i++)
  158. {
  159. if(temp[][i] != temp[][i+])
  160. {
  161. if(flag > count)
  162. {
  163. flag = count;
  164. value_label = temp[][i];
  165. count =;
  166. }
  167. }
  168. else
  169. {
  170. count ++;
  171. }
  172. }
  173. if(count > flag)
  174. {
  175. value_label = temp[][K-];
  176. flag = count;
  177. }
  178. printf("Predict message is %d\n",value_label);
  179. return ;
  180. }

C语言实现knn的更多相关文章

  1. 机器学习与R语言:kNN

    #---------------------------------------- # 功能描述:演示kNN建模过程 # 数据集:威斯康星乳腺癌诊断 # #---------------------- ...

  2. 数据分析与挖掘 - R语言:KNN算法

    一个简单的例子!环境:CentOS6.5Hadoop集群.Hive.R.RHive,具体安装及调试方法见博客内文档. KNN算法步骤:需对所有样本点(已知分类+未知分类)进行归一化处理.然后,对未知分 ...

  3. 大数据时代的精准数据挖掘——使用R语言

    老师简介: Gino老师,即将步入不惑之年,早年获得名校数学与应用数学专业学士和统计学专业硕士,有海外学习和工作的经历,近二十年来一直进行着数据分析的理论和实践,数学.统计和计算机功底强悍. 曾在某一 ...

  4. 机器学习 第五篇:分类(kNN)

    K最近邻(kNN,k-NearestNeighbor)算法是一种监督式的分类方法,但是,它并不存在单独的训练过程,在分类方法中属于惰性学习法,也就是说,当给定一个训练数据集时,惰性学习法简单地存储或稍 ...

  5. kd树和knn算法的c语言实现

    基于kd树的knn的实现原理可以参考文末的链接,都是一些好文章. 这里参考了别人的代码.用c语言写的包括kd树的构建与查找k近邻的程序. code: #include<stdio.h> # ...

  6. 【机器学*与R语言】2-懒惰学*K*邻(kNN)

    目录 1.理解使用KNN进行分类 KNN特点 KNN步骤 1)计算距离 2)选择合适的K 3)数据准备 2.用KNN诊断乳腺癌 1)收集数据 2)探索和准备数据 3)训练模型 4)评估模型的性能 5) ...

  7. k近邻算法(knn)的c语言实现

    最近在看knn算法,顺便敲敲代码. knn属于数据挖掘的分类算法.基本思想是在距离空间里,如果一个样本的最接近的k个邻居里,绝大多数属于某个类别,则该样本也属于这个类别.俗话叫,"随大流&q ...

  8. 用R语言对一个信用卡数据实现logit,GBM,knn,xgboost

    Prepare the data 数据来自UCIhttp://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening,一个 ...

  9. knn算法的c语言实现

    最近研究KNN,找到了一些优秀的源码,贴出来,做个笔记吧. #include<stdio.h> #include<stdlib.h> #include<math.h> ...

随机推荐

  1. 【MVVM Dev】多个具有依赖性质的ComboBox对数据的过滤

    一.前言 在界面编程中,我们常常会遇到具有依赖性质的ComboBox框,比如最常见的: 省/直辖市 => 地级市/区 => 区/街道 今天就说一下在WPF的MVVM模式中如何实现该功能 二 ...

  2. 《剑指offer》— JavaScript(14)链表中倒数第k个结点

    链表中倒数第k个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路 两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点: 然后两个指针同时 ...

  3. python的StringIO模块

    StringIO经常被用来作字符串的缓存,因为StringIO的一些接口和文件操作是一致的,也就是说同样的代码,可以同时当成文件操作或者StringIO操作. 一.StringIO中的常用方法 1.r ...

  4. MyEclipse解决Launching xx on MyEclipse Tomcat has encountered a problem

    单击工具栏Run,选中Run Configurations... 将MyEclipse Server Application里面的工程右击选择Delete就好了.

  5. poi复杂excel的实现

    一:前言 最近帮一个朋友做excel的导出功能,对于我来说还是挺头疼,我看了下表格样式,对于我来说还是挺头疼的,想当年耗子刚刚出社会的时候做的第一份工作,第一份任务就是把把word转换为html,在这 ...

  6. Linux_创建母版,快速克隆,如何移动虚拟机.ziw

    2017年1月9日, 星期一 Linux_创建母版,快速克隆,如何移动虚拟机       1. 安裝虚拟机       2. 建立母版——第一次启动虚拟机    2.1 设置网卡为NAT模式   2. ...

  7. CSS 颜色属性

    一.十六进制表示,如: a{ color: #F0E68C; } 当RGB一样时,可以简写,如#AABBCC 可以写成 #ABC 二.rgb(r,g,b)形式,其中rgb的值为1~255之间,如: a ...

  8. each()和eq()

    今天工作的时候要遍历一个表格,于是我就想到了each(),也没看文档就开始写,大概是这么写的 $(".class").each(function(){ this.click(fun ...

  9. 【leetcode 简单】第五十题 位1的个数

    编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量). 示例 : 输入: 11 输出: 3 解释: 整数 11 的二进制表示为 00000000000 ...

  10. E.Text Editor (Gym 101466E + 二分 + kmp)

    题目链接:http://codeforces.com/gym/101466/problem/E 题目: 题意: 给你s串和t串,一个数k,求t的最长前缀串在s串中出现次数不少于k. 思路: 一眼二分+ ...