拉依达准则 剔除异常点

摘要:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceTool{//////拉依达准则剔除异常数据///publicclassLaida{//////初始化?///publicLaida(){}///˂s
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Tool
{
	/// <summary>
	/// 拉依达准则 剔除异常数据
	/// </summary>
	public class Laida
	{
		/// <summary>
		/// 初始化?
		/// </summary>
		public Laida()
		{
		}


		/// <summary>
		/// 平均值
		/// </summary>
		/// <returns></returns>
		static double SetMean<T>(IList<T> list, double sum)
		{
			return sum / list.Count;
		}


		/// <summary>
		/// 标准差
		/// </summary>
		/// <returns></returns>
		static double StandardDeviation<T>(IList<T> list, double mean, Func<T, double> func)
		{
			IList<double> listXi = new List<double>();
			foreach (var kv in list)
			{
				listXi.Add((func(kv) - mean) * (func(kv) - mean));
			}
			double sumXi = listXi.Sum();

			double d2 = sumXi / (list.Count - 1);
			double d = Math.Sqrt(d2);
			return d;
		}


		static IList<T> GetGood<T>(IList<T> list, double mean, Func<T, double> func)
		{
			double sd3 = StandardDeviation(list, mean, func) * 3;//3倍标准差
			IList<T> resList = new List<T>();
			foreach (var kv in list)
			{
				if (Math.Abs(func(kv) - mean) < sd3)
				{
					resList.Add(kv);
				}
			}
			return resList;
		}

		/// <summary>
		/// 拉依达剔除异常数据
		/// </summary>
		/// <param name="list">List<T>数组</param>
		/// <param name="sum">需要剔除字段的总值</param>
		/// <param name="func">需要剔除的字段</param>
		/// <returns></returns>
		public static IList<T> GetGoodList<T>(IList<T> list, double sum, Func<T, double> func)
		{
			//平均值
			var mean = SetMean(list, sum);
			bool isRun = true;
			IList<T> reslist = list;
			while (isRun)
			{
				int num = reslist.Count;
				reslist = GetGood(list, mean, func);
				if (reslist.Count == num)
				{
					isRun = false;
				}
			}
			return reslist;
		}
	}
}

免责声明:文章转载自《拉依达准则 剔除异常点》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xml_python_查看xml中所有的标记数据缓存、动态页面静态化、网站优化(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

渐变颜色LinearGradientBrush

LinearGradientBrush是用来渐变效果的,使用的初始化参数是矩形区域,开始颜色,结束颜色,颜色变化方向,它能够形成比较统一的渐变效果,对比PathGradientBrush的渐变,它的特点是它与周围的颜色渐变频率是一样的,设置LinearGradientBrush的区域大小时,可以想象一个大的有渐变色的长方形,压在多边形上面,并根据多边形的边...

ASP.NET中自定义控件的创建和使用(转)

        在asp.net中创建和使用自定义控件为我们编写程序带来了灵活性,并且能够保护程序源码的版权。其思想是:建立一个cs文件,在该文件中创建的控件必须继承System.Web.UI.Control类,可以为控件创建属性、方法和事件。然后编译成为程序集,放到Bin目录下,剩下的就是如何使用了。       本文通过一个实倒对自定义控件的创建和使用...

ORACLE 体系结构

本文内容来自王二暖11G视频讲解 oracle工作原理: 1)、在数据库服务器上启动Oracle实例;2)、应用程序在客户端的用户进程中运行,启用Oracle网络服务驱动器与服务器建立连接;3)、服务器运行Oracle网络服务驱动器,建立专用的服务器进程执行用户进程;4)、客户端提交事务;5)、服务器进程获取sql语句并检查共享池中是否有相似的sql语句...

利用JDBC连接Oracle数据库(转)

http://blog.csdn.net/wahaha1_/article/details/8512438 JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术。 一、JDBC基础知识 JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问...

基于数据库的vs2019的T4模版代码生成器(一)基于sqlserver数据库

总体介绍 参考文档: https://www.cnblogs.com/laozhang-is-phi/p/9757999.html 只想用 ADO.NET 搭建多层框架,动软代码生成器是一个不错的选择。 T4 (Text Template Transformation Toolkit) 是微软官方在 VisualStudio 2008+ 中开始使用的代码生...

C# 获取枚举 Enum 变量值的 Description 属性

在C#中如何读取枚举值的描述属性? 在C#中,有时候我们需要读取枚举值的描述属性,也就是说这个枚举值代表了什么意思。比如本文中枚举值 Chinese ,我们希望知道它代表意思的说明(即“中文”)。 有下面的枚举: 1 2 3 4 5 6 public enum EnumLanugage {     [System.ComponentMode...