一、特征工程和文本提取
文本特征提取
字典提取
二、数据特征预处理
归一化
sklearn 归一化:sklearn.preprocessing.MinMaxScaler
-》语法:MinMaxScaler(feature_range(0,1)…)
- 每个特征缩放到给定范围(默认[0,1])
- MinMaxScaler.fit_transform(X)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:转换后的形状相同的array
-》步骤:
1.实例化MinMaxScaler
2.通过fit_transform转换
from sklearn.preprocessing import MinMaxScaler
def mm():
"""归一化"""
mm = MinMaxScaler(feature_range=(2,3))
data = mm.fit_transform([[90,2,10,40],
[60,4,15,45],
[32,44,54,22]])
print(data)
return None
if __name__ =="__main__":
mm()
->归一化应用
当几个特征同等重要的时候,进行归一化.(把所有的数据都转化到统一标准下)
目的:使一个特征对最终结果不会造成更大的影响(有时候一个数的数值很大,会影响到其他的影响因素,使其他影响因素的影响小得忽略不计,因此要进行归一化)
->问题:如果数据中异常点较多,会有什么影响?
公式:
异常值对最大值和最小值的影响很大,会对结果造成偏差.
所以归一化的缺点就使非常容易受异常点的影响,所以这种方法受鲁棒性交叉,只适合传统精确小数据场景.
#鲁棒性:反应产品的稳定性
标准化
目的和归一化一样,使得一个特征对最终结果不会造成最大的影响.
->特点:通过对原始数据进行变换把数据平均值变换到0,标准差为1的范围内
->公式:
方差为0 的情况:所有这个特征所有值都一样,数据越集中,方差越小;数据越离散,方差越大.
- 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
- 对于标准化来说:如果出现异常点,由于具有一定数量,少量的异常点对于平均值的影响并不大,从而方差改变较小.
-> sklearn特征化API:scikit-learn.processing.StandardScaler
->语法:
- StandardScaler(…)
- 处理之后每列所有数据都聚集在均值为0附近标准差为1
- StandardScaler.fit_transform(X)
- X:numpy.array格式的数据[n_samples,n_features]
- 返回值:转换后的形状相同的array
StandardScaler.mean_- 原始数据中每列特征的平均值
StandardScaler.std_- 原始数据每列特征的方差
from sklearn.preprocessing import StandardScaler
def zz():
"""
标准化
:return:
"""
# 实例化对象
bz = StandardScaler()
# 调用方法
data = bz.fit_transform([
[-1,-1,3],
[2,4,2],
[4,6,-1]
])
print(data)
return None
if __name__ =="__main__":
zz()
->标准化总结:在以有的样本足够多的情况下比较稳定,适合现代嘈杂大数据场景.
数值型的数据:标准缩放:1.归一化;2.标准化;3.缺失值(主要用pandas处理)
类别型数据:one-hot编码, 在该列中,是就用1 表示,不是就用0表示
时间类型:时间的切分
缺失值处理
1.删除
如果每行或每列的数据确实达到一定的比例,建议放弃正航或者整列
2.填补
可以通过缺失值每行或者每列的平均值\中位数来填充(建议按列)
-> sklearn缺失值API:sklearn.processing.imputer
->语法:
- imputer(missing_value=‘NAN’,strategy=‘mean’,axis=0)
- 0 是按列;1是按行
- 完成缺失值插补
imputer.fit_transform(X)
- X:numpu.array 格式的数据[n_samples,n_features]
- 返回值:转换后的形状相同的array
->关于np.nan(np.NaN)
1.numpy的数组中可以使用np.nan/np.NaN 来代替缺失值,属于float类型
2.如果是文件中的一些缺失值,可以替换成nan,通过np.array转化为float型的数组即可
特征的预处理
对数据进行处理
->特征预处理是什么?
通过特定的统计方法(数学方法)将数据转换为算法要求的数据
->特征处理API,所有预处理的方法都在这个模块中
sklearn.processing
三.数据降维
维度:特征的数量
1.特征选择
-》特征选择是什么
特征选择就是单纯的从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值,也不改变值,但是选择后的特征位数肯定比选择前小,毕竟我们只选择了其中的一部分特征。
-》特征选择的主要方法(三大武器)
- Filter(过滤式):VarianceThreshold(对方差进行过滤)
例:方差为0 :一列的数据都一样,不当作问题分析的特征。所以如果拿到一些数据了。 - Embedded(嵌入式):正则化、决策树(后期算法解释)、神经网络
- Wrapper(包裹式)–基本上不使用
-》sklearn特征选择API
sklearn.feature_selection.VarianceThreshold
-》语法: - VarianceThreshold(threshold=0.0)
- 删除所有低方差特征
- Variance.fit_transform(X)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:训练集差异低于threshold的特征将被删除
- 默认值是所有非零方差特征,即删除所有样本中具有相同值的特征
-》流程
1.初始化VarianceThreshold,指定阈值方差
2.调用fit_transform方法
from sklearn.feature_selection import VarianceThreshold
def var():
"""
删除低方差的特征
:return: None
"""
var = VarianceThreshold(threshold=0.0)
data = var.fit_transform([
[0,2,0,3],
[0,1,4,3],
[0,1,1,3]
])
print