http://sklearn.apachecn.org/cn/0.19.0/modules/preprocessing.html#preprocessing

保证特征之间的差异一样

2.1、缺失值处理

统计缺失值的个数

null_counts = loans.isnull().sum()

删除整个记录里任何一个变量有缺失值的记录
一般不建议使用

dropna=titanic_df.dropna()
dropna.info()

填充

import numpy as np
from sklearn.preprocessing import Imputer# 策略有 mean,most_frequent,median
imp=Imputer(missing_values='NaN',strategy='mean',axis=0)
imp.fit([[1,2],[np.nan,3],[7,6]])# fit 求得第一列特征值为4,第二列特征值为11/3
X=[[np.nan,2],[6,np.nan],[7,6]]
print(imp.transform(X))# 求均值
age_mean=round(titanic_df['Age'].mean())
# 均值填充
titanic_df['Age'].fillna(age_mean,inplace=True)
titanic_df.Age.describe()

2.1.2、字符型数据的处理

映射成数值型来替换,百分比的转成float
mapping_dict = {"emp_length": {"10+ years": 10,"9 years": 9,"8 years": 8,"7 years": 7,"6 years": 6,"5 years": 5,"4 years": 4,"3 years": 3,"2 years": 2,"1 year": 1,"< 1 year": 0,"n/a": 0}
}
loans = loans.drop(["last_credit_pull_d", "earliest_cr_line", "addr_state", "title"], axis=1)
loans["int_rate"] = loans["int_rate"].str.rstrip("%").astype("float")
loans["revol_util"] = loans["revol_util"].str.rstrip("%").astype("float")
loans = loans.replace(mapping_dict)

2.2、数据的标准化

所有函数都封装在sklearn.preprocessing

  • StandarScaler: 缩放至0均值,1标准差
  • MinMaxScaler:缩放至[0,1],也可以指定范围feature_range。
  • MaxAbsScaler:缩放至[-1,1],无偏移。
  • RobustScaler:缩放有异常值的特征(有个别数特大或特小)

MinMaxScaler

from sklearn import preprocessingscaler=preprocessing.MinMaxScaler(feature_range=(0,1))   # 将样本的值缩放到0-1之间
scaler.fit(iris.data)
data=scaler.transform(iris.data)# 两个代码也可以合成一句
# data=scaler.fit_transform(iris.data)
target=iris.target
MaxAbsScaler:缩放至[-1,1],无偏移。(稀疏矩阵推荐使用)

y为稀疏矩阵,使用MaxAbsScaler

y=np.array([0]*95+[0.0,20,0,10,-10])
y=y.reshape(-1,1)scaler=preprocessing.MaxAbsScaler(copy=True)
z=scaler.fit_transform(y)
z[-10:]

RobustScaler:缩放有异常值的特征(有个别数特大或特小)

# x为一个具有异常值的特征
x=np.array([10,1000,0,0,-30,0,20,0,10,0,0,-10])
x=x.reshape(-1,1)
# RobustScaler
robustscaler=preprocessing.RobustScaler(with_centering=True,with_scaling=True,quantile_range=(25.0,75.0),copy=True)
print(robustscaler.fit_transform(x))

2.3、数据正则化(归一化)

正则化是缩放单个样本以具有单位范数的过程。正则化有时也叫归一化。如果计划使用二次形式(如点积或任何其他核函数)来量化任何样本间的相似度,则此过程非常有用。


常用的是L2范数

from sklearn import preprocessingX=[[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]]# 使用normalize函数
X_normalize=preprocessing.normalize(X,norm='l2')
print(X_normalize)# 使用Normalizer类
normalizer=preprocessing.Normalizer(norm='l1')
normalizer.fit(X)
normalizer.transform(X)

2.4、特征的二值化(不常用)

将数值特征用阙值过滤得到布尔值的过程。

X=[[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]]
binarizer=preprocessing.Binarizer().fit(X)
binarizer
binarizer.transform(X)# 设定一个阙值
binarizer=preprocessing.Binarizer(threshold=1.1)
binarizer.transform(X)

2.5、分类特征的编码(独热编码)

机器学习中,特征经常不是数值型的而是分类型,(性别),如果分别用0和1来表示,数字就有运算的功能,性别就会变得有序了,不利于训练。为了解决这个问题,使用独热编码。

(1)、使用pandas进行独热编码

  • data : array-like, Series, or DataFrame:输入的数据
  • prefix : string, list of strings, or dict of strings, default None:get_dummies转换后,列名的前缀
  • columns : list-like, default None:指定需要实现类别转换的列名
  • dummy_na : bool, default False:增加一列表示空缺值,如果False就忽略空缺值
  • drop_first : bool, default False:获得k中的k-1个类别值,去除第一个

原文:https://blog.csdn.net/u010665216/article/details/78635664

import pandas as pd
# 把Pclass进行独热编码,保存为新数据对象,prefix参数设置独热编码后的变量前缀Pclass_onehot=pd.get_dummies(titanic_df.Pclass,prefix='Pclass')
# 拼接,并删除原来数据
titanic_df = pd.concat([titanic_df, Pclass_onehot], axis=1)
titanic_df = cars.drop("Pclass", axis=1)
Pclass_onehot.head()
from sklearn import preprocessing
X=[[0,0,3],[1,1,0],[0,2,1],[0,0,3]]
onehot=preprocessing.OneHotEncoder()onehot.fit_transform(X).toarray()  # 将稀疏矩阵转化为普通矩阵array([[1., 0., 1., 0., 0., 0., 0., 1.],[0., 1., 0., 1., 0., 1., 0., 0.],[1., 0., 0., 0., 1., 0., 1., 0.],[1., 0., 1., 0., 0., 0., 0., 1.]])# 如果训练集有丢失的分类特征值,必须显示地设置n_values
encoder=preprocessing.OneHotEncoder(n_values=[2,4,4])
encoder.fit_transform(X).toarray()array([[1., 0., 1., 0., 0., 0., 0., 0., 0., 1.],[0., 1., 0., 1., 0., 0., 1., 0., 0., 0.],[1., 0., 0., 0., 1., 0., 0., 1., 0., 0.],[1., 0., 1., 0., 0., 0., 0., 0., 0., 1.]])       

2.6、生成多项式的特征

在机器学习中,通过增加一些输入数据的非线性特征来增加模型的复杂程度,一个简单通用的办法就是使用多项式特征,这可以获得特征的更高次数和互相间关系的项。
增加复杂度,解决欠拟合问题(支持向量机中的核函数:低维到高维)

直接用 X1,X2X1,X2 线性不可分割,使用多项式 X21+X22−1=0X12+X22−1=0 ,就可以分割

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
X=np.arange(6).reshape(3,2)# 生成平方项
ploy=PolynomialFeatures(2)
print(X)
print(ploy.fit_transform(X))[[0 1]
[2 3]
[4 5]][[ 1.  0.  1.  0.  0.  1.]
[ 1.  2.  3.  4.  6.  9.]
[ 1.  4.  5. 16. 20. 25.]]# X 的特征已经从(X1,X2) (X1,X2) 转换为(1,X1,X2,X21,X1X2,X22) (1,X1,X2,X12,X1X2,X22)
# 在一些情况,只需要特征间的交互项,就可以通过设置 interaction_only=True 来得到
# X 的特征已经从(X1,X2)转换为(1,X1,X2,X1X2,)
ploy2=PolynomialFeatures(2,interaction_only=True)
print(ploy2.fit_transform(X))

2.7、样本不均衡的方案

1、下采样:多的选择跟少的一样多

# 拆开表格,分为X、y,Class 为y(预测值)
X=data.ix[:,data.columns !='Class']
y=data.ix[:,data.columns == 'Class']# 下采样,找出 1 的数量和对应的索引值
number_records_fraud=len(data[data.Class==1])
fraud_indices=np.array(data[data.Class==1].index)# 0的索引值
normal_indices = data[data.Class == 0].index# 随机选择跟1一样多的数据,参数(数据,个数,是否代替)再转成array。
random_normal_indices = np.random.choice(normal_indices ,number_records_fraud,replace =False)
random_normal_indices = np.array(random_normal_indices)# 两个索引值合并到一起
under_sample_indices = np.concatenate([fraud_indices,random_normal_indices])
# 根据索引提取新的数据
under_sample_data = data.iloc[under_sample_indices,:]X_undersample = under_sample_data.ix[:,under_sample_data.columns !='Class']
y_undersample = under_sample_data.ix[:, under_sample_data.columns == 'Class']# 可视化
print("Percentage of normal transactions: ", len(under_sample_data[under_sample_data.Class == 0])/len(under_sample_data))print("Percentage of fraud transactions: ", len(under_sample_data[under_sample_data.Class == 1])/len(under_sample_data))
print("Total number of transactions in resampled data: ", len(under_sample_data))

2、过采样:让少的数据再生成一部分数据,跟多的一样多

数据洗牌(打乱):shuffle

np.random.shuffle(data)# 洗牌,返回的是indexshuffled_index = np.random.permutation(admissions.index)
#print shuffled_index

训练数据、测试数据的切分

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
#整体数据切分
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, random_state = 0)print("Number transactions train dataset: ", len(X_train))
print("Number transactions test dataset: ", len(X_test))
print("Total number of transactions: ", len(X_train)+len(X_test))# 下采样数据的切分
X_train_undersample, X_test_undersample,
y_train_undersample, y_test_undersample =
train_test_split(X_undersample,y_undersample,test_size = 0.3,random_state = 0)print("")
print("Number transactions train dataset: ", len(X_train_undersample))
print("Number transactions test dataset: ", len(X_test_undersample))
print("Total number of transactions: ", len(X_train_undersample)+len(X_test_undersample))

设置不同权重项

Python机器学习-数据预处理(二)相关推荐

  1. 吴裕雄 python 机器学习——数据预处理标准化StandardScaler模型

    from sklearn.preprocessing import StandardScaler#数据预处理标准化StandardScaler模型 def test_StandardScaler(): ...

  2. 吴裕雄 python 机器学习——数据预处理过滤式特征选取SelectPercentile模型

    from sklearn.feature_selection import SelectPercentile,f_classif#数据预处理过滤式特征选取SelectPercentile模型 def ...

  3. Python机器学习数据预处理:读取txt数据文件并切分为训练和测试数据集

    背景信息 在使用Python进行机器学习时,经常需要自己完成数据的预处理,本节主要实现对txt文本数据的读取,该文本满足如下要求: 每行为一条样本数据,包括特征值与标签,标签在最后 样本数据的特征值之 ...

  4. [机器学习]-[数据预处理]-中心化 缩放 KNN(二)

    上次我们使用精度评估得到的成绩是 61%,成绩并不理想,再使 recall 和 f1 看下成绩如何? 首先我们先了解一下 召回率和 f1. 真实结果 预测结果 预测结果   正例 反例 正例 TP 真 ...

  5. 机器学习数据预处理之离群值/异常值:图像对比法

    机器学习数据预处理之离群值/异常值:图像对比法 garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的估计. 简单来说,异常值是一 ...

  6. 机器学习数据预处理之离群值/异常值:箱图法(boxplot method)

    机器学习数据预处理之离群值/异常值:箱图法(boxplot method) garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的 ...

  7. 机器学习数据预处理之离群值/异常值:MAD法(绝对值差中位数法)+绝对中位差(Median Absolute Deviation,MAD)

    机器学习数据预处理之离群值/异常值:MAD法(绝对值差中位数法)+绝对中位差(Median Absolute Deviation,MAD) garbage in,garbage out. 异常值是分析 ...

  8. 机器学习数据预处理之缺失值:预测填充(回归模型填充、分类模型填充)

    机器学习数据预处理之缺失值:预测填充(回归模型填充.分类模型填充) garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题 ...

  9. 机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值

    机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常 ...

最新文章

  1. 用指针式万用表欧姆档检测发光二极管
  2. 《实施Cisco统一通信VoIP和QoS(CVOICE)学习指南(第4版)》一导读
  3. Vue组件实现函数防抖
  4. day20 文件上传
  5. U盘的针脚板竟然掉了
  6. “快易需求系统”数据库设计心得
  7. 可以退税吗_个人所得税APP详细操作步骤来了!你成功“退税”了吗?
  8. 工业测试软件技术指标,工业过程难测参数软测量建模方法研究及应用
  9. 怎么进行企业工商信息查询?
  10. sklearn_scaler
  11. w ndows无法完成格式化,硬盘无法格式化-windows无法完成格式化怎么办
  12. Flink SQL 连接Hive并写入/读取数据
  13. 淘宝技术发展(Oracle/支付宝/旺旺)
  14. UE4_直播RT输出到OBS教程
  15. 百度地图、高德地图、腾讯地图比较
  16. 软件测试行业的优缺点
  17. 【图像融合】基于matlab高分辨率全色图IHS图像融合(含评价指标)【含Matlab源码 2406期】
  18. 想搞机器学习,不会特征工程?你TM逗我那!
  19. 无线wifi与802.1x 说明
  20. 求职失败的方法2-面试的时候过于紧张

热门文章

  1. 关于程序员秃顶和预防的小知识
  2. 电位移矢量法向向量连续性证明
  3. linux系统升级python版本
  4. Spring Cloud Alibaba 2021.0.1.0 版本发布啦
  5. IT时代,为什么要学习UI设计
  6. 【安装PyTorch报错】InvalidArchiveError(‘Error with archive D:\\anaconda\\pkgs\\pytorch-1.2.0-py3.6····
  7. 4大领域、33篇课题成果,2021阿里研究生态报告集来了
  8. Python Apex YOLO V7 main 目标检测 全过程记录
  9. Python验证信用卡号的有效性(算法)(称为Luhn检测或者mod 10 检测)
  10. Chromium for mac(谷歌浏览器)V89.0.4336.0官方最新版