如果数据不给力,在高级的算法都没有用。
五大步骤
Preprocessing
模块:preprocessing 几乎包含所有数据预处理的内容
模块:Impute 填补缺失值专用
模块:feature_selection 包含特征选择的各种方法的实践
在实践中,希望数据换到同一规格(比如 0 ~ 10 之间,或者满足标准正态分布)----这就是无量纲化。
在以梯度或者矩阵核心的算法中(逻辑回归、支持向量机、神经网络)可以加快求解速度;
而在距离类模型(KNN、K-means聚类)中可以提高模型的精度,避免某一个取值范围特别大的特征对距离计算造成影响
特例:决策树和树的集成算法不需要无量纲化,它对任意数据都能处理得很好。
当数据(x)按照最小值中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到[0,1]之间,而这个过程,就叫做数据归一化(Normalization,又称Min-Max Scaling),服从正态分布。
正则化是regularization,不是预处理手段
x ∗ = x − m i n ( X ) m a x ( X ) − m i n ( x ) x^* = \frac{x-min(X)}{max(X)-min(x)} x∗=max(X)−min(x)x−min(X)
# 调库
from sklearn.preprocessing import MinMaxScaler
# 实例化
scaler = MinMaxScaler(feature_range=[0,1]) # 这里的参数能够调整使得范围达到想要结果内
scaler = scaler.fit(data) # 会生成min(x) 和 max(x)
# 如果数据量太大 建议使用 scaler.partial_fit(data) 避免报错
result = scaler.transform(data)
###############################
result = scaler.fit_transform(data) # 一步达成
###############################
# 逆转结果
scaler.inverse_transform(result)
# 复习numpy必要的语法
X.min(axis=0) # 每一列的最小值
X.max(axis=1) # 每一行的最大值
from sklearn.preprocessing import StandardScaler
当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放
得到均值为 0 ,方差为 1 的正态分布
数据标准化(Standardization or Z-score nomalization)
x ∗ = x − μ σ x^*=\frac{x-μ}{\sigma} x∗=σx−μ
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(data) # 生成均值和方差
scaler.mean_ # 均值
scaler.var_ # 方差
new_data_fted = scaler.fit_transform(data) # 也可以分两步
scaler.inverse_transform(new_data_tfed)
new_data_fted.mean() #导出的结果是一个数组,用mean()查看均值
new_data_fted.std() #用std()查看方差
注:一维的报错
# 复习pandas
import pandas as pd
data = pd.read_csv("path", index_col=0) # 以第零列当作索引
data.info() # 看数据整体信息
data.loc[:, "name"] #loc表示使用索引的名字 来进行获取
data.loc[:, "name"].values.reshape(-1, 1) # 获取值并且升维
class sklearn.impute.SimpleImputer (missing_values=nan, strategy=’mean’, fill_value=None, verbose=0,copy=True)
参数 以及 含义&输入
missing_values
strategy
填补缺失值的策略,默认均值。
输入“mean”使用均值填补(仅对数值型特征可用)
输入“median"用中值填补(仅对数值型特征可用)
输入"most_frequent”用众数填补(对数值型和字符型特征都可用)
输入“constant"表示请参考参数“fifill_value"中的值(对数值型和字符型特征都可用)
fifill_value
copy
from sklearn.impute import SimpleImputer
# 实例化,具体要怎么填补
imp = SimpelImputer(strategy="median") # 中位数填补
imp = SimpelImputer(strategy="constant", fill_value=value?, copy=True) # 自定义填补
# 进行填补
imp_value = imp.fit_transform(data.loc[:, "name"]) # 填补并且返回一个copy副本
# 如果要覆盖
data.loc[:, "name"] = imp_value
# 在DataFrame中
data.loc[:, "name"] = data.loc[:, "name"].fillna(data.loc[:, "name"].median())
# 可以删除缺失值
data.dropna(axis=0, inplace=True) # 按行删除,axis=1时为列。
new_data = data.dropna(axis=1, inplace=False) # 按列进行删除,生成复制对象,不进行原数据集上修改