python大战机器学习——数据预处理
数据预处理的常用流程:
1)去除唯一属性
2)处理缺失值
3)属性编码
4)数据标准化、正则化
5)特征选择
6)主成分分析
1、去除唯一属性
如id属性,是唯一属性,直接去除就好
2、处理缺失值
(1)直接使用含有缺失值的特征
如决策树算法就可以直接使用含有缺失值的特征
(2)删除含有缺失值的特征
(3)缺失值补全
1)均值插补
若样本属性的距离是可度量的,则该属性的缺失值就以该属性有效值的平均值来插补缺失的值。如果样本的属性的距离是不可度量的,则该属性的缺失值就以该属性有效值的众数来插补缺失的值。
2)用同类均值插补
首先将样本进行分类,然后以该类样本中的均值来插补缺失值。
3)建模预测
将缺失的属性作为预测目标来预测。这种方法效果较好,但是该方法有个根本的缺陷:如果其他属性和缺失属性无关,则预测的结果毫无意义。但是如果预测结果相当准确,则说明这个缺失属性是没必要考虑纳入数据集中的。一般的情况介于两者之间。
4)高维映射
将属性高映射到高维空间。这种做法是最精确的做法,它完全保留了所有的信息,也未增加任何额外的信息。这样做的好处是完整保留了原始数据的全部信息、不用考虑缺失值。但它的缺点也很明显,就是计算量大大提升。而且只有在样本量非常大的时候效果才好,否则会因为过于稀疏,效果很差。
5)多重插补
多重插补认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。
6)极大似然估计
7)压缩感知及矩阵补全
压缩感知通过利用信号本身所具有的稀疏性,从部分观测样本中回复原信号。压缩感知分为感知测量和重构恢复两个阶段。
感知测量:此阶段对原始信号进行处理以获得稀疏样本表示。常用的手段是傅里叶变换、小波变换、字典学习、稀疏编码等
重构恢复:此阶段基于稀疏性从少量观测中恢复原信号。这是压缩感知的核心
矩阵补全
3、特征编码
(1)特征二元化:将数值型的属性转换成布尔型的属性
(2)独热编码:构建一个映射,将这些非数值属性映射到整数。其采用N位状态寄存器来对N个可能的取值进行编码,每个状态都由独立的寄存器位表示,并且在任意时刻只有其中的一位有效。
4、数据标准化、正则化
(1)数据标准化:将样本的属性缩放到某个指定范围
进行数据标准化的原因:一是因为某些算法要求样本数据具有零均值和单位方差。二是样本不同属性具有不同量级时,消除数量级的影响。
min-max标准化:标准化之后,样本x的所有属性值都在[0,1]之间
z-score标准化:标准化之后,样本集的所有属性的均值都是0,标准差均为1
(2)数据正则化:将样本的某个范数(如L1范数)缩放到单位1。正则化的过程是针对单个样本的,对于每个样本将样本缩放到单位范数。通常如果使用二次型(如点积)或者其他核方法计算两个样本之间的相似性,该方法会很有用。
5、特征选择
(1)过滤式选择:先对数据集进行特征选择,然后再训练学习器。特征选择过程与后续学习器无关。常用方法有Relief(二分类)、Relief-F(多分类)
(2)包裹式选择:直接把最终将要使用的学习器的性能作为特征子集的评价准则。常用方法LVW
(3)嵌入式选择和L1正则化
嵌入式特征选择是在学习器训练过程中自动进行了特征选择
6、稀疏表示和字典学习
代码实现:
from sklearn.preprocessing import Binarizer,OneHotEncoder,MinMaxScaler,MaxAbsScaler,StandardScaler,Normalizer
from sklearn.feature_selection import VarianceThreshold,SelectKBest,f_classif,RFE,RFECV,SelectFromModel
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
import numpy as np
from sklearn.decomposition import DictionaryLearning #Binary
X=[ [1,2,3,4,5],
[5,4,3,2,1],
[3,3,3,3,3],
[1,1,1,1,1]] print("before transform:",X)
binarizer=Binarizer(threshold=2.5)
print("after transform:",binarizer.transform(X)) #OneHotEncoder
X=[ [1,2,3,4,5],
[5,4,3,2,1],
[3,3,3,3,3],
[1,1,1,1,1]]
print("before transform:",X)
encoder=OneHotEncoder(sparse=False)
encoder.fit(X)
print("active_feature_:",encoder.active_features_)
print("feature_indices_:",encoder.feature_indices_)
print("n_values:",encoder.n_values_)
print("after transform:",encoder.transform([[1,2,3,4,5]])) #standardization #MinMaxScaler
X=[ [1,5,1,2,10],
[2,6,3,2,7],
[3,7,5,6,4],
[4,8,7,8,1]
] print("before transform:",X)
scaler=MinMaxScaler(feature_range=(0,2))
scaler.fit(X)
print("min_is:",scaler.min_)
print("scale_is:",scaler.scale_)
print("data_max_ is:",scaler.data_max_)
print("data_min_ is:",scaler.data_min_)
print("data_range_ is:",scaler.data_range_)
print("after transform:",scaler.transform(X)) #MaxAbsScaler
X=[
[1,5,1,2,10],
[2,6,3,2,7],
[3,7,5,6,4],
[4,8,7,8,1]
] print("before transform:",X)
scaler=MaxAbsScaler()
scaler.fit(X)
print("scale_is:",scaler.scale_)
print("max_abs_ is:",scaler.max_abs_)
print("after transform:",scaler.transform(X)) #StandardScaler:z-score
X=[
[1,5,1,2,10],
[2,6,3,2,7],
[3,7,5,6,4],
[4,8,7,8,1]
]
print("before transfrom:",X)
scaler=StandardScaler()
scaler.fit(X)
print("scale_ is:",scaler.scale_)
print("mean_ is:",scaler.mean_)
print("var_ is:",scaler.var_)
print("after transfrom:",scaler.transform(X)) #Normalizer
X=[
[1,2,3,4,5],
[5,4,3,2,1],
[1,3,5,2,4],
[2,4,1,3,5]
]
print("before transform:",X)
normalizer=Normalizer(norm='l2')
print("after transform:",normalizer.transform(X)) #VarianceThreshold
X=[
[100,1,2,3],
[100,4,5,6],
[100,7,8,9],
[101,11,12,13]
]
selector=VarianceThreshold(1)
selector.fit(X)
print("Variances is %s"%selector.variances_)
print("After transform is %s"%selector.transform(X))
print("The surport is %s"%selector.get_support(True))
print("After reverse transform is %s"%selector.inverse_transform(selector.transform(X))) #SelectKBest
X=[ [1,2,3,4,5],
[5,4,3,2,1],
[3,3,3,3,3],
[1,1,1,1,1]]
Y=[0,1,0,1]
print("before transform:",X)
selector=SelectKBest(score_func=f_classif,k=3)
selector.fit(X,Y)
print("scores_:",selector.scores_)
print("pvalues_:",selector.pvalues_)
print("selected index:",selector.get_support(True))
print("after transform:",selector.transform(X)) #RFE
iris=load_iris()
X=iris.data
Y=iris.target
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2)
print("Before transform,X=",X)
selector.fit(X,Y)
selector.transform(X)
print("After transform,X=",X)
print("Ranking %s"%selector.ranking_) #RFECV
iris=load_iris()
X=iris.data
Y=iris.target
estimator=LinearSVC()
selector=RFECV(estimator=estimator,cv=3)
selector.fit(X,Y)
print("Grid Scores %s"%selector.grid_scores_) #SelectFromModel
iris=load_iris()
X=iris.data
Y=iris.target
estimator=LinearSVC(penalty='l1',dual=False)
selector=SelectFromModel(estimator=estimator,threshold='mean')
selector.fit(X,Y)
selector.transform(X)
print("Threshold %s"%selector.threshold_)
print("Support is %s"%selector.get_support(indices=True)) #DictionaryLearning
X=[
[1,2,3,4,5],
[6,7,8,9,10],
[10,9,8,7,6],
[5,4,3,2,1]
]
print("before transform:",X)
dct=DictionaryLearning(n_components=3)
dct.fit(X)
print("components is :",dct.components_)
print("after transform:",dct.transform(X))
python大战机器学习——数据预处理的更多相关文章
- python大战机器学习——数据降维
注:因为公式敲起来太麻烦,因此本文中的公式没有呈现出来,想要知道具体的计算公式,请参考原书中内容 降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中 1.主成分分析(PCA) 将n ...
- Python: sklearn库——数据预处理
Python: sklearn库 —— 数据预处理 数据集转换之预处理数据: 将输入的数据转化成机器学习算法可以使用的数据.包含特征提取和标准化. 原因:数据集的标准化(服从均值为 ...
- 机器学习 —— 数据预处理
对于学习机器学习算法来说,肯定会涉及到数据的处理,因此一开始,对数据的预处理进行学习 对于数据的预处理,大概有如下几步: 步骤1 -- 导入所需库 导入处理数据所需要的python库,有如下两个库是非 ...
- [机器学习]-[数据预处理]-中心化 缩放 KNN(二)
上次我们使用精度评估得到的成绩是 61%,成绩并不理想,再使 recall 和 f1 看下成绩如何? 首先我们先了解一下 召回率和 f1. 真实结果 预测结果 预测结果 正例 反例 正例 TP 真 ...
- 吴裕雄 python 机器学习——数据预处理过滤式特征选取SelectPercentile模型
from sklearn.feature_selection import SelectPercentile,f_classif #数据预处理过滤式特征选取SelectPercentile模型 def ...
- 吴裕雄 python 机器学习——数据预处理过滤式特征选取VarianceThreshold模型
from sklearn.feature_selection import VarianceThreshold #数据预处理过滤式特征选取VarianceThreshold模型 def test_Va ...
- 吴裕雄 python 机器学习——数据预处理正则化Normalizer模型
from sklearn.preprocessing import Normalizer #数据预处理正则化Normalizer模型 def test_Normalizer(): X=[[1,2,3, ...
- 吴裕雄 python 机器学习——数据预处理标准化MaxAbsScaler模型
from sklearn.preprocessing import MaxAbsScaler #数据预处理标准化MaxAbsScaler模型 def test_MaxAbsScaler(): X=[[ ...
- 吴裕雄 python 机器学习——数据预处理标准化StandardScaler模型
from sklearn.preprocessing import StandardScaler #数据预处理标准化StandardScaler模型 def test_StandardScaler() ...
随机推荐
- 作为.NET程序员,您需要IronPython么?
.NET作为一个成熟的开发平台,为很多语言的发展提供了肥沃的土壤:历史相对久远的有Managed C++.C#.VB.NET.J#,正值壮年的则有IronPython.IronRuby,而老赵极力推崇 ...
- EXPLAIN 命令
MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提 ...
- android获取时间差的方法
本文实例讲述了android获取时间差的方法.分享给大家供大家参考.具体分析如下: 有些时候我们需要获取当前时间和某个时间之间的时间差,这时如何获取呢? 1. 引用如下命名空间: import jav ...
- 服务器FTP配置
一.如果没有安装FTP服务器,安装如下: 二.添加SSL证书 三.给证书起一个有意义的名字就可以了 四.FTP SSL设置 五.FTP 身份验证: 进入-如果开启自己需要的-我这里是需要用户输入密码 ...
- 【转】Pro Android学习笔记(十八):用户界面和控制(6):Adapter和AdapterView
目录(?)[-] SimpleCursorAdapter 系统预置的layout ArrayAdapter 动态数据增插删排序 自定义TextView风格 其他Adapter AdapterView不 ...
- 转载:IntelliJ IDEA 2016.2 配置Tomcat 运行Web项目
以前都用MyEclipse写程序的 突然用了IDEA各种不习惯的说 借鉴了很多网上好的配置办法,感谢各位大神~ 前期准备 IDEA.JDK.Tomcat请先在自己电脑上装好 好么~ 博客图片为主 请多 ...
- C# 处理Json
下面是JSON对象转换为字符串 public static string ToJson(object obj) { try { JavaScriptSerializer serializer = ne ...
- java 设置Cookie值
原文地址:http://blog.csdn.net/lansetiankong12/article/details/52622654 /** * 读取所有cookie * 注意二.从客户端读取Cook ...
- Spring 3.x 企业引用开发实战(陈雄华/林开雄)
目录 ... 第一章:Spring概述 IoC:BeanFactory.Context.El(SpringEL表达式) AOP:允许JVM虚拟机启动时使用代理类在运行时期修改指定类的字节码,改变一个类 ...
- storm shell命令源码分析-shell_submission.clj
当我们在shell里执行storm shell命令时会调用shell_submission.clj里的main函数.shell_submission.clj如下: shell_submission.c ...