离散化

数据标准化和离散化

泪湿孤枕 提交于 2019-11-30 00:36:30
数据的标准化 标准化数据的目的:将数据转化为同一量级,避免量级对结果产生不利的影响 数据转化的三种方式:离差标准化,标准差标准化,小数定标标准化 离差标准化 Ø 数据的整体分布情况并不会随离差标准化而发生改变,原先取值较大的数据,在做完离差标准化后的值依旧较大。 Ø 当数据和最小值相等的时候,通过离差标准化可以发现数据变为0。 Ø 若数据极差过大就会出现数据在离差标准化后数据之间的差值非常小的情况。 Ø 同时,还可以看出离差标准化的缺点:若数据集中某个数值很大,则离差标准化的值就会接近于0,并且相互之间差别不大。若将来遇到超过目前属性[min,max]取值范围的时候,会引起系统出错,这时便需要重新确定min和max。离差标准化的特点 # 1, 离差标准化 --- (x-min)/(max-min) # 将数据转化为【0,1】之间 # 容易受到异常点的影响 def deviation ( data ) : ''' 离差标准化 :param data: 传入数据 :return: 标准化之后的数据 ''' data = ( data - data . min ( ) ) / ( data . max ( ) - data . min ( ) ) return data 标准差标准化 标准差标准化也叫零均值标准化或分数标准化,是当前使用最广泛的数据标准化方法。 # 2,标准差标准化 --

P3740 [HAOI2014]贴海报

落花浮王杯 提交于 2019-11-29 03:28:36
线段树 \(O(nlogn)\) 本来是做过这道题的,原题是POJ2528 Mayor's posters 但是POJ上的数据有问题,导致我以为自己AC了。像这种区间的题尤其要注意离散化时要离散化左右边界 举个洛谷上的例子 当出现这种情况[5,7],[1,5],[7,8]按顺序覆盖的话,就会出问题: 离散化为区间[2,3],[1,2],[3,4]那么按这样覆盖就会把第一张海报覆盖掉,但实际上第一张海报没有完全被覆盖 那该怎么办?solution:在每个离散区间中强行加一个点比如说在[1,5]加上2,[5,7]加上6,[7,8]由于是相邻的所以不要加 这样问题就解决了 回顾这道题,因为是区间修改,所以可以用线段树。查询答案时既可以递归到叶子节点再返回,也可以遇到一个有颜色的区间便返回。在维护上传标记时,若左右儿子颜色相同才上传,否则不上传 这是修改后的代码 #include<bits/stdc++.h> using namespace std; #define go(i,a,b) for(int i=(a);i<=(b);++(i)) #define com(i,a,b) for(int i=(a);i>=(b);--(i)) #define mem(a,b) memset((a),(b),sizeof(a)) #define inf 0x3f3f3f3f #define fin

【技巧】——离散化

混江龙づ霸主 提交于 2019-11-28 10:32:19
参考自 百度百科 : 当数据值域很大但是数据个数不多的情况下,我们需要对数据进行离散化,这样方便我们处理数据。 离散化有三个步骤:   1.排序   2.去重   3.索引 用stl就能很好的实现: 举一个新鲜的例子: 1 n=read(); 2 for(int i=1;i<=n;i++){ 3 h_[i]=read(); 4 h[i]=h_[i]; 5 } 6 sort(h_+1,h_+n+1); 7 // int size=unique(h_+1,h_+n+1)-h_; 如果有重复元素的话 8 for(int i=1;i<=n;i++){ 9 h[i]=lower_bound(h_+1,h_+n+1,h[i])-h_; 10 } 11 for(int i=1;i<=n;i++) printf("%d ",h[i]); 输入: 5 -1 23 -34 5 6 输出: 2 5 1 3 4 来源: https://www.cnblogs.com/Nelson992770019/p/11404949.html

LR 特征离散化

Deadly 提交于 2019-11-28 08:32:30
LR模型介绍: https://xingqijiang.blog.csdn.net/article/details/81607994 在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点: (1)离散特征的增加和减少都很容易,易于模型的快速迭代; (2)稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展; (3)离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰; (4)逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合; (5)离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力; (6)特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问; (7)特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。 来源: https://blog.csdn.net/jxq0816/article/details/100045403

[转]卡方分箱中卡方值的计算

白昼怎懂夜的黑 提交于 2019-11-28 08:06:21
关于卡方分箱,网上有很多文章,但几乎没有文章介绍分箱时相邻区间卡方值计算的方法,而本文在介绍卡方分箱的同时,重点介绍了相邻区间卡方值的计算方法。通过本文,希望大家能对卡方分箱有清楚透彻的认识。 分箱是什么 分箱是将连续的变量离散化,将多状态的离散变量合并成少状态。这里要注意的是,不仅仅是连续变量要分箱,状态多的离散变量也需要分箱,之前接触过公司内特征工程的项目,里边就将超过50个值的离散特征视为连续特征。 基本思想 对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。 而低卡方值表明它们具有相似的类分布 。 卡方值的计算方法 对于下面的例子,相邻两个特征值的卡方值的计算方法是这样的: feature y 0 y 1 x 1 a b x 2 c d ... ... ... x n ... ... x 1 和x 2 的卡方值计算公式为: 卡方值计算公式 为什么低卡方值就表示x 1 和x 2 具有相似的类分布呢?可以这样想,当x 1 和x 2 具有相似的类分布的时候,卡方值是怎么样的。卡方值的一般计算公式是这样的: 卡方值的一般公式 其中,A为观测的值,T为理论的值。观测值就是表中样本的数据,那么理论值是什么?其实就是忽略x 1 和x 2 的影响计算出来的值,把x 1 和x 2 合并起来看待

HDOJ-6681(离散化+线段树)

夙愿已清 提交于 2019-11-28 06:12:38
Rikka With Cake HDOJ-6681 最终的答案为射线的交点数加一。当然,我们也可以证明。证明需要用到欧拉公式 V−E+F=2 V-E+F=2V−E+F=2 。设射线的交点共 c cc 个。则在这个图中,V=K+4+K+c=2K+c+4 V=K+4+K+c=2K+c+4V=K+4+K+c=2K+c+4 , E=2∑(ci+1)+K+4=2K+2c+4 E=2\sum (c_i+1)+K+4=2K+2c+4E=2∑(ci+1)+K+4=2K+2c+4 。因此 F=2−V+E=c+2 F=2-V+E=c+2F=2−V+E=c+2 。减去外面的无穷区域,得出答案为 c+1 c+1c+1 。 原文链接: https://blog.csdn.net/qq_43549984/article/details/99762559 首先需要先按y的值进行从小到大排序。 再对y进行离散化,所谓离散化就是将y排序后的点放在一个数组中,用点在数组中的序号代替y,达到缩小范围的作用。 其次再根据x从小到大排序,因为要根据x开始遍历。首先从左到右遍历方向指向左的点,计算交点。如果是上下方向的则update线段树记录每个点的y覆盖的线段的长度。再从右到左遍历。 #include<iostream> #include<cstdio> #include<cstring> #include<string>

数据离散化处理

☆樱花仙子☆ 提交于 2019-11-27 12:43:40
百度百科(离散化): 离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。 通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。例如: 原数据:1,999,100000,15;处理后:1,3,4,2; 原数据:{100,200},{20,50000},{1,400}; 处理后:{3,4},{2,6},{1,5}; 用法: 很多算法的复杂度与数据中的最大值有关,比如树状数组和纯用数组实现的一对一标记。时常会遇到这种情况:数据的范围非常大或者其中含有负数,但数据本身的个数并不是很多(远小于数据范围)。在这种情况下,如果每个数据元素的具体值并不重要,重要的是他们之间的大小关系的话,我们可以先对这些数据进行离散化,使数据中的最大值尽可能小且保证所有数据都是正数。 例如,有这样一个长为5的序列:102131511,123,9813186,-611,55。其中有非常大的数以及负数,会给许多算法的实现带来困扰,我们可以把这个序列离散化,使它变成这样:5,3,4,1,2。各个元素间的大小关系没有任何改变,但数据的范围一下子就变得很舒服了。 离散化的原理和实现都很简单。为了确保不出错且尽可能地提高效率,我们希望离散化能实现以下几种功能:1.保证离散化后的数据非负且尽可能的小2.离散化后各数据项之间的大小关系不变,原本相等的也要保持相等。由此

常用技巧—离散化

China☆狼群 提交于 2019-11-27 00:00:04
“离散化,就是把无限空间中有限的个体映射到有限的空间中去,以提高算法的时空效率。” 很多算法的复杂度与数据中的最大值有关,比如树状数组和纯用数组实现的一对一标记。时常会遇到这种情况: 数据的范围非常大或者其中含有负数,但数据本身的个数并不是很多 (远小于数据范围)。在这种情况下, 如果每个数据元素的具体值并不重要,重要的是他们之间的大小关系的话,我们可以先对这些数据进行离散化 ,使数据中的最大值尽可能小且保证所有数据都是正数。 例如,有这样一个长为5的序列:102131511,123,9813186,-611,55。其中有非常大的数以及负数,会给许多算法的实现带来困扰,我们可以把这个序列离散化,使它变成这样:5,3,4,1,2。各个元素间的大小关系没有任何改变,但数据的范围一下子就变得很舒服了。 离散化的原理和实现都很简单。为了确保不出错且尽可能地提高效率,我们希望离散化能实现以下几种功能:1.保证离散化后的数据非负且尽可能的小2.离散化后各数据项之间的大小关系不变,原本相等的也要保持相等。由此,找出数据项在原序列中从小到大排第几就是离散化的关键。 可以通过下面的方法以O(nlong)的时间复杂度完成离散化,n为序列长度。 对原序列进行排序,使其按升序排列。 去掉序列中重复的元素。 此时序列中各位置的值和位置的序号就是离散化的映射方式。 例如:对于序列105,35,35,79,-7