缺失值处理

缺失值处理

真实数据往往都不是理想的,有很多缺失值,对于缺失值,我们有三种方法进行处理。

处理方法

1. 一种简单操作:删掉缺失值所在列

除非该列缺少了大多数值,我们将该列完全删除,否则这种简单粗暴的方法会使模型丢失很多信息。

2. 更好的操作:填充

我们可以有一些值在空白处进行填充。比如我们可以用每列的平均值进行填充。这种填充在多数情况下并不会特别准确,但是相比于第一种方法来说还是会提高模型的准确率的。

3.扩展填充

填充值对于此类问题是一种标准的解决方案。但是我们插入的估计值可能高于或低于真实值。如果我们的模型用真实值来进行预测的话准确率会更高。

在这种方法中,我们先在空白处进行填充,之后我们再新建一列用来标记刚才填充的列中的数据是否为缺失值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BcqQYWiy-1666582818491)(https://aidenzpicbed.oss-cn-qingdao.aliyuncs.com/uPic/绘图3.png)]

在某些情况下,这种方法会提高准确率,有些时候没有任何帮助。

代码

导入数据

import pandas as pd
from sklearn.model_selection import train_test_split

# Load the data
data = pd.read_csv('XXX.csv')

# Select target
y = data.Target

# To keep things simple, we'll use only numerical predictors
X = data.drop(['Target'], axis=1)

# Divide data into training and validation subsets
X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2, random_state=0)

方法1

# 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)

方法2

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

方法3

# 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

文章收录于我的个人博客:欢迎大家访问我的博客网站:https://aidenz.gitee.io/

你可能感兴趣的:(数据科学,数据挖掘,python)