数据预处理和特征工程

一、数据预处理

1.数据采集

2.数据格式化(存储格式等)

3.数据清洗:去掉脏数据

简单直观可以看出的不可能数据

组合或统计属性判定

缺失值处理

1.删除元祖:删除这一条记录或者一列特征,适合记录或者特征占总样本比例很小,或者缺失值非常多。但是会造成数据少很多,有可能造成性能下降

2.数据补齐:这类方法是用一定的值去填充空值,通常基于统计学原理,根据初始数据集中其余对象取值的分布情况来对一个缺失值进行填充

3.不处理:不处理缺失值,直接在包含空值的数据上进行数据挖掘的方法包括贝叶斯网络和人工神经网络等。

具体请看:https://blog.csdn.net/lujiandong1/article/details/52654703

 

4.数据采样

很多情况下,正负样本不均衡

1.当正负样本量很大时,进行下采样,随机采样和分层抽样

2.当样本量不大时

采集更多样本

过采样

修改损失函数

二、特征工程

1.数值类型

归一化、标准化、正则化:https://www.cnblogs.com/chaosimple/p/4153167.html

统计特征:pandas的mean方法和describe()方法

离散化:将连续数值切割成几块,pandas库里有cut()方法,可以指定对数组arr切成n块,返回的是每个样本属于的那一个区间。cut(arr,n)或者直接指定区间cut(arr,[-5,-1,2,5,10]),返回的result,统计result,pd.value_counts(result).reindex(result.levels)

2.类别类型

2.1.one-hot编码

pandas库的get_dummies(series,prefix='列名前缀')

2.2 Hash处理

 

3.时间类型

既可以看做连续值,也可以看做离散值

1.连续值,持续时间(单页浏览时长),间隔时间(两次活动的间隔时间)

2.离散值,时间段,星期几,月,季度

python中datetime的strptime函数:datetime.datetime.strptime(x,时间格式,如:"%Y-%m-%d %H:%M:%S"),将字符串转为时间格式类型

时间类型函数可以返回年月日星期:.year,.month,.day,.weekday()

4.文本型

自然语言处理相关

 

5.组合特征

5.1简单组合特征:拼凑

 5.2模型特征组合

GBDT+LR

6.特征选择

原因有:冗余:特征相关性太高,浪费计算性能

噪声:特征对预测结果有负影响

6.1.过滤型(单个)

评估单个特征和结果值之间的相关程度,排序留下top相关的部分特征

评估的准则:pearson相关系数,互信息,距离相关度

缺点是:没有考虑到特征之间的关联作用,可能把有用的关联特征误删掉

相关系数:用scipy.stats.pearsonr(x,y)来计算相关系数,函数返回相关系数和风险值(越小越可信),缺点是只对线性有用,如果是非线性就不适用

互信息:minepy.MINE库

距离相关系数:gist库

sklearn.feature_selection.SelectBest 可以很方便的实现取前k个特征,参数有两个,第一个是评估函数,第二个K=n,评估函数的选择:

回归:

f_regression:相关系数,计算每个变量与目标变量的相关系数,然后计算出F值和P值;

mutual_info_regression:互信息,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。

分类:

chi2:卡方检验;
f_classif:方差分析,计算方差分析(ANOVA)的F值 (组间均方 / 组内均方);
mutual_info_classif:互信息,互信息方法可以捕捉任何一种统计依赖,但是作为非参数方法,需要更多的样本进行准确的估计。

6.2包裹型(子集合)

把特征选择看做一个特征子集搜索问题,筛选各种特征子集,然后用模型评估效果

递归特征删除算法:给特征赋予一个外部模型产生的权重(例如:线性模型系数),RFE递归地使用越来越少的特征来进行特征选择。首先,在原始数据上建立模型并且给每个特征一个权重;然后,淘汰绝对权重最小的特征,递归地执行这个过程直到达到希望的特征数。
RFECV使用交叉验证方法发现最优特征数量。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)

6.3嵌入型

根据模型来判断特征的重要性

最常用的方式是用正则化的方法来做特征选择

使用SelectFromModel方法特征选择

SelectFromModel是一种元转换器,可以与那些有coef_ 或者feature_importances_属性的模型一起使用。如果coef_ 或者feature_importances_小于阈值,我们就认为特征是不重要的。除了指定阈值以外,也可以使用启发式的方式。有效的启发式方法包括均值、中位数或者乘以系数,比如 0.1*均值。

基于L1范数的特征选择

使用L1范数的线性模型有一个稀疏解:许多估计系数都为0。当降维的目的是为了使用其他分类器,他们能和feature_selection.SelectFromModel一起使用选择非零系数。特别地,稀疏估计量对于回归中的 linear_model.Lasso、分类中的linear_model.LogisticRegression和svm.LinearSVC都很有用。

from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel
iris = load_iris()
X, y = iris.data, iris.target
X.shape
(150,4)
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
model = SelectFromModel(lsvc, prefit=True)
X_new = model.transform(X)
X_new.shape
(150,3

 

 

转载于:https://www.cnblogs.com/stAr-1/p/8920783.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人作业五:四则运算二

四则运算2 一、设计思路: 1、题目避免重复: (1)利用系统时间来产生随机数,重复率会降低。 (2)建立链表,逐个判断。可读取写入文件。 2、可定制(数量/打印方式): (1)格式有默认值; (2)可以选择重…

javascript继承模式原理与示例深入剖析

原型链ECMAScript 中描述了原型链的概念,并将原型链作为实现继承的主要方法。 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。简单回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一…

mysql innodb_sort_buffer_size_mysql优化---第7篇:参数 innodb_buffer_pool_instances设置

摘要:1 innodb_buffer_pool_instances可以开启多个内存缓冲池,把需要缓冲的数据hash到不同的缓冲池中,这样可以并行的内存读写。2 innodb_buffer_pool_instances参数显著的影响测试结果,特别是非常高的 I/O 负载时。3 实验环境下&…

函数和过程

函数:def test(s): ... return 过程没有return,函数有。但是过程也是函数 def test0():过程msgi am houndprint(msg) def test1():函数msgi am dogprint(msg)return msg t1test0() t2test1() print(t1) print(t2) i am houndi am dogNone 没…

关于html的一些杂技

html预定义字符指的是 :< > html实体指的是 $amp 等 php中htmlspeciachar()就是讲html预定义字符转换成html实体. 浏览器渲染时,会将html实体转换成html预定义字符显示出来,但是查看html源码是显示的还是html实体. 而如果查看源码时(ctrlu),中<>的内容不会再网页…

cordova 5.0版本说明

2015/04/21发布Cordova 5.0.0! 1&#xff09;插件从Cordova plugins registry&#xff08;CPR&#xff09;全部移到npm&#xff0c;并且重新命名 ***org.apache.cordova.* → cordova-plugin-* 旧&#xff09;$ cordova plugin add org.apache.cordova.console 新&#xff09…

mysql综合查询索引优化_MySQL数据库SQL优化之确定问题使用索引提高查询效率

在EXPLAIN分析SQL中&#xff0c;已经可以确定是对客户表customet的全表扫描导致效率的不理想&#xff0c;那么对客户表customer的email字段创建索引&#xff0c;具体如下:mysql> create index idx_email on customer(email);创建索引后&#xff0c;再看一下这条语句的执行计…

无法找到python第三方库的处理方法

如果工程目录和python安装目录不是同一个&#xff0c;那么要将第三方库复制一份到你的工程目录的site-package目录中&#xff0c;这样工程才能引用。反正我是这样的&#xff0c;大家如果遇到类似情况可以参考。 我也在纳闷&#xff0c;像c#这些你在引用第三方库时自动就给你复制…

python-列表

list列表是一个有序的集合&#xff0c;可以随时添加和删除 len(XXX)函数计算XXX这个列表元素个数 还有一个概念就是索引index xxx(2) xxx列表的第三个元素 xxx(-2) xxx列表的倒数第二个元素 append 添加元素到末尾 insert 插入元素到指定的位置 pop()  删除末尾的元素…

201. Bitwise AND of Numbers Range

题目&#xff1a; Given a range [m, n] where 0 < m < n < 2147483647, return the bitwise AND of all numbers in this range, inclusive. For example, given the range [5, 7], you should return 4. 链接&#xff1a; http://leetcode.com/problemset/algorithm…

laravel mysql驱动_Laravel 如何同时使用不同数据库驱动

queue配置首先说明一下我之前的项目中如何使用queue的。我们现在的项目都是用的symfony&#xff0c;老一点的项目用的symfony1poser/vendor/bin 加入到环境变量中。source ~/.bash_profile 就可以直接在命令行中使用laravel了。试一下。laravel -V 能够看到下面的&#xff0c;就…

open-falcon的插件机制

Plugin可以看做是对agent功能的扩充。对于业务系统的监控指标采集&#xff0c;最好不要做成plugin&#xff0c;而是把采集脚本放到业务程序发布包中&#xff0c;随着业务代码上线而上线&#xff0c;随着业务代码升级而升级&#xff0c;这样会比较容易管理。 1. 编写采集脚本 用…

python 获取文件大小,创建时间和访问时间

# -*- coding: UTF8 -*- import timeimport datetime import os 1、  把时间戳转化为时间: 1479264792 to 2016-11-16 10:53:12    def TimeStampToTime(timestamp):       timeStruct time.localtime(timestamp)       return time.strftime(%Y-%m-%d %H:%…

mysql 免安装版迁移_mysql免安装版 安装配置 (转)

1. 下载MySQL Community Server 5.6.132. 解压MySQL压缩包将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是:"D:\Program Files\MySQL\mysql-5.6.13-win32"将解压目录下默认文件 my-default.ini 拷贝一份&#xff0c;改名 my.ini复制下面的配置信息到 my.ini…

从简单的信道预计说起

前面写了关于CP在OFDM中的应用&#xff0c;主要是记录一点零星的想法而已&#xff0c;今天突然想写点关于信道特性方面的东西。原因有下面几点&#xff1a; 1&#xff09;信道在仿真中的地位不容置疑&#xff0c;不同信道的条件下的仿真是很多课题的重点&#xff0c;自己差点儿…

python input函数赋值法_赋值法 - 静雅斋数学 - 博客园

前言赋值法是高中数学中比较常用的一种方法&#xff0c;使用“赋值法”的数学素材和知识点&#xff0c;散落在高中数学的几乎各个章节中&#xff0c;现对其进行整理&#xff0c;以便于学习。比如学习函数时可以赋值法给出单调性&#xff0c;奇偶性&#xff0c;周期性等&#xf…

ActiveMQ 的连接和会话

要了解 connection 和 session 的概念&#xff0c;可以先从 ConnectionState 和 SessionState 入手&#xff1a; // 省略部分代码 public class ConnectionState {ConnectionInfo info;private final ConcurrentHashMap<TransactionId, TransactionState> transactions …

IOS开发之页面切换

从一个ViewController切换到另一个ViewController有下面几种方法&#xff1a; &#xff08;1&#xff09;addsubview方法切换视图self.view addSubview:(加载的新页面);相应的 [self.view removeFromSuperview];移除添加的view&#xff08;2&#xff09;self.view insertSubvie…

python模拟购物车购物过程_Python基于数列实现购物车程序过程详解

要求1、启动程序后让用户输入余额&#xff0c;并打印商品列表2、用户通过输入编号购买商品3、用户选择商品购买后&#xff0c;根据余额判断成功或者失败&#xff0c;给出对应提示4、可以随时退出&#xff0c;退出后打印账号余额以及购买的商品列表构思1、首先&#xff0c;用户余…

Time

问题 : Time时间限制: 1 Sec 内存限制: 128 MB题目描述Digital clock use 4 digits to express time, each digit is described by 3*3 characters (including”|”,”_”and” “).now given the current time, please tell us how can it be expressed by the digital clock…