离散化

pyspark dataframe操作进阶

瘦欲@ 提交于 2019-12-05 10:42:45
​ 这一节主要讲的是spark在机器学习处理过程中常用的一列操作,包括获得各种预处理。 1.将多列转化成一列 ​ pyspark可以直接使用VectorAssembler来将多列数据直接转化成vector类型的一列数据。 1234567891011121314151617181920212223242526272829303132 from pyspark.ml.feature import VectorAssemblerdiscretization_feature_names = [ 'discretization_tag_nums', 'discretization_in_link_nums', 'discretization_out_link_nums', 'discretization_style_nums', 'discretization_local_img_nums', 'discretization_out_img_nums', 'discretization_local_script_nums', 'discretization_in_script_nums', 'discretization_out_script_nums']vecAssembler = VectorAssembler(inputCols=discretization_feature_names

[模板]离散化

混江龙づ霸主 提交于 2019-12-04 03:35:34
离散化可以将无限空间内的有限点映射到有限空间内。 在求解问题过程中涉及元素之间的 相对顺序 时可用离散化。 Code: #include<bits/stdc++.h> using namespace std; int a3[1000],a[1000],a2[1000]; int main() { int m,n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]);//原数组 a2[i]=a[i]; } sort(a2+1,a2+n+1); m=unique(a2+1,a2+n+1)-(a2+1);//排序并去重(仅将重复元素放至序列尾部) for(int i=1;i<=n;i++){ int pos=lower_bound(a2+1,a2+m+1,a[i])-a2; a3[i]=pos;//映射 } for(int i=1;i<=n;i++) printf("%d ",a3[i]);//离散后的数组 return 0; } 来源: https://www.cnblogs.com/cyanigence-oi/p/11829032.html

特征工程――特征转换

匿名 (未验证) 提交于 2019-12-03 00:27:02
无量纲化: 使不同规格尺度的数据转化统一规格尺度(将数据单位统一) 无量纲化方法:标准化, 区间所方法 x ′ = x x σ x ′ = x x σ 其中 x x 是均值, σ σ 是标准差 代码: #对 Amount字段--均值为0,方差为1标准化 from sklearn import preprocessing std = preprocessing.StandardScaler() #StandardScaler Amount = RFM[ 'Amount' ].values.reshape(- 1 , 1 ) std.fit(Amount) RFM[ 'Amount_std' ] = std.transform(Amount) RFM.head( 5 ) x ′ = x m i n ( x ) m a x ( x ) m i n ( x ) x ′ = x m i n ( x ) m a x ( x ) m i n ( x ) 代码: #对 Amount字段--[0,1]区间归一化 from sklearn import preprocessing M in Maxscaler = preprocessing.M in Maxscaler() #MinMaxscaler Amount = RFM[ 'Amount' ].values.reshape(- 1 , 1 )

数据挖掘(1)知识点总结

匿名 (未验证) 提交于 2019-12-03 00:19:01
详细文章转自:https://blog.csdn.net/sinat_22594309/article/details/74923643 数据挖掘的一般过程包括以下这几个方面: 1、 数据预处理 2、 数据挖掘 3、 后处理 一、数据预处理 主要手段分为两种:选择分析所需的数据对象和属性;创造或改变属性。 1.常见的几种预处理方法:聚集、抽样、维归约、特征子集的选择、 特征的创建、 离散化和二元化、 变量变换。 就是把相关或者类似的数据对象集合到一起,常常用在数据探索阶段。 另外,聚集还有一个功能就是可以 改变数据的分辨率 ,以适应不同目的的数据挖掘工作。 最常见的抽样方法通常是随机抽样, 但如果我们处理的数据是非对称的,那么通常我们要采取分层抽样 ,因为随机抽样有可能把我们的稀疏样本给淹没了。 目的就是降低数据集的维度以期减少我们的计算量。最简单的维归约方法就是去除无效或者不相关的特征。当然,除此之外,我们也有一些数学方法来进行降维,比如说主成分分析(PCA)和奇异值分解(SVD)。 维归约确实帮我们去除了一部分冗余的特征,但很多时候冗余的特征并不是我们靠经验就可以全部筛选出来的。这个时候,一方面我们依靠某些算法计算特征的重要程度来进行特征的筛选,比如树的一些算法。另一方面如果计算资源足够,我们可以尝试不同的特征组合选择效果最好的特征组合用于我们最后的数据挖掘任务。当然

离散化

匿名 (未验证) 提交于 2019-12-02 23:57:01
离散化:把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时间和空间效率。     即:先把大数据排序,然后对应排序前的顺序,并把排序后数据的下标记录到排序前数据相对应的位置     (百度解释:离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小)      思路:排序->删除重复元素->索引数据离散化后对应得值 STL 中 unique函数 的功能是元素去重。就是将重复的元素 保留一个在前面,其余的 移动到最后 。由于”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。 #include <iostream> #include <algorithm> #include <cassert> using namespace std ; static bool myfunc ( int i , int j ) { return ( i + 1 ) == j ; //return i == j; } int main () { vector <int> a = { 1 , 3 , 3 , 4 , 5 , 6 , 6 , 7 }; //省略排序步骤 vector <int> :: iterator it_1 = a . begin (); vector <int> :: iterator it_2 = a . end (); cout <

离散化

匿名 (未验证) 提交于 2019-12-02 23:49:02
离散化是指对于数据范围较大(1e9),但数的个数较少(1e5)的一些数进行操作(并查集等)时,需要通过比较这些数的相对大小,将其离散化,得到"1e5"以内的“离散化数值”,然后就可以将其储存在数组中,进行并查集等操作了。 当离散化的数据 无重复 时,可以通过记录数组下标,直接在结构体内进行排序等操作 当离散化的数据 存在重复 时,可以通过先排序(nlogn),再去重(因排序后数据有序,故复杂度从O(n^2)降到O(n),最后通过二分查找到数据的相对大小(离散化后的值)。 代码实现 数据无重复(略) 数据有重复: int tot=0; for(int i=1;i<=n;i++) { scanf("%d%d%d",&a[i].a1,&a[i].a2);san[++tot]=a[i].a1;san[++tot]=a[i].a2; } sort(san+1,san+tot+1,cmp1); m=unique(san+1,san+tot+1)-(san+1);//m表示去重后的数值大小,unique并未删除数据,只是将数据放在了数组末尾,因数据有序,复杂度为O(n) for(int i=1;i<=n;i++) { a[i].a1=query(a[i].a1);//query:二分查找(表示不会lower_bound,upper_bound,只能手打) a[i].a2=query(a[i]

数据离散化

匿名 (未验证) 提交于 2019-12-02 23:49:02
数据离散化 定义 :离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。 使用STL离散化步骤: 1、排序 2、去重 3、索引 代码如下: #include <iostream> #include <cstdio> #include <algorithm> using namespace std; int a[1005], b[1005], sub[1005]; //a[n]是即将被离散化的数组,b[n]是a[n]的副本,sub用于排序去重后提供离散化后的值 int main () { int n; cin >> n; for(int i = 0; i < n; i++) { scanf("%d", &a[i]); sub[i] = a[i]; b[i] = a[i]; } sort(sub, sub + n); int size = unique(sub, sub + n) - sub; //此处为数组去重,并获取去重后的长度 for(int i = 0; i < n; i++) { a[i] = lower_bound(sub, sub + size, a[i]) - sub; //即a[i]为b[i]离散化后对应的值,a[i]中的值是sub[i]中的下标 } for(int i = 0; i < size; i++) { printf("%d%c",

2019.7.15-7.20暑假集训总结

匿名 (未验证) 提交于 2019-12-02 23:49:02
// 7.18前三天的等我周日再继续复习总结orz _(:з」∠)_每一天都是充实的欧 7.15:差分与前缀和 7.16: 倍增与ST表 7.17:并查集进阶 7.18:树状数组与线段树 树状数组: 1 .引入lowbit(x) int lowbit(int i) { } -11=(0100+1)=0101 &1011 树状数组 c[x],比如c[4], 4的二进制是(100),100刚好是3位数, 所以这个树状数组到c[4]为止 高度 是3。 除了树根,c[x]的 父节点为 c[x+lowbit(x)] 能用树状数组尽量用树状数组,快,省空间。( 一般用来单点更新,区间求和,维护最大值二不能维护最小值。 但是 求区间最大值的时候复杂度比较高 容易TLE,这个时候还是需要用到 线段树 ) “细细观察二进制 树状数组追其根本就是二进制的应用” 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int M =100000+100; 4 int n,t; 5 int a[M],C[M]; 6 int lowbit(int x) 7 { 8 return x&(-x); 9 } 10 int sum(int x) 11 { 12 int ret=0; 13 while(x) 14 { 15 ret+=C[x]; 16 x-

AcWing 802. 区间和

匿名 (未验证) 提交于 2019-12-02 23:47:01
( https://www.acwing.com/problem/content/804/ ) 假定有一个无限长的数轴,数轴上每个坐标上的数都是0。 现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。 近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。 输入格式 第一行包含两个整数n和m。 接下来 n 行,每行包含两个整数x和c。 再接下里 m 行,每行包含两个整数l和r。 输出格式 共m行,每行输出一个询问中所求的区间内数字和。 数据范围 10 9 ≤ x ≤ 10 9 1 ≤ n , m ≤ 10 5 1≤n,m≤105, 10 9 ≤ l ≤ r ≤ 10 9 10000 ≤ c ≤ 10000 输入样例: 3 3 1 2 3 6 7 5 1 3 4 6 7 8 输出样例: 8 0 5思路:离散化+前缀和由于坐标的数据范围很大,那么将坐标离散化。排序去重后的新下标就是坐标离散化后的坐标。 #include <iostream> #include<algorithm> #include<vector> using namespace std; const int maxn = 3e5+10; typedef pair<int,int> pll; int a[maxn]; int s[maxn]; vector

数据挖掘 第7章 关联分析:高级概念

匿名 (未验证) 提交于 2019-12-02 23:41:02
第7章 关联分析: 高级概念 本章就扩展到具有二元属性、分类属性和连续属性的数据集。 扩充到包含 序列 和 图形 如何扩展传统的Apriori算法来发现这些模式 7.1 处理分类属性 将分类属性和对称二元属性转换成项,就可以用已有的关联规则挖掘算法;将每个不同的属性-值对创建一个新的项(即转化为非对称二元属性)来实现 将关联分析用于二元化后的数据时,需要考虑如下问题: 合并不太频繁的属性值变成一个称作其他的类别。 删除某些出现频率很高的属性;或者使用处理具有宽支持度的极差数据集的技术 避免产生包含多个来自同一个属性的项的候选项集。例如:不必产生诸如{州=X,州=Y,…}的候选项集,因为该项集支持度为零。 7.2 处理连续属性 量化关联规则:包含连续属性的关联规则通常 三类方法对连续数据进行关联分析 基于离散化的方法 基于统计学的方法 非离散化方法 7.1 基于离散化的方法 离散化技术:等宽、等频、聚类 区间宽度问题: 区间太宽,缺乏置信度 区间太窄,缺乏支持度 区间宽度解决方法:考虑邻近区间的每种可能的分组(即等步长的渐渐加大区宽),但这也导致了: 计算开销非常大 ―― 可以使用最大支持度阈值,防止创建对应于非常宽的区间的项,并减少项集的数量 提取许多冗余规则 7.2 基于统计学的方法 量化关联规则可以推断总体的统计性质 包括规则产生和规则确认 规则产生:先找到需要关注的目标属性