机器学习之基础知识(从数据处理到模型评估)

1.数据预处理

1.1归一化

在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布 的需求,这种需求统称为将数据“无量纲化”。 ​ 譬如梯度和矩阵为核心的算法中,譬如逻辑回归,支持向量机,神经网络,无量纲化可以加快求解速度;而在距离类模型,譬如K近邻,K-Means聚类中,无量纲化可以帮我们提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。

  • preprocessing.MinMaxScaler

    当数据(x)按照最小值中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到 [0,1]之间,而这个过程,就叫做数据归一化。 归一化之后的数据服从正态分 布,公式如下:

    x^*=\frac{x-min(x)}{max(x)-min(x)}

     

    在sklearn当中,我们使用preprocessing.MinMaxScaler来实现这个功能。

    MinMaxScaler有一个重要参数, feature_range,控制我们希望把数据压缩到的范围,默认是[0,1].

    from sklearn.preprocessing import MinMaxScaler
     ​
    x = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
    scaler = MinMaxScaler(feature_range=[5,10]) #默认为[0,1] 
    x = scaler.fit_transform(x)
  • preprocessing.StandardScale

    当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分 布),而这个过程,就叫做数据标准化(Standardization,又称Z-score normalization),公式如下:

    x^*=\frac{x-\mu}{\sigma}

     

    在sklearn当中,我们使用preprocessing.StandardScaler来实现这个功能。

     from sklearn.preprocessing import StandardScaler 
     ​
     x = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
     stdsc = StandardScaler()
     x = stdsc.fit_transform(x)
  • 小结

    大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏 感。在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中,StandardScaler往往是最好的选择。 ​ MinMaxScaler在不涉及距离度量、梯度、协方差计算以及数据需要被压缩到特定区间时使用广泛,比如数字图像处理中量化像素强度时,都会使用MinMaxScaler将数据压缩于[0,1]区间之中

1.2缺失值处理

  • 对于连续值,常常使用均值或者中位数去填充缺失值;

  • 对于离散值,常常使用众数填充,或者把缺失值当作一个单独的类别。

  • 对于缺失率超过一定阈值的特征,可以考虑直接舍弃。

 # 用impute.SimpleImputer进行填补
 from sklearn.impute import SimpleImputer 
 ​
 # 对连续值Age进行填充    
 Age = data.loc[:,"Age"].values.reshape(-1,1)            #sklearn当中特征矩阵必须是二维 
 # 实例化
 age_median = SimpleImputer(strategy="median")           #用中位数填补 (默认均值填补) 
 age_0 = SimpleImputer(strategy="constant",fill_value=0) #使用具体值填补,用fill_value指定
 # 转化
 age_median = age_median.fit_transform(Age)    #fit_transform一步完成调取结果 
 age_0 = age_0.fit_transform(Age)
 #把填补后的列赋值回原来的矩阵里
 data.loc[:,"Age"] = age_median
 ​
 # 对离散值Embarked进行填充 
 Embarked = data.loc[:,"Embarked"].values.reshape(-1,1) 
 Embarked_most = SimpleImputer(strategy = "most_frequent")   #使用众数填补
 data.loc[:,"Embarked"] = Embarked_most.fit_transform(Embarked)
 ​
 # 用Pandas进行填补
 import pandas as pd 
  
 data.loc[:,"Age"] = data.loc[:,"Age"].fillna(data.loc[:,"Age"].median()) #.fillna 在data1Frame里面直接进行填补
 data.dropna(axis=0,inplace=True) #.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列
  • SimpleImputer参数详解

    class sklearn.impute.SimpleImputer(*, missing_values=nan, strategy=‘mean’, fill_value=None, verbose=0, copy=True, add_indicator=False)
    • missing_values:int, float, str, (默认)np.nan或是None, 即缺失值是什么。

    • strategy:空值填充的策略,共四种选择(默认)mean、median、most_frequent、constant。mean表示该列的缺失值由该列的均值填充。median为中位数,most_frequent为众数。constant表示将空值填充为自定义的值,但这个自定义的值要通过fill_value来定义。

    • fill_value:str或数值,默认为Zone。当strategy == "constant"时,fill_value被用来替换所有出现的缺失值(missing_values)。fill_value为Zone,当处理的是数值数据时,缺失值(missing_values)会替换为0&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值