数据预处理以及特征工程
使用的库
from sklearn.preprocessing import LabelEncoder,OrdinalEncoder,OneHotEncoder,Binarizer
from sklearn.impute import SimpleImputer
from sklearn.feature_selection import VarianceThreshold
from sklearn.model_selection import cross_val_score
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2,f_classif,mutual_info_classif,SelectFromModel,RFE
数据无量纲化
数据归一化 (中心化、缩放)
sklearn.preprocessing import MinMaxScaler
计算公式
z = (x- min(x))/(max(x)-min(x))
a = MinMaxScaler() + b = fit_transform() 完成归一化
a.inverse_transform(b) 可以逆转
标准化 (from sklearn.preprocessing import StandardScaler)
按均值中心化(类似正态分布中心线为0),按标准差进行缩放(正态分布 压缩到1)
X* = (x-μ)/σ
参数
feature_range ---- 控制压缩范围 默认[0,1]
属性和接口示例
Scaler = StandardScaler()
Scaler.fit(data)
Scaler.mean_ 查看均值的属性 fit后使用 不能使用fit_transform
Scaler.var_ 查看方差 fit后使用 不能使用fit_transform
MaxAbsScaler
只进行缩放不中心化
不会破坏数据集的稀疏性
其他数据处理方式
加粗样式-----------------------------------------------------------------------------------------------------
缺失值处理
常用库
from sklearn.impute import SimpleImputer
SimpleImputer参数
missing_values
确定缺失值的数值或者字符 如默认值为np.nan
startegy
填补缺失值的策略 默认为均值
‘mean’ ‘median’ ‘most_frequent’ 众数
‘constant’ 配合fill_calue参数一起使用 表示固定数值填补缺失值 fill_value = 固定的数值
copy
布尔值参数
默认为True 会创建特征矩阵的副本 不会修改原特征矩阵
处理分类特征 编码与哑变量
常用库
from sklearn.preprocessing import LabelEncoder,OrdinalEncoder,OneHotEncoder,Binarizer
LabelEncoder
将分类字符串类型数据转换成分类数值型数据
具体操作
#实例化
le = LabelEncoder()
#输入数据拟合
le = le.fit(y)
le.classes_ 返回类别数据
#输出数据
res = le.transoform(y)
#逆转
data = le.inverse_transform(res)
简洁写法
data.iloc[:,-1] = LabelEncoder().fit_transform(data.iloc[:,-1])
特征专用————不能使用一维数据 需要转换成高维 .reshape(-1,1)
OrdinalEncoder
特征专用 能将分类特种转换成分类数值
具体操作
#实例化
le =OrdinalEncoder()
#输入数据拟合
le = le.fit(y)
le.categories_ 返回类别数据
#输出数据
res = le.transoform(y)
#逆转
data = le.inverse_transform(res)
简洁写法
data.iloc[:,-1] = OrdinalEncoder().fit_transform(data.iloc[:,-1])
OneHotEncoder——独热编码 创建哑变量
具体操作
o_hot = OneHotEncoer(categories = ‘auto’).fit(X)
重要属性
o_hot.categories_
res = o_hot.transform(X).toarray() #转换成数组类型
#获取具体列名
res.get_feature_names() #会返回x0类1 x0类2 x1类1 x2类2 类似列名
数据类型以及常用的统计量总结
处理连续性特征:二值化与分段
设置阈值 将数据分为大于阈值以及小于阈值的两部分
二值化
库
from sklearn.preprocessing import Binarizer
具体操作
#类为特征专用,所以不能使用一维数组
X = data_2.iloc[:,0].values.reshape(-1,1)
transformer =Binarizer(threshold=30).fit_transform(X)
将连续性遍历划分为分类变量
能将连续型遍历排序后按顺序分箱后编码
库
preprocessing.KBinsDiscretizer
重要参数
n_bins
每个特征中的分箱个数 默认为5
encode
编码方式 默认onehot
‘onehot’ 做哑变量
“ordinal” 类似于OrdinalEncoder
strategy
定义箱宽的方式 默认quantile
‘uniform’ 表示等宽分箱 每个特征中的每个箱的最大值差值
(特征.max() - 特征.min())/n_bins 每个箱范围一致
‘quantile’ 等位分箱 即每个特征中的每个箱内的样本数量相同
‘kmeans’ 聚类分享 没给昂中的值最到最近一维k均值聚类的族心的距离相同
具体操作
#实例化
est = KBinsDiscretizer(n_bins = 3,encode = ‘ordinal’,strategy=‘uniform’)
#拟合转化输出数据
res = est.fit_transform(X)
#one hot 记得toarray()
est = KBinsDiscretizer(n_bins=3,encode=‘onehot’, strategy=‘uniform’)
#查看转换后分的箱:变成了哑变量
est.fit_transform(X).toarray()