其他分享
首页 > 其他分享> > 机器学习基于缺失值的填充法则

机器学习基于缺失值的填充法则

作者:互联网

代码数据网址:https://work.datafountain.cn/forum?id=68&type=2&source=1

### 导入数据集
import numpy as np    # Python中进行数值计算的库
import pandas as pd    # Python中进行数据处理的库
import warnings
warnings.filterwarnings('ignore') #  忽略弹出的warnings


data=pd.read_csv("loan.csv",encoding="utf-8")
data.head(5)
print(data.shape)

me v:18340082396

查看缺失值的情况

### 查看数据集缺失情况
missingDf = data.isnull().sum().sort_values(ascending=False).reset_index()
missingDf.columns = ['feature', 'miss_num']    
missingDf['miss_percentage'] = missingDf['miss_num'] / data.shape[0]    # 缺失值比例 data.shape= (400000, 145)
missingDf.head(10)    # 缺失值最多的前十列特征

 

thr = (1 - 0.3) * data.shape[0]  
data = data.dropna(thresh=thr, axis=1)     #若某一列数据特征的数据不足这个thresh=thr 这一列就会被删除掉
print("缺失超过30%的特征列都删除掉了" ,(data.shape))

缺失值过大的行也要删除掉

thr=0.7*data.shape[1]
data = data.dropna(thresh=thr, axis=0)     #若某一行数据缺失的数量不足这个thresh=thr 这一行就会被删除掉
print("缺失超过30%的特征列都删除掉了" ,(data.shape))

 ## 缺失值填充 统计值填充法

### dti属性是数值特征,可以使用均值或中位数进行填充
print("dti特征列有%d个缺失值\n" % data['dti'].isnull().sum())
#                                        检查空值的数量并统计 总数 
print("dti特征列的统计信息:\n", data['dti'].describe())
#                                  这一列数据的描述 
data['dti'].fillna(data['dti'].median(), inplace=True)    # 这里采用中位数填充   numpy.mean()   numpy.median()
#         .fillna(x)用x来代替 数据中的所有的空值                                    求均值          求中位数
#                inplace=True:不创建新的对象,直接对原始对象进行修改;
#                inplace=False:对数据进行修改,创建并返回新的对象承载其修改结果
print("\n填充中位数后dti特征列的统计信息:\n", data['dti'].describe())
print("\n此时dti特征列有%d个缺失值\n" % data['dti'].isnull().sum())

## 缺失值填充法 建模填充 用机器学习的方法 用不缺失的值来预测缺失的位置的数据 

### 以revol_util(信用账户的使用率)特征为例,导入sklearn的随机森林算法预测缺失值
from sklearn.ensemble import RandomForestRegressor    
rfDf = data.copy()

# 用revol_util特征值非空的样本构建训练集,revol_util特征值缺失的样本构建测试集
rfDf_train = rfDf.loc[rfDf['revol_util'].notnull()]# 选择这一列不是空的的数据
print(rfDf_train.shape )

rfDf_test = rfDf.loc[rfDf['revol_util'].isnull()] #选择这一列是空的情况的数据
print(rfDf_test.shape)

col = ['loan_amnt', 'int_rate', 'installment', 'revol_bal', 'collection_recovery_fee']    # 原始数据集中的无缺失数值特征 去预测数据中有缺失的特征
# 划分训练数据和标签(label)
X = rfDf_train[col]#  rfDf_train是一个dataframe 然后从中筛选所需要的列 
y = rfDf_train['revol_util']
# 训练过程
rf = RandomForestRegressor(n_estimators=100,n_jobs=-1)    # 这里重在理解过程,因此仅简单选取部分参数
rf.fit(X, y)
# 预测过程
pred = rf.predict(rfDf_test[col])


rfDf.loc[(rfDf['revol_util'].isnull()), 'revol_util'] = pred    # 填补缺失值
print("此时的revol_util特征统计指标:\n")
print(rfDf['revol_util'].describe()) 

 

 

 

标签:dti,法则,填充,revol,print,data,缺失,rfDf
来源: https://blog.csdn.net/qq_38735017/article/details/114936843