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

/***************************************
* 1.初始化距离为最大值
* 2.计算未知样本和每个训练样本的距离为dist
* 3.得到目前k个最邻近样本中的最大距离maxdist
* 4.如果dist小于maxdist,则将改训练样本作为k-最近邻样本
* 5.重复2、3、4,直至未知样本和训练样本的距离都算完
* 6.统计k个最近邻样本中每个类别出现的次数
* 7.选择出现频率最大的类别作为未知样本的类别
* *****************************************/ #include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define MAX 0x7fffffff
#define K 3 double cal_dist(int n,double *x,double *y)
{
double sum = 0.0;
int i =;
for(i=;i<n;i++)
{
sum += pow((x[i]-y[i]),2.0);
}
return sqrt(sum);
} void bubbleSort(double **array,int count,int flag)
{
int i = count,j;
double temp;
while(i>)
{
for(j=;j<i-;j++)
{
if(flag == )
{
if(array[][j] > array[][j+])
{
temp = array[][j];
array[][j] = array[][j+];
array[][j+] = temp;
temp = array[][j];
array[][j] = array[][j+];
array[][j+] = temp;
} }
else if(flag == )
{
if(array[][j] > array[][j+])
{
temp = array[][j];
array[][j] = array[][j+];
array[][j+] = temp;
temp = array[][j];
array[][j] = array[][j+];
array[][j+] = temp;
}
}
}
i--;
}
return;
}
int main()
{
int n,m;
FILE *fp;
fp = fopen("/data.txt","r");
fscanf(fp,"N=%d,D=%d",&n,&m);
printf("N=%d,D=%d\n",n,m);
double **array;
array = (double **)malloc(n*sizeof(double));
array[] = (double *)malloc(n*m*sizeof(double));
int h,j = ,i =;
for(i=;i<n;i++)
{
array[i] = array[i-] + m;
}
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
fscanf(fp,"%lf",&array[i][j]);
}
}
double **temp;
temp = (double **)malloc(*sizeof(double));
temp[] = (double *)malloc(*K*sizeof(double));
for(i=;i<;i++)
{
temp[i] = temp[i-] + K;
}
for(i=;i<;i++)
{
for(j=;j<K;j++)
{
temp[i][j] = MAX*0.1;
}
}
double *testdata;
double max_dist = 0.0;
double distance = 0.0;
double tmp = 0.0;
testdata=(double *)malloc((m-)*sizeof(double));
printf("input test data containing %d numbers:\n",m-);
for(i=;i<(m-);i++)
{
fscanf(fp,"%lf",&testdata[i]);
}
close(fp);
while()
{
for(i=;i<K;i++)
{
if(K > n) break;
temp[][i] = cal_dist(n,testdata,array[i]);
temp[][i] = array[i][m-];
}
for(i=;i<K;i++)
{
printf("%4lf,%4lf\n",temp[][i],temp[][i]);
}
printf("\n");
bubbleSort(temp,K,);
max_dist = temp[][K-];
for(i=K;i<n;i++)
{
distance = cal_dist(n,testdata,array[i]);
if(max_dist > distance)
{
for(j=;j<K;j++)
{
if(distance < temp[][j])
{
for(h=K-;h>j;h--)
{
temp[][h] = temp[][h-];
temp[][h] = temp[][h-];
}
}
temp[][j] = distance;
temp[][j] = array[i][m-];
}
}
max_dist = temp[][K-];
}
bubbleSort(temp,K,);
break;
} int value_label = ;
int count = ;
int flag = ;
for(i=;i<K-;i++)
{
if(temp[][i] != temp[][i+])
{
if(flag > count)
{
flag = count;
value_label = temp[][i];
count =;
}
}
else
{
count ++;
}
}
if(count > flag)
{
value_label = temp[][K-];
flag = count;
}
printf("Predict message is %d\n",value_label);
return ;
}

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. 【BZOJ3203】保护出题人(动态规划,斜率优化)

    [BZOJ3203]保护出题人(动态规划,斜率优化) 题面 BZOJ 洛谷 题解 在最优情况下,肯定是存在某只僵尸在到达重点的那一瞬间将其打死 我们现在知道了每只僵尸到达终点的时间,因为僵尸要依次打死 ...

  2. 【BZOJ2878】【NOI2012】迷失游乐园(动态规划)

    [BZOJ2878][NOI2012]迷失游乐园(动态规划) 题面 BZOJ 题解 记得以前考试的时候做过这道题目 这题的暴力还是非常显然的,每次\(dfs\)一下就好了. 时间复杂度\(O(n^2) ...

  3. 20135239 益西拉姆 linux内核分析 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    https://drive.wps.cn/preview#l/759e32d65654419cb765da932cdf5cdc 本次直接在wps上写的,因为不能连同图片一起粘贴过来,一个一个粘比较费时 ...

  4. 函数式编程(1)-高阶变成(3)-sorted

    sorted 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大 ...

  5. PHP 中的新语法 new static 是个啥意思?

    简单通俗的来说, self就是写在哪个类里面, 实际调用的就是这个类.所谓的后期静态绑定, static代表使用的这个类, 就是你在父类里写的static, 然后通过子类直接/间接用到了这个stati ...

  6. ORACLE获取某个时间段之间的月份列表

    返回1-31,或者1-12,或者某个 select rownum   from dual   connect by rownum<31 就是connect by http://marcospri ...

  7. makefile使用笔记(二)变量

    By francis_hao    Oct 30,2017   makefile中可以使用变量,变量有多种类型,下面分别介绍 简单变量 简单变量的命名规则和c语言一致. 给变量赋值就表示创建了这个变量 ...

  8. VMware 与Ubuntu通过samba服务器共享文件

    Linux和windows在虚拟机下文件共享有很多种方式,常用的有使用VMware Tools共享和Samba服务器进行共享,使用VMware Tools这里就不说了,我使用的是Samba服务器. 其 ...

  9. AndroidStudio环境搭建

    简单记录一下AS的环境搭建过程,包括SVN的使用. 一.下载和安装JDK 地址:http://www.oracle.com/technetwork/java/javase/downloads/inde ...

  10. select表单元素详解及下拉列表模拟实现

    原文地址:→看过来 写在前面 select 是HTML表单元素中很常用的一个,其中很重要的几个属性常被忽略,但这几个属性却能帮助我们完成很多的功能,当然,select下拉列表默认样式很不友好,所以更多 ...