标准化,归一化,二值化,One-Hot,卡方检验选取重要特征,主成分分析,缺失值和异常值处理
1.特征处理
1.标准化处理
- 导入包
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
- iris.data 为数组
iris = load_iris()
std = StandardScaler()
c = std.fit_transform(iris.data)
c
2.归一化
from sklearn.preprocessing import Normalizer
Normalizer().fit_transform(iris.data)
3.缩放法
from sklearn.preprocessing import MinMaxScaler
MinMaxScaler(feature_range=(1,2)).fit_transform(iris.data)
- 归一化和标准化应用场景
- 1.如果对输出结果范围有要求,则用归一化
- 2.如果数据较为稳定,不存在极端的最大值或最小值,则用归一化
- 3.如果数据存在异常值和较多噪声,则用标准化,这样可以通过中心化间接避免异常值和极端值的影响
- 4.支持向量机(SVM)、K近邻(KNN)、主成分分析(PCA)等模型必须使用归一化或标准化
4.定量特征二值化
from sklearn.preprocessing import Binarizer
- 阈值为3,所有大于3的数为1,所有小于等于3的数为0
Binarizer(threshold=3).fit_transform(iris.data)
5.定性特征编码(One-Hot)
- 例:假如变量为工人、学生、农民,及工人为(0,0,1),学生为(0,1,0),农民为(1,0,0)即为One-Hot编码
pd.get_dummies(iris.target, sparse=True)
from sklearn.preprocessing import OneHotEncoder
c = OneHotEncoder(categories='auto').fit_transform(iris.target.reshape((-1,1)))
c
>> <150x3 sparse matrix of type '<class 'numpy.float64'>'with 150 stored elements in Compressed Sparse Row format>
c.toarray()
6.缺失值处理
- strategy的参数
mean 平均值
median 中位数
most_frequent 众数
from sklearn.impute import SimpleImputer
d = SimpleImputer(strategy='mean').fit_transform(c)
d
- 2.pandas处理缺失值
- 删除缺失值
- how 为all 所有值为空才删除,默认any,有空值就删除
- inplace 在原数据上删除
- axis = 0 行 axis=1列
a.dropna(how='all',axis=0,inplace =True)
- 填充缺失值
- 使用前面的有效值向后填充,用ffill
- 使用后面的有效值向前填充用bfill
- axis =1,method=‘ffill’ 前一行的数据向后填充
a.fillna(method='ffill',axis=1)
- 该列的平均值填充
a.fillna(np.mean(a.iloc[:,1]))
- 数字2进行填充
a.fillna(2)
7.重复值处理
- keep:接收特定 string,first 表示删除重复项并保留第一次出现的项;last 表示除了最后一项外,删除重复项;False 表示删除所有重复项;默认为 first;
- subset:接收 string 或 sequence,仅考虑用于标识重复项的某些列,默认情况下使用所有列,默认值为 None,只选择该列有重复的
b = a.duplicated(keep='first',subset=['nihao'])
b
- 删除nihao该列除第一行的所有重复行 默认为first
c = a.drop_duplicates(keep='first',subset=['nihao'])
c
8.异常值处理
- 1.正态分布删除异常值
- 数据要服从正态分布,使用3σ原则,异常值如超过3倍标准差,那么可以将其视为异常值,如果数据不服从正态分布,用远离平均值的多少倍标准差来描述。
from scipy import stats
mean = a['age'].mean()
std = a['age'].std()
- pvalue>0.05 则为正态分布
print(stats.kstest(a['age'],'norm',(mean,std)))
>> KstestResult(statistic=0.19419645496061633, pvalue=0.058218287631895405)
- 选取小于三个标准差的数据
data = a[np.abs(a['age']- mean) <= 3*std]
- 2.箱线图删除异常值
a['age'].plot(kind = 'box')
- 四分位距(IQR)就是上四分位与下四分位的差值。而我们通过IQR的1.5倍为标准,规定:超过(上四分位+1.5倍IQR距离,或者下四分位-1.5倍IQR距离)的点为异常值
>> 求下四分位数
q1 = a["age"].quantile(0.25)
q1
>> 求上四分位数
q3 = a["age"].quantile(0.75)
q3
iqr = q3 - q1
>> 下界
bottom = q1 - 1.5*iqr
bottom
>> 上界
upper = q3 + 1.5*iqr
upper
- 删除超过上界和低于下届的所有数
a[(a['age'] >= bottom) & (a['age'] <= upper)]
9.数据转换
- 所有值都转换为对数
np.log(a)
from sklearn.preprocessing import FunctionTransformer
a = np.arange(0,12).reshape(2,6)
a
>>array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11]])
m = FunctionTransformer(np.log).fit_transform(a)
m
>>array([[ -inf, 0. , 0.69314718, 1.09861229, 1.38629436,1.60943791],[1.79175947, 1.94591015, 2.07944154, 2.19722458, 2.30258509,2.39789527]])
2.特征选择
1.删除低方差特征
from sklearn.feature_selection import VarianceThreshold
- (threshold=0.2) 方差低于2的删除
b = VarianceThreshold(threshold=2).fit_transform(a)
b
- 删除标准差为0的某一列
X = X.drop(X.columns[X.std()==0], axis=1)
2.SelectKBest()方法
- f_classif,即利用ANOVA方法(方差分析(Analysis of Variance)又称F检验)来给特征打分,除此之外还有mutual_info_classif(基于互信息)、chi2(卡方检验)的方法来给特征打分后进行特征选择,这三种就可以用于常用的过滤法。
- 还有f_regression,mutual_info_regression则可以用于回归问题。
- 剩下的还有SelectPercentile (基于最高得分的百分位)等,可以根据以上举例选择需要的函数或者放入自己写的函数
from sklearn.feature_selection import SelectKBest,chi2,f_classif
- 1.默认参数是相关系数法(f_classif)
SelectKBest(k=2).fit_transform(iris.data,iris.target)
- 2.卡方检验
c = SelectKBest(chi2,k=2)
d = c.fit_transform(iris.data,iris.target)
d
- 每一个特征的评分
c.scores_
>>array([ 10.81782088, 3.7107283 , 116.31261309, 67.0483602 ])
- p-values 越小,置信度越高,特征越重要
c.pvalues_
>> array([4.47651499e-03, 1.56395980e-01, 5.53397228e-26, 2.75824965e-15])
- argsort()将索引从小到大排序,以下是将得分索引从大到小排序
m = np.argsort(c.scores_)[::-1]
m
e = pd.DataFrame(iris.data)
e
- 返回最重要的俩个特征索引名称
list(e.columns.values[m[0:2]])
>> 索引名称为 [2, 3]
- 使用卡方检验查看最重要的2个特征完整代码
from sklearn.feature_selection import SelectKBest,chi2,f_classif
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
c = SelectKBest(chi2,k=2)
d = c.fit_transform(iris.data,iris.target)
m = np.argsort(c.scores_)[::-1]
e = pd.DataFrame(iris.data)
list(e.columns.values[m[0:2]])
3.主成分分析法(PCA)
- 主要原理是某种线性投影,将高维的数据映射到低维的空间表示,并期望在所投影的维度上的数据的方差最大,以此来达到使用较少的数据维度来保留较多的原数据点的效果
from sklearn.decomposition import PCA
- 1.整数 减少到特征数量
2.小数 0-1 90% 90%-95% 剩下百分之多少的数量:3个特征的95%就剩下2个特征
def pca():"""主成分分析进行特征选择:return:"""# 特征数量达到上百的时候 考虑数据简化 数据内容也会变 特征数量减少# 1.整数 减少到特征数量 整数是1,就减少到一个特征# 2.小数 0-1 90% 90%-95%pca = PCA(n_components=0.95)data = pca.fit_transform(iris.data)print(data)
4.线性判别分析法(LDA)
- 是一种有监督的线性降维算法,使降维后的数据点更容易较区分,利用了标签的特性
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
LDA(n_components=2).fit_transform(iris.data,iris.target)
标准化,归一化,二值化,One-Hot,卡方检验选取重要特征,主成分分析,缺失值和异常值处理相关推荐
- 图像处理理论(一)——直方图、二值化、滤波基础
http://antkillerfarm.github.io/ 对比度和亮度 g(i,j)=a×f(i,j)+b g(i,j)=a\times f(i,j)+b 上式中f(i,j)f(i,j)和g(i ...
- 基于堆栈二值化自动编码器和二值化神经的无约束人脸表情识别算法(An efficient unconstrained FERa based on BAEs and BNN)
摘要(abstract) 虽然深度学习在许多模式识别任务中都取得了良好的效果,但对于含有大量参数集.标记数据有限的深度网络,过拟合问题仍然是一个严重的问题.在这项工作中,二进制自动编码器(BAEs)和 ...
- ICLR 2022|唯快不破!面向极限压缩的全二值化BiBERT
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 秦浩桐 量子位 转载 | 公众号 QbitAI 近年来,预训练 ...
- 基于旋转轮廓的点云局部浮点型和二值化特征描述(RCS)
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本次介绍一个发表于Computer Vision and Image Understanding的经典 ...
- BNN领域开山之作——不得错过的训练二值化神经网络的方法
作者| cocoon 编辑| 3D视觉开发者社区 文章目录 导读 概述 方法 确定二值化以及随机二值化 梯度计算以及累加 离散化梯度传播 乘法运算优化 基于位移(shift)的BN 基于位移的AdaM ...
- 【论文知识点笔记】Binarized P-Network(强化学习+保守值迭代+二值化神经网络)
Binarized P-Network(强化学习+保守值迭代+二值化神经网络) 一.强化学习 1. 特点 2. 介绍 3. 知识点 4. 原理 4.1. 马尔科夫决策过程(MDP) 二.保守值迭代(C ...
- 二值化处理c语言程序,数字信号处理c语言程序集
目录 1.1均匀分布的随机数 第一章 数字信号的产生 1.2正态分布的随机数 1.3指数分布的随机数 1.4拉普拉斯(Laplace)分布的随机数 1.5瑞利(Rayleigh)分布的随机数 1.6对 ...
- matlab 图像二值化_推荐:为图像处理初学者设计的100个问题(含python实现代码)...
本文整理了图像处理初学者应该需要了解的100个基础问题,涉及读取.显示图像.操作像素.拷贝图像.保存图像.灰度化(Grayscale).二值化(Thresholding).大津算法.HSV 变换.减色 ...
- OSTU大律法二值化原理
介绍 Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1) 先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落在每个 ...
最新文章
- jmap之使用说明与JVM配置
- go环境搭建_容器化 Go 开发环境的尝试
- 命令行窗口常用的一些小技巧
- 4W1T教程1 如何使用幻灯片
- matlab实现一/多元线性回归
- 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise
- 我敲的不是代码,而是……
- 医疗AI市场三年内规模可达66亿美元,哪些应用最有潜力?| 报告
- 有哪些适合女生练字的字帖?
- oracle-rac实例不能启动 报ORA-03113
- 解决树莓派aplay找不到声卡的问题
- 零基础Java学习路线
- C#panel渐变绘制
- linux的ioctl函数实现
- es创建索引和yellow排查解决
- ohci之usb_submit_urb 一
- POJ 3426 Doors and... more doors 可能会
- 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++
- 中国地图(矢量图,可放大)
- 如何成为Java软件工程师
热门文章
- bigquery_Google的BigQuery提供免费访问GDELT的权限
- 华医通显示连接服务器失败,华医通app怎么用 华医通app使用教程
- 【华为OD统一考试B卷 | 100分】5键键盘(C++ Java JavaScript Python)
- 根据拼音首字母筛选人名 1
- h5 HTML5 浏览器 录制视频
- Oracle enterprise manager 13C 安装无法正常进行
- 【RGB和RGBA之间的转换】也许对你有用
- 运行python程序电脑卡死了怎么办_【贴士】电脑运行卡或软件卡死无响应怎么办?...
- STM32串口外设是否需要加上拉电阻?
- 基于C语言的星宿网站框架设计