machine learning basic

Missing Values

数据缺失值常见产生途径:

  • 数据采集不完整或设备故障
  • 录入错误或人为省略
  • 无效或不适用的数据项
  • 不同数据源合并时的对齐缺失
  • 隐私或保密原因导致的信息遮蔽

如果尝试使用缺失值数据建立模型,大多数机器学习库(包括 scikit-learn)都会出错。

Drop Columns with Missing Values 删除有缺失值的列

除非列中的大部分值都为缺失值,否则此方法会失去很多可能有用的数据

Imputation 插补法

用替换值替换缺失数据为Imputation

常见插补方法

  1. 平均值或中位数插补

    • 优点:实现容易且速度快
    • 缺点:可能降低数据方差并扭曲分布
  2. 众数插补

    • 优点:适合离散型数据
    • 缺点:忽略类别内部差异
  3. 回归插补

    • 优点:更好地利用特征关系,提高准确度
    • 缺点:易受模型偏差影响,计算开销较大
  4. KNN插补

    • 优点:可保留数据结构,对连续与离散变量均适用
    • 缺点:对于大数据集计算量大,且容易受异常值影响
  5. 多重插补 (MICE)

    • 优点:可多次插补,兼顾随机性与灵活性
    • 缺点:实现复杂且耗时较长

大多数情况下,推算的值不会完全正确,但会比直接丢弃缺失值列得到的模型更加精确

Imputation 的延伸

可以设置多一列 推算的插补值

某些情况下,这会显著改善模型,但也有可能完全没有任何改善。

代码实现

  • Drop Columns with Missing Values
    ‘’’

Get names of columns with missing values

cols_with_missing = [col for col in X_train.columns
if X_train[col].isnull().any()]

Drop columns in training and validation data

reduced_X_train = X_train.drop(cols_with_missing, axis=1)
reduced_X_valid = X_valid.drop(cols_with_missing, axis=1)
‘’’

  • Inputation
    ‘’’
    from sklearn.impute import SimpleImputer

Imputation

my_imputer = SimpleImputer()
imputed_X_train = pd.DataFrame(my_imputer.fit_transform(X_train))
imputed_X_valid = pd.DataFrame(my_imputer.transform(X_valid))

Imputation removed column names; put them back

imputed_X_train.columns = X_train.columns
imputed_X_valid.columns = X_valid.columns
‘’’

  • An Extension to Imputation
    ‘’’

Make copy to avoid changing original data (when imputing)

X_train_plus = X_train.copy()
X_valid_plus = X_valid.copy()

Make new columns indicating what will be imputed

for col in cols_with_missing:
X_train_plus[col + ‘_was_missing’] = X_train_plus[col].isnull()
X_valid_plus[col + ‘_was_missing’] = X_valid_plus[col].isnull()

Imputation

my_imputer = SimpleImputer()
imputed_X_train_plus = pd.DataFrame(my_imputer.fit_transform(X_train_plus))
imputed_X_valid_plus = pd.DataFrame(my_imputer.transform(X_valid_plus))

Imputation removed column names; put them back

imputed_X_train_plus.columns = X_train_plus.columns
imputed_X_valid_plus.columns = X_valid_plus.columns
‘’’

评论