machine learning basic
Missing Values
数据缺失值常见产生途径:
- 数据采集不完整或设备故障
- 录入错误或人为省略
- 无效或不适用的数据项
- 不同数据源合并时的对齐缺失
- 隐私或保密原因导致的信息遮蔽
如果尝试使用缺失值数据建立模型,大多数机器学习库(包括 scikit-learn)都会出错。
Drop Columns with Missing Values 删除有缺失值的列
除非列中的大部分值都为缺失值,否则此方法会失去很多可能有用的数据
Imputation 插补法
用替换值替换缺失数据为Imputation
常见插补方法
平均值或中位数插补
- 优点:实现容易且速度快
- 缺点:可能降低数据方差并扭曲分布
众数插补
- 优点:适合离散型数据
- 缺点:忽略类别内部差异
回归插补
- 优点:更好地利用特征关系,提高准确度
- 缺点:易受模型偏差影响,计算开销较大
KNN插补
- 优点:可保留数据结构,对连续与离散变量均适用
- 缺点:对于大数据集计算量大,且容易受异常值影响
多重插补 (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
‘’’