离散化中主要的工作是针对连续数据的离散化,包括两方面:将连续数据分成多个区间、将连续数据划分成特定的类。前者通常被称为分箱。具体有以下几种实现方法:
(1)自定义分箱自定义分箱,是指根据业务经验或者常识等自行设定划分的区间,然后将原始数据归类到各个区间中。
(2)等宽分箱等宽分箱,是指划分的各个区间的宽度(或称为距离)相等。
(3)等频分箱等频分箱,是指划分的各个区间包含的数据点的个数相等,也称为等深分箱,或者是分位数分箱。
(4)聚类法聚类法,是指使用聚类算法自动将原始数据分成多个类别。
(5)二值化二值化,是指设置一个阈值,将每个数据点与这个阈值进行比较,大于(或等于)阈值取某一固定值A,小于(或等于)阈值则取另一固定值B,从而将原始数据转换为两个取值的离散数据。
### 针对连续数据的离散化 #### (1)自定义分箱 points = [0,800,1500,2000,2500] #定义边界点 dataset['new_col7'] = pd.cut(dataset['col7'], points) dataset['new_col7'] = pd.cut(dataset['col7'], points, labels = ['a','b','c','d']) #### (2)等宽分箱 bins = 4 #箱数 dataset['new_col7'] = pd.cut(dataset['col7'], bins) dataset['new_col7'] = pd.cut(dataset['col7'], bins, labels = ['a','b','c','d']) #### (3)等频分箱 bins = 4 #箱数 dataset['new_col7'] = pd.qcut(dataset['col7'], bins) dataset['new_col7'] = pd.qcut(dataset['col7'], bins, labels = ['a','b','c','d']) #### (4)聚类法 from sklearn.cluster import KMeans data = dataset['col7'] new_data = data.reshape((data.shape[0], 1)) kmeans = KMeans(n_clusters=4, random_state=0) # 使用K-Means聚类 keames_result = kmeans.fit_predict(new_data) dataset['new_col7'] = keames_result #### (5)二值法 from sklearn import preprocessing binarizer_scaler = preprocessing.Binarizer(threshold = dataset['col7'].mean()) #使用均值作为分割阈值 temp = binarizer_scaler.fit_transform(dataset['col7']) temp.resize(dataset['col7'].shape) dataset['new_col7'] = temp降维是指降低数据集的维度数量,从而降低模型的计算工作量,减少模型的运行时间,减弱噪声变量(无关变量)对模型结果可能产生的影响。
5.1 基于特征选择的降维基于特征选择的降维,通俗的说,就是特征筛选,或者叫变量筛选。从多个变量中筛选出更有用的较少个变量,从而降低数据集的维度。特征筛选的主要方法包括:基于经验的方法(比如专家法)、基于统计的方法(比如区分度、信息增益)和基于机器学习的方法(比如决策树算法)。
基于特征选择的降维的好处是,既保留了原有维度的特征,同时又完成了降维的目的。
由于特征筛选是数据准备工作的一个重要环节,因此会单独拿出来进行总结论述,此处不做详细讨论。
基于维度转换的降维,是指按照一定的数学变换方法,把给定的一组(相关的)变量,通过数学模型从高维空间映射到低维度空间中,然后利用映射后产生的新变量来表示原有变量的总体特征,转换后产生的新特征是多个原始特征的综合。
具体的方法分为线性降维和非线性降维,常用的算法有主成分分析、因子分析、线性判别分析等。
关于具体的算法原理,后续将在统计学或机器学习系列中进行总结论述,此处不做讨论。
基于维度转换的降维将使用转换后产生的新变量参与后续的建模分析,因此直接影响到模型的可解释性和可理解性,在不要求对模型进行解释说明时可以使用,否则,建议使用基于特征选择的降维。
[1] 数据挖掘概念与技术
[2] 数据挖掘导论
[3] Python机器学习基础教程
[4] Python数据分析与数据化运营
[5] Python数据分析与数据挖掘实战