二手车特征工程

该博客探讨了二手车数据预处理中的特征工程方法,包括异常值处理、数据分桶、缺失值处理和特征构造。提到了使用箱线图、BOX-COX转换、标准化、归一化以及各种分桶策略。还讨论了如何处理缺失值,如用众数填充,并使用sklearn进行标签映射。此外,介绍了特征选择的过滤式、包裹式和嵌入式方法,以及降维技术如PCA。博客指出在某些列中检测到异常值,并展示了数据处理后的形状变化。
摘要由CSDN通过智能技术生成

常见的特征工程包括:

异常处理: 通过箱线图(或 3-Sigma)分析删除异常值; BOX-COX 转换(处理有偏分布); 长尾截断; 特征归一化/标准化: 标准化(转换为标准正态分布); 归一化(抓换到 [0,1] 区间); 针对幂律分布,可以采用公式:l o g ( 1 + x 1 + m e d i a n )

数据分桶: 等频分桶; 等距分桶; Best-KS 分桶(类似利用基尼指数进行二分类); 卡方分桶; 缺失值处理: 不处理(针对类似 XGBoost 等树模型); 删除(缺失数据太多); 插值补全,包括均值/中位数/众数/建模预测/多重插补/压缩感知补全/矩阵补全等; 分箱,缺失值一个箱; 特征构造: 构造统计量特征,报告计数、求和、比例、标准差等; 时间特征,包括相对时间和绝对时间,节假日,双休日等; 地理信息,包括分箱,分布编码等方法; 非线性变换,包括 log/ 平方/ 根号等; 特征组合,特征交叉; 仁者见仁,智者见智。 特征筛选 过滤式(filter):先对数据进行特征选择,然后在训练学习器,常见的方法有 Relief/方差选择发/相关系数法/卡方检验法/互信息法; 包裹式(wrapper):直接把最终将要使用的学习器的性能作为特征子集的评价准则,常见方法有 LVM(Las Vegas Wrapper) ; 嵌入式(embedding):结合过滤式和包裹式,学习器训练过程中自动进行了特征选择,常见的有 lasso 回归; 降维 PCA/ LDA/ ICA; 特征选择也是一种降维。

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
from operator import itemgetter

%matplotlib inline
Train_data = pd.read_csv('D:/迅雷下载/二手车数据/used_car_train_20200313.csv', sep=' ')
Test_data = pd.read_csv('D:/迅雷下载/二手车数据/used_car_test_20200313.csv', sep=' ')
print(Train_data.shape)
print(Test_data.shape)

(150000, 31)
(50000, 30)

Train_data.head()

在这里插入图片描述

Train_data.columns
Test_data.columns
Train_data['notRepairedDamage'].replace('-', np.nan, inplace=True)
#missing data
total = Train_data.isnull().sum().sort_values(ascending=False)
percent = (Train_data.isnull().sum()/Train_data.isnull().count()).sort_values(ascending=False)
missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
missing_data.head()

在这里插入图片描述
对缺失值进行处理,填充时一般考虑中位数,均值,众数等,在这里用众数填充

Train_data['fuelType'] = Train_data['fuelType'].fillna(Train_data['fuelType'].mode()[0])
Train_data['notRepairedDamage'] = Train_data['notRepairedDamage'].fillna(Train_data['notRepairedDamage'].mode()[0])
Train_data['gearbox'] = Train_data['gearbox'].fillna(Train_data['gearbox'].mode()[0])
Train_data['bodyType'] = Train_data['bodyType'].fillna(Train_data['bodyType'].mode()[0])
Train_data['model'] = Train_data['model'].fillna(Train_data['model'].mode()[0])

使用sklearn进行标签映射

from sklearn.preprocessing import LabelEncoder
cols = ('SaleID', 'name', 'regDate', 'model', 'brand',
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值