机器学习基于缺失值的填充法则
作者:互联网
代码数据网址: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