C# 测试K近邻算法(KNN) 仿Python

13 篇文章 0 订阅
3 篇文章 0 订阅

之前在接触Python的时候,用过这个算法,今天无聊就想用C#测试下。 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。

    int sampleCount = sampleList.Count;
    int unclassifyCount = unclassifyList.Count;
    // 
    for (int i = 0; i < unclassifyCount; i++)
    {
        Tuple<string, double>[] tupleArray = new Tuple<string, double>[sampleCount];
        for (int j = 0; j < sampleCount; j++)
        {
            //计算欧式距离===>暂时还不知道这个距离的意义。Sqrt(x2+y2+m2+n2)
            double distance = CalculateDistance(sampleList[j], unclassifyList[i]);
            string species = sampleList[j].Species;
            tupleArray[j] = Tuple.Create(species, distance);
        }

        //取5个样品列子
        IEnumerable<Tuple<string, double>> selector = tupleArray.OrderBy(t => t.Item2).Take(k);
        Dictionary<string, int> dictionary = new Dictionary<string, int>();
        foreach (Tuple<string, double> tuple in selector)
        {
            if (dictionary.ContainsKey(tuple.Item1))
            {
                dictionary[tuple.Item1]++;
            }
            else
            {
                dictionary.Add(tuple.Item1, 1);
            }
        }

        // 倒叙取种类。就是取类别最多的一种
        //setosa 5
        //versicolor 4
        //virginica 3   
        // ===>setosa
        IEnumerable<KeyValuePair<string, int>> keyValuePair = dictionary.OrderByDescending(t => t.Value).Take(1);
        foreach (KeyValuePair<string, int> kvp in keyValuePair)
        {
            unclassifyList[i].Species = kvp.Key;
        }

        // 
        sampleList.Add(unclassifyList[i]);
        sampleCount++;
    }


完整代码+鸢尾花常用数据集
密码:p7a6

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值