数据挖掘 —— 数据预处理

  • 1. 数据清洗
  • 2. 特征预处理
    • 2.1 特征选择
    • 2.2 特征变换
  • 3 特征降维

1. 数据清洗

数据清洗包括数据样本抽样和异常值(空值)处理

  1. 直接丢弃(包括重复数据)
  2. 把是否有异常当做一个新的属性,替代原值
  3. 集中指代
  4. 边界值指代
  5. 插值
import pandas as pd
import numpy as np
df = pd.DataFrame({"A":['a0','a1','a1','a2','a3','a4'],"B":['b0','b1','b2','b2','b3',None],"C":[1,2,None,3,4,5],"D":[0.1,10.2,11.4,8.9,9.1,12],"E":[10,19,32,25,8,None],"F":["f0","f1","g2","f3","f4","f5"]
})
# 识别异常值和空值
df.isnull()
df.dropna()
df.dropna(how = "any",subset = ["B"]) # subset为根据某个字段进行去除空值# 直接丢弃
df.duplicated(["A"]) # 当.duplicated给定多个字段时,只有当每个字段都相同时才会返回True
df.drop_duplicates(["B"])
df.drop_duplicates(["A"],keep = False) # keep有三个可传参数 first last False  也有inplace方法# 集中指代
df.fillna(method = "ffill",axis = 0) # 用上方数据填充
df["E"].fillna(df["E"].mean())# 插值指代
df["C"].interpolate() # 调用interpolate时必须为Series
df["C"].interpolate(method = "spline",order = 3) # interpolate方法还可以指定插值方法,如三次样条插值# 取上下四分位数的k倍为边界值 k一般取1.5-3
k = 1.5
upper_q = df["D"].quantile(q = 0.75)
lower_q = df["D"].quantile(q = 0.25)
q_int = upper_q - lower_q
df[df["D"] > lower_q - k*q_int][df["D"] < upper_q+k*q_int]# 去除"F"字段不是以f开头的数据
df.drop([2])
df[[True if value.startswith("f") else False for value in list(df["F"].values)]]

2. 特征预处理

  1. 反映目的的属性称之为标注(也叫作标记、标签、label)
  2. 特征预处理分为四个部分:
  • 特征选择
  • 特征变换
  • 特征降维
  • 特征衍生

2.1 特征选择

  • 特征选择:剔除与标注不相关或者冗余的特征
  • 其中一种思路为数据归约:包括三种思想
  1. 过滤思想:特征与标注的相关性
  2. 包裹思想:遍历特征子集,即构造简单模型,根据系数去掉弱特征
  3. 嵌入思想:建立简单回归模型
import numpy as np
import pandas as pd
import scipy.stats as ss
df = pd.DataFrame({ "A":ss.norm.rvs(size = 100),"B":ss.norm.rvs(size = 100),"C":ss.norm.rvs(size = 100),"D":ss.norm.rvs(size = 100),"E":np.random.randint(low = 0,high = 2,size = 100)
})
X = df.loc[:,["A","B","C","D"]]
Y = df.loc[:,["E"]]
# 过滤思想
from sklearn.feature_selection import SelectKBest
skb = SelectKBest(k = 2)
"""
klearn.feature_selection.SelectKBest(score_func=<function f_classif>, k=10)
其中score_func为指定特征选择函数:默认为:f_classif(方差分析),其他还有chi2(卡方检验),mutual_info_classif(互信息),根据特征的属性选择合适的函数
k为最大特征选择数目
"""
skb.fit(X,Y)
result = skb.transform(X)# 包裹思想
"""
采用RFE算法(即递归特征消除recursive feature elimination)
"""
from sklearn.svm import SVR
"""
svm为支持向量机
SVR为支持向量回归
"""
from sklearn.feature_selection import RFE
rfe = RFE(estimator = SVR(kernel = "linear"),n_features_to_select = 2,step = 1)
"""
estimator:对特征含有权重的预测模型(例如,线性模型对应参数coefficients)
n_features_to_list:最终特征选择数目
step:每次消除特征的数目
"""
rfe.fit_transform(X,Y)# 嵌入思想
"""
建立简单回归模型现在的模型与最终的模型要有一定的关联。
"""
from sklearn.tree import DecisionTreeRegressor
from sklearn.feature_selection import SelectFromModel
sfm = SelectFromModel(estimator = DecisionTreeRegressor(),threshold = 0.3) # threshold为权重的阈值
sfm.fit_transform(X,Y)

2.2 特征变换

特征变换可分为六种

  1. 对指化:大于0部分的数据若差距较小,经过指数化可加大尺度
  2. 离散化
  3. 数据平滑
  4. 归一化(标准化)
  5. 数值化
  6. 正规化
# 对指化
"""大于0部分的数据若差距较小,经过指数化可加大尺度"""
# 指数化
"""
将较大数据缩放到我们容易计算的范围
如声音强度和地震强度
"""
# 离散化
"""
将连续变量分成几段
原因:1、克服数据缺陷2、某些算法需要:朴素贝叶斯算法3、非线数据映射
方法:1、等频(等深)放大2、等距(等宽)放大3、自因变量优化
"""
lst = [56,8,10,15,16,24,25,30,40,67]pd.qcut(lst,q = 3,labels = ["low","medium","high"])# 等深分箱pd.cut(lst,bins = 3,labels = ["low","medium","high"])# 等宽分箱# 归一化
"""
[0,1]
"""
from sklearn.preprocessing import MinMaxScaler
data = np.array([1,5,9,89,26,56,38]).reshape(-1,1)
to_one = MinMaxScaler()
to_one.fit_transform(data)# 标准化(狭义)
"""
均值为0,标准差为1
"""
from sklearn.preprocessing import StandardScaler
normal  = StandardScaler()
normal.fit_transform(data)# 数值化
"""
四种数据类型:1、定类:需要数值化(如:低 中 高)--独热编码2、定序:需要数值化(如:红 绿 蓝)--标签编码3、定距:需要归一化4、定比
数值化的方式:1、标签化(label):如0、1、22、独热(one-hot encode):用稀疏矩阵表示
"""
from sklearn.preprocessing import LabelEncoder
data1 = np.array(["up","down","down","down","up"]).reshape(-1,1)
le = LabelEncoder()
le.fit_transform(data1) # 标签编码
from sklearn.preprocessing import OneHotEncoder,LabelEncoder
data2 = np.array(["green","red","yellow","red","green","green"])
ohe = OneHotEncoder()
"""
独热编码前需要标签编码
"""
data_tran = LabelEncoder().fit_transform(data2)
ohe_result = ohe.fit_transform(data_tran.reshape(-1,1)) # 返回结果为压缩稀疏矩阵
ohe_result.toarray() # 使用toarray方法转化为数组"""
对于独热编码 pandas提供了更为简易的方法
df = pd.get_dummies(df,columns = [])
"""
# 正规化(规范化)
"""
正规化一般针对一条记录数据进行
根据距离度量的次数不同 一般使用L1或L2
"""
data = np.array([5,6,8,9,3,4,7,8,15,69]).reshape(1,-1)# 默认对每一行进行正规化(且为二维数组)
from sklearn.preprocessing import Normalizer
norm1 = Normalizer(norm = "l1")
norm1.fit_transform(data)
norm2 = Normalizer(norm = "l2")
norm2.fit_transform(data)

3 特征降维

PCA 和 LDA 特征降维的区别于联系:

  • 联系:
  1. 两者均可以对数据进行降维。
  2. 两者在降维时均使用了矩阵特征分解的思想。
  3. 两者都假设数据符合高斯分布
  • 区别:
  1. LDA是有监督的降维方法,而PCA是无监督的降维方法
  2. LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
  3. LDA除了可以用于降维,还可以用于分类。
  4. LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。
import numpy as np
import pandas as pd
X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
Y = np.array ([1,1,1,2,2,2])
# PCA 降维
from sklearn.decomposition import PCA
pca = PCA(n_components = 1)
pca.fit(X)
pca.transform(X)
pca.explained_variance_ratio_ # 它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。# LDA降维
"""sklearn.decomposition么会产生不相关特征引入、过度拟合等问题。我们可以使用PCA来降维,但PCA没有将类别标签考虑进去,属于无监督的。
"""
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components = 1)
lda.fit(X,Y)
lda.transform(X)
lda.explained_variance_ratio_  # 每一个维度解释的方差占比# LDA还可以用作分类器 即Fisher分类器
lda.predict([[-1,-3]])

by CyrusMay 2022 04 05

数据挖掘 —— 数据预处理相关推荐

  1. 数据挖掘-数据预处理的必要性及主要任务

    数据预处理的必要性及主要任务 1.数据预处理的必要性 数据库极易受噪声.缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异构数据源.低质量的数据导致低质量的数据挖掘. 2.数据预处理技术 ( ...

  2. Python数据挖掘 数据预处理案例(以航空公司数据为例)

    Python数据预处理 一.内容: 1.数据清洗 2.数据集成 3.数据可视化 二.实验数据 根据航空公司系统内的客户基本信息.乘机信息以及积分信息等详细数据,依据末次飞行日期( LAST_FLIGH ...

  3. 数据挖掘—数据预处理

    文章目录 数据预处理 1 数据清洗 缺失值处理 异常值处理 2 数据集成 实体识别 冗余属性识别 数据变换 简单函数变换 规范化 连续属性离散化 属性构造 3 数据规约 属性归约 数值归约 Pytho ...

  4. 机器学习与数据挖掘——数据预处理

    如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔空间 一:关于数据预处理 在工程实践中,我们得到的数据会存在有缺失值.重复值等,在使用之前需要进行数据预处理.数据预处理没有标准的流程,通常针对 ...

  5. 文本数据挖掘----数据预处理

    一.数据预处理简介 1.为什么要进行数据预处理 一开始拿到的数据在数据的质量方面或多或少有一些问题,即在数据的准确性.完整性.一 致性.合时性(实时性).可信性.解释性等方面可能存在问题,所以需要数据 ...

  6. 数据挖掘数据预处理(验证性)

    一.背景 软件:python 实验内容: (选做)使用Pandas_datareader获取任意两支股票近三个月的交易数据.做出收盘价的变动图像. 使用Pandas_datareader获取世界银行数 ...

  7. 【数据挖掘】分类任务简介 ( 分类概念 | 分类和预测 | 分类过程 | 训练集 | 测试集 | 数据预处理 | 有监督学习 )

    文章目录 I . 分类概念 II . 分类 ( 离散值 ) 和 预测 ( 连续值 ) III . 分类过程 IV . 分类过程中使用的数据集 ( 训练集 | 测试集 | 新数据 ) V . 数据预处理 ...

  8. 【数据挖掘笔记三】数据预处理

    3.数据预处理 数据预处理技术: 数据清理用来清除数据中的噪声,纠正不一致: 数据集成将数据由多个数据源合并成一个一致的数据存储,如数据仓库: 数据归约通过如聚集.删除冗余特征或聚类来降低数据的规模: ...

  9. 插值法补齐缺失数据_数据挖掘非常重要的一步:数据预处理

    为什么数据处理很重要? 对数据挖掘熟悉的小伙伴,数据处理相关的工作时间占据了整个项目的70%以上.数据的质量,直接决定了模型的预测和泛化能力的好坏.它涉及很多因素,包括:准确性.完整性.一致性.时效性 ...

最新文章

  1. RedHat、CentOS设置静态IP、主机名、关闭防火墙(虚拟机VMware客户机)
  2. linux内存使用统计,Linux 中free命令检查内存使用情况
  3. Linux下如何把时间转成秒数,或把秒数转换成标准时间
  4. c语言综合程序设计问答题,C语言程序设计综合习题题目.doc
  5. MySQL sql99语法介绍
  6. C++中的deque、stack、queue及priority_queue
  7. zend guard6的使用
  8. CString 类型和引用
  9. MySQL Cookbook 学习笔记-02
  10. 大数据学习笔记46:初识日志收集系统Flume
  11. 为什么老是把词语读反_关于语言表达 6岁儿童经常把词语顺序念反
  12. Foobar2000 封面显示个性
  13. Python数据分析通关,30个案例!
  14. 如何对网站服务器进行安全防护
  15. UINO优锘:DCV产品发展历程
  16. luogu 4234 最小差值生成树 LCT
  17. 央行发布2020年规章制定计划 涉及个人金融信息保护、征信业务
  18. 西瓜创客和核桃编程之间,哪个更靠谱?西瓜创客一年学费多少?
  19. 解析:外部网页内如何一键复制微信号添加微信好友
  20. Spark 系列——Spark的Shuffle原理

热门文章

  1. access2003安装包百度云_《逗比羊电影》_逗比羊电影最新版下载
  2. 继鼎晖夹层完成80亿募集后,鼎晖夹层IDC基金首轮关账15亿
  3. 浅析网络流量分析原理:如何把二进制“天书”变成“人话”
  4. 多元函数严格凹 海塞矩阵正定_海森矩阵的应用:多元函数极值的判定
  5. 查看防火墙状态_干货 | 华为防火墙配置,这篇文章强烈推荐收藏学习
  6. Dataset之WebVision:WebVision数据集简介、下载、使用方法之详细攻略
  7. 成功解决ValueError: not enough values to unpack (expected 2, got 1)
  8. DL之Attention:Attention注意力机制的简介、应用领域之详细攻略
  9. Algorithm:C++语言实现之贪心法算法相关问题
  10. OS_CORE.C(5)