数据预处理(二)
数据预处理(一) 数据预处理(一)主要是讲解了在数据挖掘中对数据的清洗,空值处理和去量纲化处理。
接下来我会着重讲解在数据挖掘中如何进行数据降维。
数据降维
数据降维是将众多原始数据,删除重复的或无用的信息,保留大部分重要信息,从而可以代替原始数据输入。
在众多的数据中,往往有许多数据是无用且不必要的,甚至会干扰到预测结果的判断,这些干扰的数据可称为数据中的干扰项。为了减少在做预测数据结果时的干扰项影响,提取有效的信息,提高机器学习判断的正确率,需要对数据进行降维处理。
就比如说在这次的泰迪杯中的A题,数据降维就是一个非常关键的步骤。题目数据给的指标有360多个,第一题要求需要我们从这360个指标中选取与造假公司相关的指标,这里就需要用到数据降维了
数据纬度的选择
在做降维处理时,特征数量的选取也会直接影响到预测的结果,大致图像如下图所示:
可见特征的数量最好控制在一定范围内,特征数量过多或者过少都会降低预测的正确率,因此在选择特征数量时可以用二分法选取预测正确率最高点的位置,也就是特征数量最佳的位置。
降维方法
PCA为主成分分析法的英文简称,通常理应原始变量线性组合对原本指标数据进行替代,从而实现主成分解释。
PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。Pearson相关系数本质上是一种线性相关系数, 需要满足以下条件:
(1) 两变量均应由测量得到的连续变量;
(2) 两变量均来自正态分布, 或接近正态的单峰对称分布的总体;
(3) 变量必须是成对的数据;
(4) 两变量间为线性关系。
相关系数的绝对值越大, 相关性越强, 相关系数越接近于1或-1, 相关度越强, 相关系数越接近于0, 相关度越弱。RFE(Recursive Feature Elimination)是特征选择的算法。它的工作原理是从训练数据集中的所有特征开始搜索特征子集,并成功地删除特征,直到保留所需的数量。这是通过对给定的算法模型进行拟合,按重要性对特征进行排序,丢弃最不重要的特征,并重新拟合模型来实现的。这个过程不断重复,直到特定数量的特征被保留下来。RFE的执行过程如下:
(1) 初始的特征集为所有可用的特征。
(2) 使用当前特征集进行建模,然后计算每个特征的重要性。
(3) 删除最不重要的一个(或多个)特征,更新特征集。
(4) 跳转到步骤2,直到完成所有特征的重要性评级。
代码使用Person降维方法
def Del_Correlation (sum_C2):
#相关系数比对(量纲化之前)
Correlation=sum_C2.iloc[:,6:]
Correlation=Correlation.corr()
rate=0.9
#删除相关系数超过rate的列
row=copy.copy(Correlation.shape[0])-2
i=copy.copy(Correlation.shape[1])-2
count=0
while i>0:
j=0
while j<row:
if Correlation.iloc[j,i]>rate:
sum_C2=sum_C2.drop(columns=[sum_C2.columns[i]])
count=count+1
break
j=j+1
row=row-1
i=i-1
print("相关系数高于",end=" ")
print(rate,end=" ")
print("的列去除完毕...",end="")
print("共去除 ",end="")
print(count,end="")
print(" 列")
return sum_C2
总结
由于PCA主成分分析法的特殊性,将原有的特征列转化为了综合指标而不是特定的指标,因此主成分分析法不能使用在第一题的筛选出特征列上,只能使用其他的降维方法以确保能够筛选出特征列。如RFE递归特征消除就能在降维之后保留出各项特征指标而不是转化为综合指标。最终降维筛选出的特征列也因各行业数据的不同而不同。
我会在之后的文章讲解机器学习!!!!