1.数据预处理
1.1数据无量纲化
在sklearn.preprogressing模块中有很多类可以帮我们在处理数据集中进行预处理,下图是各个类的使用说明
调用方式同一般机器学习方法相同。
from sklearn.preprocessing import StandarScaler
scale = StandarScaler()
scale = scale.fit(data)
result = scale.transform(data)
result = StandarScale().fit(data).transform(data)
1.2处理分类变量:编码与哑变量
1.2.1preprocessing.LabelEncoder
将某个特征中的文本转换为数值变量
from sklearn.preprocessing import LabelEncoder
data.iloc[:,-1] = LabelEncoder().fit(data.iloc[:,-1]).transform(data.iloc[:,-1])
1.2.2preprocessing.OrdinalEncoder:特征专用,能够将分类特征转换为分类数值(同上)
1.2.3preprocessing.OneHotEncoder:独热编码,创建哑变量
类别OrdinalEncoder可以用来处理有序变量,但对于名义变量,我们只有使用哑变量的方式来处理,才能够尽量向算法传达最准确的信息,如:
1) 舱门(S,C,Q)
三种取值S,C,Q是相互独立的,彼此之间完全没有联系,表达的是S≠C≠Q的概念。这是名义变量。
2) 学历(小学,初中,高中)
三种取值不是完全独立的,我们可以明显看出,在性质上可以有高中>初中>小学这样的联系,学历有高低,但是学历取值之间却不是可以计算的,我们不能说小学 + 某个取值 = 初中。这是有序变量。
3) 体重(>45kg,>90kg,>135kg)
各个取值之间有联系,且是可以互相计算的,比如120kg - 45kg = 90kg,分类之间可以通过数学计算互相转换。这是有距变量。
1.3处理连续性变量:二值化和分箱
sklearn.preprocessing.Binarizer
根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量。大于阈值的值映射为1,而小于或等于阈 值的值映射为0。默认阈值为0时,特征中所有的正值都映射到1。二值化是对文本计数数据的常见操作,分析人员可以决定仅考虑某种现象的存在与否。它还可以用作考虑布尔随机变量的估计器的预处理步骤(例如,使用贝叶斯设置中的伯努利分布建模)。
preprocessing.KBinsDiscretizer
这是将连续型变量划分为分类变量的类,能够将连续型变量排序后按顺序分箱后编码。总共包含三个重要参数:
2.特征工程
特征工程分为:特征提取、特征创造、特征选择
方差过滤(过滤掉方差小的特征)、卡方检验、F检验、互信息(统计特征的独立性与否)