之前写k-近邻算法(http://boytnt.blog.51cto.com/966121/1569629)的时候,没附上测试数据,这回找了一个,测试一下算法的效果。数据来源于http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data,关于乳腺癌的样本,属性描述见breast-cancer-wisconsin.names。

样本的大致形式如下:

1
1000025,5,1,1,1,2,1,3,1,1,2

第1个属性是编号,我们不关心,最后一个属性是结果,2表示benign(良性),4表示malignant(恶性)。其余9个属性是样本特征。注意里面有缺失数据(用?表示,共计16行,占2.3%),计算时要先做数据清洗,这里简单填充成0即可。

用k-近邻算法来测试一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public void TestNearestNeighbour()
{
    var trainingSet = new List<DataVector<double>>();
    var testSet = new List<DataVector<double>>();
     
    //读取数据
    var file = new StreamReader("breast-cancer-wisconsin.txt", Encoding.Default);
    for(int i = 0;i < 699;++i)
    {
        string line = file.ReadLine();
        var parts = line.Split(',');
         
        var p = new DataVector<double>(9);
        for(int j = 0;j < p.Dimension;++j)
        {
            if(parts[j + 1] == "?")
                parts[j + 1] = "0";
            p.Data[j] = Convert.ToDouble(parts[j + 1]);
        }
        p.Label = Convert.ToInt32(parts[10]) == 2 ? "benign" "malignant";
         
        //用600个样本做训练,剩下99个做测试
        if(i < 600)
            trainingSet.Add(p);
        else
            testSet.Add(p);
    }
    file.Close();
     
    //检验
    var nn = new NearestNeighbour();
    nn.Train(trainingSet);
    int error = 0;
    foreach(var in testSet)
    {
        var label = nn.Classify(p);
        if(label != p.Label)
            ++error;
    }
     
    Console.WriteLine("Error = {0}/{1}, {2}%", error, testSet.Count, (error * 100.0 / testSet.Count));
}

运行结果是99个测试样本猜错2个,错误率2.02%,效果不错。

附件:http://down.51cto.com/data/2365048

本文转自 BoyTNT 51CTO博客,原文链接:http://blog.51cto.com/boytnt/1572149,如需转载请自行联系原作者

机器学习算法:补一个k-近邻算法的测试相关推荐

  1. 机器学习算法系列之K近邻算法

    本系列机器学习的文章打算从机器学习算法的一些理论知识.python实现该算法和调一些该算法的相应包来实现. 目录 K近邻算法 一.K近邻算法原理 k近邻算法 通俗解释 近邻距离的度量 k值的选择 KN ...

  2. 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...

  3. 机器学习7更多关于k近邻算法的思考

    文章目录 一.一些总结 1.缺点1: 2.优化: 3.缺点2: 4.缺点3: 5.缺点4: 二.机器学习流程回顾 一.一些总结 k近邻算法是一个解决分类问题的算法,天然可以解决多分类问题: 不仅如此, ...

  4. 机器学习7/100天-K近邻算法

    Day7 K近邻算法 github: 100DaysOfMLCode What is K-NN k近邻算法是常用的简单分类算法也可用于回归问题. KNN是一个无参的(不需要对数据分布做任何假设).基于 ...

  5. 机器学习实战第二章K近邻算法照葫芦画瓢实践。

    分别实现了最基本的3个DEMO 1.给你若干个带有标签的二维点作为训练集,给定一系列的二维随机点,看其通过训练集,可以被分为哪一类 2.给你N个人的飞行里程数,玩游戏消耗时间百分比和每周消耗冰激凌的公 ...

  6. 【机器学习】sklearn机器学习入门案例——使用k近邻算法进行鸢尾花分类

    1 背景 这个案例恐怕已经被说的很烂了,机器学习方面不同程度的人对该案例还是有着不同的感觉.有的人追求先理解机器学习背后的理论甚至自己推导一遍相关数学公式,再用代码实现:有的人则满足于能够实现相关功能 ...

  7. 2、python机器学习基础教程——K近邻算法鸢尾花分类

    一.第一个K近邻算法应用:鸢尾花分类 import numpy as np from sklearn.datasets import load_iris from sklearn.model_sele ...

  8. 机器学习:k近邻算法(KNN)介绍

    k近邻算法是一种最简单最经典的机器学习算法之一.该算法的原理为:当对测试样本进行分类时,首先通过扫描训练样本集,找到与该测试样本最相似的k个训练样本,根据这个样本的类别进行投票确定测试样本的类别.也可 ...

  9. 《Python机器学习基础教程》(一)——引言(k近邻算法)

    封面 第1章 引言 1.1思维导图 1.2代码 %matplotlib inline import pandas as pd import sys import scipy as sp import ...

  10. python机器学习 | K近邻算法学习(1)

    K近邻算法学习 1 K近邻算法介绍 1.1算法定义 1.2算法原理 1.3算法讨论 1.3.1 K值选择 1.3.2距离计算 1.3.3 KD树 2 K近邻算法实现 2.1scikit-learn工具 ...

最新文章

  1. 谈一谈使用Python入门量化投资
  2. BERT中的黑暗秘密
  3. 【设计模式】-写在前面
  4. NIST 人脸识别竞赛 FRVT(Face Recognition Vendor Test)
  5. [转载] C#面向对象设计模式纵横谈——10. Decorator装饰模式
  6. Jenkins 中如何一次构建多个项目
  7. PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统
  8. mysql 5 安装过程
  9. 《Android/OPhone开发完全讲义》连载(7):使用SharedPreferences存取复杂数据
  10. QLayout的属性介绍
  11. CSAPP-C1-计算机系统漫游
  12. 设置GRUB菜单密码
  13. 【STM32f401学习之路-01】GPIO实战—点灯、检测按键
  14. Java 网络编程:(七)UDP网络编程
  15. 每天一练——输入一行字符串,按如下规则加密:如果是英文字母则大写变小写、小写变大写,对非英文字符则保持不变。试写加密程序。
  16. 如何设置文档背景颜色
  17. 在perl中简单的正则匹配
  18. Bowtie使用介绍
  19. 什么是C++ __builtin_popcount()函数
  20. Microsoft Edge浏览器打不开

热门文章

  1. Java中通过substring和charAt截取字符串并获取指定字符
  2. Java的poi的excel导入怎么判断日期格式的单元格
  3. 团队愿景和团队章程的问答?
  4. 数据库相关(JDBC,存储过程,以及大文本数据处理,mvc设计模式)
  5. 1、MySQL 8.0.20最新版本在Linux上安装
  6. 重磅!神策客户服务中心升级,5 年,价值释放加速度
  7. [转载]关于JAVA中子类和父类的构造方法
  8. Java中动态获取项目根目录和tomcat的绝对路径
  9. 静态自动检查代码缺陷与隐患
  10. Linux 软件的安装