C# NN算法实现
NN算法的核心是,欧式距离(Euclid),在分类的数据中,找到与目标数据欧式距离最近的点,把目标点分类到其类,算法很简单,下面是C#代码的实现:
namespace LocationService.Math
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class NN
{
public List<Tuple<string, double[]>> FingerPrintsTable;
public NN()
{
FingerPrintsTable = new List<Tuple<string, double[]>>();
} public void AddFingerPrint(string key,double[] attributes)
{
var finger = Tuple.Create(key,attributes);
AddFingerPrint(finger);
}
public void AddFingerPrint(Tuple<string,double[]> fingerprint)
{
FingerPrintsTable.Add(fingerprint);
} public void AddFingerPrint(IEnumerable<Tuple<string, double[]>> fingers)
{
FingerPrintsTable.AddRange(fingers);
}
public void RemoveFingerPrint(string key)
{
FingerPrintsTable.RemoveAll(fi => fi.Item1 == key);
} public void RemoveFingerPrint(Tuple<string, double[]> fingerprint)
{
FingerPrintsTable.Remove(fingerprint);
} public double EuclideanDistance(double[] x1, double[] x2,int scale=1)
{
double sum=0;
for (int i = 0; i < x1.Length; i++)
{
sum += Math.Pow(x1[i] - x2[i], 2);
}
sum = Math.Sqrt(sum) / x1.Length*scale;
return sum;
} public List<Tuple<string, double>> FingerEuclideanList(Tuple<string, double[]> target)
{
List<Tuple<string, double>> list = new List<Tuple<string, double>>(); foreach (var finger in FingerPrintsTable)
{
list.Add(Tuple.Create(finger.Item1, EuclideanDistance(finger.Item2, target.Item2)));
}
return list;
} /// <summary>
/// Apply the Euclidean distance
/// </summary>
/// <param name="target"></param>
/// <returns></returns>
public Tuple<string,double> ApplyEuclideanFilter(Tuple<string, double[]> target)
{
var list = FingerEuclideanList(target);
list.Sort((x, y) => (int)((x.Item2 - y.Item2) * 100));
foreach (var item in list)
{
this.log("[Label:{0} Distance:{1}]", item.Item1, item.Item2);
}
return list[0];
} }
}
用其他的案例,分类影片类型:

分类使用
NN nN = new NN();
nN.AddFingerPrint("爱情",new double[] {3,104});
nN.AddFingerPrint("爱情", new double[] {2,100 });
nN.AddFingerPrint("爱情", new double[] {1,81});
nN.AddFingerPrint("动作", new double[] {101,10 });
nN.AddFingerPrint("动作", new double[] {99,5});
nN.AddFingerPrint("动作", new double[] {98,2}); Tuple<string, double[]> target = Tuple.Create("未知",new double[] {81,80});
Tuple<string, double> result=null;
this.MeasureTime(()=> {
result = nN.ApplyEuclideanFilter(target); },time=> {
this.log("===================================");
this.log("分类类型:{0} 欧式距离为:{1}", result.Item1, result.Item2);
this.log("total time:{0}ms", time);
this.log("===================================");
});
分类结果如下:

C# NN算法实现的更多相关文章
- CNN:人工智能之神经网络算法进阶优化,六种不同优化算法实现手写数字识别逐步提高,应用案例自动驾驶之捕捉并识别周围车牌号—Jason niu
import mnist_loader from network3 import Network from network3 import ConvPoolLayer, FullyConnectedL ...
- 从NLP任务中文本向量的降维问题,引出LSH(Locality Sensitive Hash 局部敏感哈希)算法及其思想的讨论
1. 引言 - 近似近邻搜索被提出所在的时代背景和挑战 0x1:从NN(Neighbor Search)说起 ANN的前身技术是NN(Neighbor Search),简单地说,最近邻检索就是根据数据 ...
- Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程
[保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...
- 手势估计- Hand Pose Estimation
http://blog.csdn.net/myarrow/article/details/51933651 1. 目前进展 1.1 相关资料 1)HANDS CVPR 2016 2 ...
- Deep learning:四十(龙星计划2013深度学习课程小总结)
头脑一热,坐几十个小时的硬座北上去天津大学去听了门4天的深度学习课程,课程预先的计划内容见:http://cs.tju.edu.cn/web/courseIntro.html.上课老师为微软研究院的大 ...
- Scala - Spark Lambda“goesto“ => 分析
/// 定义一个函数AddNoise,参数分别为rdd,Fraction.其中rdd为(BreezeDenseMatrix, BreezeDenseMatrix)元组构成的RDD.Fraction为一 ...
- SK-Learn 全家福
SK-Learn API 全家福 最近SK-Learn用的比较多, 以后也会经常用,将Sk-Learn 所有内容整理了一下,整理思路,并可以备查. (高清图片可以用鼠标右键在单独窗口打开,或者保存到本 ...
- CS231n 2017 学习笔记01——KNN(K-Nearest Neighbors)
本博客内容来自 Stanford University CS231N 2017 Lecture 2 - Image Classification 课程官网:http://cs231n.stanford ...
- 《Andrew Ng深度学习》笔记1
深度学习概论 1.什么是神经网络? 2.用神经网络来监督学习 3.为什么神经网络会火起来? 1.什么是神经网络? 深度学习指的是训练神经网络.通俗的话,就是通过对数据的分析与计算发现自变量与因变量的映 ...
- javaSE基础(三)
泛型类:像ArrayList这样的特殊类,他们允许通过类型参数来指明使用的数据类型. 报装类:一种用于将基本类型的数据"封装"成对象的类. 装箱:将 基本类型的数据自动转换为对应类 ...
随机推荐
- shell_Day03
嗯,这是第二天,吧 wc word count 统计文本文件中的字符个数 -l 查看行数 -w 查看字符个数 -c 查看文件大小(字节) cut 用来分割文件内容 -d 指定分隔符,delimit ...
- AndroidQ 打通应用层到HAL层(转)
1. 参考https://blog.csdn.net/qq_34211365/category_9903135.html 直通式,绑定式,从应用端调到hal接口,亲自实现能够更加理解
- 基于注解的AOP
1.引入依赖 <!--spring aop依赖--> <dependency> <groupId>org.springframework</groupId&g ...
- javascript获取浏览器窗口分辨率|浏览器全屏分辨率|屏幕分辨率
浏览器窗口分辨率指显示网页的区域,在PC端由于浏览器窗口大小可调节,这个值是可变的.在手机等移动端浏览器窗口大小不可调节,宽度值是固定的,但竖屏和横屏切换会改变. 浏览器全屏分辨率是指浏览器启用全屏显 ...
- Salesforce 发送Email时遇到的问题(Case当中的Filed不出现Email选项:ケースのフィールドにメールタブが表示されない)。
普段はケースの発生源はメールと選択する場合.ディフォルトで「フィールド」の中に「メール」というタブが出てきますが. (平时当我们选择[Case]的[来源]为[Email]时,默认就会在field中出现 ...
- BIP去掉弹框中的参照的新增按钮
viewModel.get("material_class_name").on("afterInitVm", function (arg) { ...
- color-color diagram data
- kali WiFi相关研究(学习中...)
基础环境准备: 笔记本一台E470c(内置网卡 Qualcomm Atheros QCA9377 802.11ac) # 经过测试创建虚拟AP不成功 外置网卡一个:UGREEN 绿联AC1300M,芯 ...
- printf函数size_t的替换字符串zu
参考:https://stackoverflow.com/questions/2524611/how-can-one-print-a-size-t-variable-portably-using-th ...
- django的注意事项
1 允许 0.0.0.0:8000 ALLOWED_HOSTS = ['*'] 2 py文件的import ,要新建一个文件夹 如tool,与manage.py同级 再去导入