需要源码和PPT请点赞关注收藏后评论区留言私信~~~
在数据预处理过程中,不同的数据适合不同的数据挖掘算法。数据变换是一种将原始数据变换成较好数据格式的方法,以便作为数据处理前特定数据挖掘算法的输入。数据离散化是一种数据变换的形式
一、数据变换的策略
1. 光滑 数据光滑用于去掉数据中的噪声。常用的数据平滑方法有分箱、回归和聚类等方法
2. 属性构造 属性构造是通过由给定的属性构造新的属性并添加到属性集中,以帮助数据挖掘
3. 聚集 聚集是对数据进行汇总或聚集。例如,可以聚集日销售数据,计算月和年销售量。通常,聚集用来为多个抽象层的数据分析构造数据立方体
4. 规范化 把属性数据按比例缩放,使之落入一个特定的小区间,如-1.0~1.0
(1)最小-最大规范化
(2)z分数规范化
(3)小数定标
5. 离散化
1)通过分箱离散化 分箱是一种基于指定的箱个数的自顶向下的分裂技术。例如使用等宽或等频分箱,然后用箱均值或中位数替换箱中的每个值,可以将属性值离散化。分箱对用户指定的箱个数很敏感,也易受离群点的影响
(2)通过直方图离散化 直方图把属性A的值划分为不相交的区间,称作桶或箱。可以使用各种划分规则定义直方图。如在等宽直方图中,将值分成相等分区或区间。直方图分析算法可以递归地用于每个分区,自动地产生多级概念分层,直到达到一个预先设定的概念层数,过程终止
(3)通过聚类、决策树和相关分析离散化
6. 由标称数据产生概念分层
对于标称数据,概念分层可以基于模式定义以及每个属性的不同值个数产生。使用概念分层变换数据使得较高层的知识模式可以被发现。它允许在多个抽象层进行挖掘
二、Python数据变换与离散化
1. 数据规范化
数据分析的预处理除了数据清洗、数据合并和标准化之外,还包括数据变换的过程,如类别型数据变换和连续型数据的离散化
数据规范化示例
import pandas as pd import numpy as np a=[47, 83, 81, 18, 72, 41] b=[56, 96, 84, 21, 87, 67] data=np.array([a, b]).T dfab = pd.DataFrame(data, columns=['A', 'B']) print('最小-最大规范化:\n',(dfab- dfab.min())/(dfab.max()- dfab.min())) print('零均值规范化:\n',(dfab- dfab.mean())/dfab.std())
2. 类别型数据的哑变量处理
类别型数据是数据分析中十分常见的特征变量,但是在进行建模时,Python不能像R那样去直接处理非数值型的变量,因此往往需要对这些类别变量进行一系列转换,如哑变量
哑变量(Dummy Variables)用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1
Python中利用pandas库中的get_dummies函数对类别型特征进行哑变量处理
数据的哑变量处理
df = pd.DataFrame([ ['green', 'M', 10.1, 'class1'], ['red', 'L', 13.5, 'class2'], ['blue', 'XL', 14.3, 'class1']]) df.columns = ['color', 'size', 'prize','class label'] print(df) pd.get_dummies(df)
3.连续型变量的离散化
数据分析和统计的预处理阶段,经常会碰到年龄、消费等连续型数值,而很多模型算法尤其是分类算法都要求数据是离散的,因此要将数值进行离散化分段统计,提高数据区分度
常用的离散化方法主要有等宽法、等频法和聚类分析法
(1)等宽法
将数据的值域划分成具有相同宽度的区间,区间个数由数据本身的特点决定或者用户指定
Pandas提供了cut函数,可以进行连续型数据的等宽离散化。cut函数的基础语法格式为:
pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3)
(2)等频法
cut函数虽然不能够直接实现等频离散化,但可以通过定义将相同数量的记录放进每个区间
cut方法应用
np.random.seed(666) score_list = np.random.randint(25, 100, size = 10) print('原始数据:\n',score_list) bins = [0, 59, 70, 80, 100] score_cut = pd.cut(score_list, bins) print(pd.value_counts(score_cut)) # 统计每个区间人数
等频法离散化连续型数据
def SameRateCut(data,k): k = 2 w = data.quantile(np.arange(0,1+1.0/k,1.0/k)) data = pd.cut(data,w) return data result = SameRateCut(pd.Series(score_list),3) result.value_counts()
(3)聚类分析法
一维聚类的方法包括两步,首先将连续型数据用聚类算法(如K-Means算法等)进行聚类,然后处理聚类得到的簇,为合并到一个簇的连续型数据做同一标记。聚类分析的离散化需要用户指定簇的个数,用来决定产生的区间数
创作不易 觉得有帮助请点赞关注收藏~~~