离散化

数据挖掘与数据仓库――数据预处理

匿名 (未验证) 提交于 2019-12-02 23:34:01
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/budding0828/article/details/90311670 数据预处理 为什么要进行预处理 现实世界的数据很“脏” 不完整的: 缺少属性值, 感兴趣的属性缺少属性值, 或仅包含聚集数据 如, occupation=“ ” 来源于:收集数据时,在不同的阶段具有不同的考虑;人/硬件/软件的问题等。 含噪声的: 包含错误或存在孤立点 如, Salary=“-10” 来源于:收集阶段;数据传输阶段等。 不一致的: 在名称或代码之间存在着差异 如, Age=“42” Birthday=“03/07/1997” 如, 原来排序 “1,2,3”, 现在排序 “A, B, C” 来源于:不同的数据源;功能依赖冲突。 数据预处理的主要任务 数据清洗(Data cleaning) 填充遗失的数据, 平滑噪声数据, 辨识或删除孤立点, 解决不一致性问题 数据集成(Data integration) 对多个数据库,数据立方或文件进行集成 数据变换(Data transformation) 规范化与聚集(Normalization and aggregation) 数据约简(Data reduction) 得到数据集的压缩表示,它小的多,但能够产生同样的(或几乎同样的)分析结果 数据离散化

数据挖掘入门 -

℡╲_俬逩灬. 提交于 2019-12-02 19:36:17
一、概念性名词 1、数据的离散化 有些数据本身很大, 自身无法作为数组的下标保存对应的属性。如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理。当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。 例如: ①原数据:1,999,100000,15;处理后:1,3,4,2; ②原数据:1234567、123456789、12345678、123456 排序:123456<1234567<12345678<123456789 =>1<2<3<4 那么这4个数可以表示成:2、4、3、1 2、概念分层 通过使用高层的概念(比如:老年,中年,青年)来替代底层的属性值(比如:实际的年龄数据值)来规约数据。概念分层可以用树来表示,树的每一个节点代表一个概念(比如:按地区划分世界) 3、过拟合 一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。出现这种现象的主要原因是训练数据中存在噪音或者训练数据太少。 来源: https://www.cnblogs.com/GjqDream/p/11760910.html

模板——后缀数组

守給你的承諾、 提交于 2019-12-02 13:00:02
后缀数组的详解参见此博客: https://www.cnblogs.com/victorique/p/8480093.html 这里主要理一下思路和注意点 后缀数组基本介绍: 后缀数组就是对一个字符串的$n$个后缀进行排序,但是考虑到每一个字符串都有一个长度,一位位比下来肯定炸飞,所以要优化。 先对于每一个字符进行离散化,每次按照倍增和前面的字符合并,然后合并后进行双关键字排序,再离散化,直至没有完全相同的值为止 总复杂度为$O(nlog(n))$ 代码思路:第一次先预处理离散化,再塞进桶里。后面每次都是二维桶排序,再离散化合并,更新桶,每次用一个pair数组维护双关键字排序的数组信息 (之前没用pair,全用离散化数组num,结果第二关键字就被吃了。。) 代码: #include <bits/stdc++.h> using namespace std; const int N=1020000; int sa[N],rk[N],n; char s[N]; pair<int,int> t[N]; int totb=0,tota=0; int a[N],b[N],num[N];//now:桶的个数 int pre[N],ord[N],cnt[N];//排名为i的id bool base_sort() { int bl=1; for(int i=2;i<=n;i++) if(num

【luogu P1442铁球落地】题解

混江龙づ霸主 提交于 2019-12-02 08:53:27
铁球落地 题目描述 N(n≤100000)个平台上空有一个铁球,球每次落到某个平台上后,游戏者可以选择向左或向右滚,球滚动和落下的速度都是1。由于铁球的质量不太好,每次落下的高度不能超过MAX。设计一种策略,使得球尽快落到地面而不被摔碎。假设地面高度为0,且无限宽。 输入格式 第一行是两个数n,max。 第二行两个数,分别表示铁球起始位置的横纵坐标。 接下来n行,第i行是三个正整数hi,li,ri, 输入数据保证有解,且平台的高度互不相同、各边缘与横坐标的值均互不相同。 输出格式 仅一个数,为铁球到达地面的最短时间。 输入输出样例 输入 #1 复制 5 3 6 10 5 2 4 9 3 9 6 7 10 2 1 5 3 8 11这题应该不难想到使用dp求解。我们先将每块木板按照高度排序。然后我们按照从矮到高的顺序倒序遍历这些木板。可能你会问为什么要从矮到高的顺序dp。其实从高到到矮的顺序dp,其实从高到矮并不是不可以。但从低到高会来的更方便。因为从低到高的话,我们只需要考虑从左边下落到达的木板,和从右边下落到达的两个木板继承就可以了。然而从高到低我们并不方便找到哪些下落可以到达该木板。以上都是废话假若我们已经求得了这个木板左右下落会到达哪些木板,我们记 ch[i][1/0] 0表示i的左边下落到达的木板,1表示右边下落到达的木板。    dp[i][1/0]

特征表达及处理

懵懂的女人 提交于 2019-12-02 03:39:12
转自: https://www.cnblogs.com/pinard/p/9061549.html 在 特征选择 中,讲到了特征选择的一些要点。本篇继续讨论特征工程,重点关注于特征表达部分,即如果对某一个特征的具体表现形式做处理。主要包括缺失值处理,特殊的特征处理比如时间和地理位置处理,离散特征的连续化和离散化处理,连续特征的离散化处理几个方面。 1. 缺失值处理 特征有缺失值是非常常见的,大部分机器学习模型在拟合前需要所有的特征都有值,不能是空或者NULL。那么如果有缺失值我们需要怎么处理呢?    首先我们会看是该特征是连续值还是离散值。如果是连续值,那么一般有两种选择,一是选择所有有该特征值的样本,然后取平均值,来填充缺失值,另一种是取中位数来填充缺失值。如果是离散值,则一般会选择所有有该特征值的样本中最频繁出现的类别值,来填充缺失值。在sklearn中,可以使用preprocessing.Imputer来选择这三种不同的处理逻辑做预处理。 2. 特殊的特征处理   有些特征的默认取值比较特殊,一般需要做了处理后才能用于算法。比如日期时间,比如显示20180519,这样的值一般没办法直接使用。那么一般需要如何变换呢? 对于时间原始特征,处理方法有很多,这里只举例几种有代表性的方法。 第一种是使用连续的时间差值法,即计算出所有样本的时间到某一个未来时间之间的数值差距

A#G/C013

ⅰ亾dé卋堺 提交于 2019-12-02 01:55:27
A#G/C013 A Sorted Arrays 不会/kk B Hamiltonish Path 我是傻逼 如果一条路径不合法,那么把不合法的端点向没出现过的相邻点连过去救星了 C Ants on a Circle 我是傻逼 显然最后的位置可以直接求出,环上相对位置不变。 然后要确定一个位置的答案 假设每个蚂蚁手上有一只鸡,鸡的数字递增相遇就交换手上的鸡,不改变方向 那么蚂蚁1如果向右走,由于相对位置不变每交换一次鸡的数字会增加1 交换鸡的次数就是蚂蚁1碰到其他蚂蚁的次数,可以直接算出来 D Piling Up 每次操作球的变化量最多是1,可以dp记录每次的黑球量,然而有重复,多加一维记第二维是否触底就行了 E Placing Squares 首先可以容斥, \(F_i=f(x_i)-\sum_{j<i}f(x_i-x_j)F_j\) \(f(x)\) 就是长度为 \(x\) 的区间分正方形的权值和 打表发现是http://oeis.org/A033453然后可以矩乘优化转移 \(f\) 递推式是 \(f_i=\sum_{j<i}(i-j)^2f_j\) 考虑平方的意义就是区间内放两个球的方案数所以可以 \(f[0/1/2]\) 表示放了几个球,也可以矩乘优化 F Two Faced Cards 神仙题 首先离散化 \(C\) ,按照 \(C\) 离散化 \(A,B\) ,现在

常用技巧——离散化

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

KinectFusion 介绍

ぐ巨炮叔叔 提交于 2019-12-01 18:22:49
原文链接 KinectFusion简介 KinectFusion是微软在2011年发表的一篇论文里提到的点云重建的方法,论文题目是:KinectFusion: Real-Time Dense Surface Mapping and Tracking。点云是用Kinect采集的,然后算法把这些点云注册对齐,融合成一个整体点云。 Kinect是一个RGBD扫描仪,它可以同时采集彩色图像和深度图像。这是第一代Kinect和第二代Kinect的外观比较。 Kienct每秒可以获取30帧的RGBD图像,光线暗的情况下帧率会下降一些。 这是一个典型的KinectV2的数据。左边是带颜色的点云,右边的点云去掉了颜色,并且计算了法线信息。KinectFusion处理的是深度数据,像右边这种没有带颜色的点云。Kinect数据的详细介绍可以参考专题 Kinect数据 KinectFusion的核心有两个技术,一个是ICP注册,一个是符号距离函数。它的思路是一边注册,一边融合。由于是深度视频,帧与帧之间的位置差别不大,点云可以看作是初始注册好的,所以可以直接应用ICP进行精细注册。融合采用了符号距离函数技术,它在空间中定义了一个曲面的距离场,0等值面则为测量的曲面。 KinectFusion算法 下面介绍一下KinectFusion的算法步骤: 1. 生成三维点云:Kinect采集的原始数据是深度图像

线段树入门之成段更新

喜夏-厌秋 提交于 2019-12-01 13:02:00
作者:zifeiy 标签:线段树 HDU1698 Just a Hook 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 线段树功能: update:成段更新(因为query操作只涉及一次总区间,所以可以直接输出1节点的信息) #include <bits/stdc++.h> using namespace std; #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 const int maxn = 100010; int sum[maxn<<2], lazy[maxn<<2]; inline void push_up(int rt) { sum[rt] = sum[rt<<1] + sum[rt<<1|1]; } inline void push_down(int rt, int len) { if (lazy[rt]) { // 只有在有延迟标记(说明之前全区间覆盖过)才生效 int l_len = len-len/2, r_len = len/2; lazy[rt<<1] = lazy[rt<<1|1] = lazy[rt]; sum[rt<<1] = l_len * lazy[rt]; sum[rt<<1|1] = r_len * lazy[rt]; lazy

数据离散化与Python实现

可紊 提交于 2019-11-30 14:22:49
一、原理 数据离散化(也称,数据分组),指将连续的数据进行分组,使其变为一段离散化的区间。 根据离散化过程中是否考虑类别属性,可以将离散化算法分为: 有监督算法 和 无监督算法 。事实证明,由于有监督算法充分利用了类别属性的信息,所以再分类中能获得较高的正确率。 常用的数据离散化方法: 等宽分组 等频分组 单变量分组 基于信息熵分组 数据离散化所使用的方法需要事先对数据进行排序,且假设待离散化的数据是按照升序排序。 1、等宽分组 原理:根据分组的个数得出固定的宽度,分到每个组中的变量的宽度是相等的。 如:现在有一个待离散化的数组[1, 7, 12, 12, 22, 30, 34, 38, 46],需要分成三组, 那么, ,即宽度 =( 46 - 1)/3 = 15 分组后结果范围:[1,16],(16, 31],(31, 46],第一个分组取的是全闭区间, 分组后结果:[1, 7, 12, 12],[22, 30],[34, 38, 46] 2、等频分组 原理:等频分组也叫分位数分组,即分组后,每个分组的元素个数是一样的。 如:现在有一个待离散化的数组[1, 7, 12, 12, 22, 30, 34, 38, 46],需要分成三组, 那么, ,即每组元素的个数 = 9 / 3 = 3 分组后的结果:[1, 7, 12],[12, 22, 30], [34, 38, 46] 3