数据挖掘 —— 数据预处理
数据挖掘 —— 数据预处理
- 1. 数据清洗
- 2. 特征预处理
- 2.1 特征选择
- 2.2 特征变换
- 3 特征降维
1. 数据清洗
数据清洗包括数据样本抽样和异常值(空值)处理
- 直接丢弃(包括重复数据)
- 把是否有异常当做一个新的属性,替代原值
- 集中指代
- 边界值指代
- 插值
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. 特征预处理
- 反映目的的属性称之为标注(也叫作标记、标签、label)
- 特征预处理分为四个部分:
- 特征选择
- 特征变换
- 特征降维
- 特征衍生
2.1 特征选择
- 特征选择:剔除与标注不相关或者冗余的特征
- 其中一种思路为数据归约:包括三种思想
- 过滤思想:特征与标注的相关性
- 包裹思想:遍历特征子集,即构造简单模型,根据系数去掉弱特征
- 嵌入思想:建立简单回归模型
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 特征变换
特征变换可分为六种:
- 对指化:大于0部分的数据若差距较小,经过指数化可加大尺度
- 离散化
- 数据平滑
- 归一化(标准化)
- 数值化
- 正规化
# 对指化
"""大于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 特征降维的区别于联系:
- 联系:
- 两者均可以对数据进行降维。
- 两者在降维时均使用了矩阵特征分解的思想。
- 两者都假设数据符合高斯分布
- 区别:
- LDA是有监督的降维方法,而PCA是无监督的降维方法
- LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
- LDA除了可以用于降维,还可以用于分类。
- 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.数据预处理的必要性 数据库极易受噪声.缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异构数据源.低质量的数据导致低质量的数据挖掘. 2.数据预处理技术 ( ...
- Python数据挖掘 数据预处理案例(以航空公司数据为例)
Python数据预处理 一.内容: 1.数据清洗 2.数据集成 3.数据可视化 二.实验数据 根据航空公司系统内的客户基本信息.乘机信息以及积分信息等详细数据,依据末次飞行日期( LAST_FLIGH ...
- 数据挖掘—数据预处理
文章目录 数据预处理 1 数据清洗 缺失值处理 异常值处理 2 数据集成 实体识别 冗余属性识别 数据变换 简单函数变换 规范化 连续属性离散化 属性构造 3 数据规约 属性归约 数值归约 Pytho ...
- 机器学习与数据挖掘——数据预处理
如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔空间 一:关于数据预处理 在工程实践中,我们得到的数据会存在有缺失值.重复值等,在使用之前需要进行数据预处理.数据预处理没有标准的流程,通常针对 ...
- 文本数据挖掘----数据预处理
一.数据预处理简介 1.为什么要进行数据预处理 一开始拿到的数据在数据的质量方面或多或少有一些问题,即在数据的准确性.完整性.一 致性.合时性(实时性).可信性.解释性等方面可能存在问题,所以需要数据 ...
- 数据挖掘数据预处理(验证性)
一.背景 软件:python 实验内容: (选做)使用Pandas_datareader获取任意两支股票近三个月的交易数据.做出收盘价的变动图像. 使用Pandas_datareader获取世界银行数 ...
- 【数据挖掘】分类任务简介 ( 分类概念 | 分类和预测 | 分类过程 | 训练集 | 测试集 | 数据预处理 | 有监督学习 )
文章目录 I . 分类概念 II . 分类 ( 离散值 ) 和 预测 ( 连续值 ) III . 分类过程 IV . 分类过程中使用的数据集 ( 训练集 | 测试集 | 新数据 ) V . 数据预处理 ...
- 【数据挖掘笔记三】数据预处理
3.数据预处理 数据预处理技术: 数据清理用来清除数据中的噪声,纠正不一致: 数据集成将数据由多个数据源合并成一个一致的数据存储,如数据仓库: 数据归约通过如聚集.删除冗余特征或聚类来降低数据的规模: ...
- 插值法补齐缺失数据_数据挖掘非常重要的一步:数据预处理
为什么数据处理很重要? 对数据挖掘熟悉的小伙伴,数据处理相关的工作时间占据了整个项目的70%以上.数据的质量,直接决定了模型的预测和泛化能力的好坏.它涉及很多因素,包括:准确性.完整性.一致性.时效性 ...
最新文章
- RedHat、CentOS设置静态IP、主机名、关闭防火墙(虚拟机VMware客户机)
- linux内存使用统计,Linux 中free命令检查内存使用情况
- Linux下如何把时间转成秒数,或把秒数转换成标准时间
- c语言综合程序设计问答题,C语言程序设计综合习题题目.doc
- MySQL sql99语法介绍
- C++中的deque、stack、queue及priority_queue
- zend guard6的使用
- CString 类型和引用
- MySQL Cookbook 学习笔记-02
- 大数据学习笔记46:初识日志收集系统Flume
- 为什么老是把词语读反_关于语言表达 6岁儿童经常把词语顺序念反
- Foobar2000 封面显示个性
- Python数据分析通关,30个案例!
- 如何对网站服务器进行安全防护
- UINO优锘:DCV产品发展历程
- luogu 4234 最小差值生成树 LCT
- 央行发布2020年规章制定计划 涉及个人金融信息保护、征信业务
- 西瓜创客和核桃编程之间,哪个更靠谱?西瓜创客一年学费多少?
- 解析:外部网页内如何一键复制微信号添加微信好友
- Spark 系列——Spark的Shuffle原理
热门文章
- access2003安装包百度云_《逗比羊电影》_逗比羊电影最新版下载
- 继鼎晖夹层完成80亿募集后,鼎晖夹层IDC基金首轮关账15亿
- 浅析网络流量分析原理:如何把二进制“天书”变成“人话”
- 多元函数严格凹 海塞矩阵正定_海森矩阵的应用:多元函数极值的判定
- 查看防火墙状态_干货 | 华为防火墙配置,这篇文章强烈推荐收藏学习
- Dataset之WebVision:WebVision数据集简介、下载、使用方法之详细攻略
- 成功解决ValueError: not enough values to unpack (expected 2, got 1)
- DL之Attention:Attention注意力机制的简介、应用领域之详细攻略
- Algorithm:C++语言实现之贪心法算法相关问题
- OS_CORE.C(5)