二手车价格预测--特征工程task3

3.1 特征工程目标

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。

3.2 内容介绍

常见的特征工程包括:
1.特征理解
包括数据结构;定量和定性数据;数据等级等
2.数据增强/数据清洗
+ 识别缺失值
+ 处理缺失值
+ 标准化和归一化
3.特征构建
+ 检查数据集
+ 填充分类特征
+ 编码分类变量
+ 扩展数值特征
4.特征选择
+ 基于模型的选择
+ 基于统计的选择
5.特征转换
+ 维度缩减:特征转换、特征选择与特征构建
+ 主成分分析-PCA
+ 线性判别分析-LDA
6.特征学习
+ 数据的参数假设
+ 受限玻尔兹曼机
+ 伯努利受限玻尔兹曼机
+ RBM
+ Word Embedding
7. 评估特征工程的步骤:
- 在应用任何特征工程之前,得到机器学习模型的基准性能;
- 应用一种或多种特征工程;
- 对于每种特征工程,获取一个性能指标,并与基准性能进行对比;
- 如果性能的增量(变化)大于某个阈值(一般由我们定义),则认为这种特征工程是有益
的,并在机器学习流水线上应用;
- 性能的改变一般以百分比计算(如果基准性能从 40%的准确率提升到 76%的准确率,那
么改变是 90%)。

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

path = './datalab/231784/'
Train_data = pd.read_csv('./datalab/231784/used_car_train_20200313.csv', sep=' ')
Test_data = pd.read_csv('./datalab/231784/used_car_testA_20200313.csv', sep=' ')
print(Train_data.shape)
print(Test_data.shape)
Train_data.head()
Train_data.columns
def outliers_proc(data, col_name, scale=3):
    """
    用于清洗异常值,默认用 box_plot(scale=3)进行清洗
    :param data: 接收 pandas 数据格式
    :param col_name: pandas 列名
    :param scale: 尺度
    :return:
    """

    def box_plot_outliers(data_ser, box_scale):
        """
        利用箱线图去除异常值
        :param data_ser: 接收 pandas.Series 数据格式
        :param box_scale: 箱线图尺度,
        :return:
        """
        iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))
        val_low = data_ser.quantile(0.25) - iqr
        val_up = data_ser.quantile(0.75) + iqr
        rule_low = (data_ser < val_low)
        rule_up = (data_ser > val_up)
        return (rule_low, rule_up), (val_low, val_up)

    data_n = data.copy()
    data_series = data_n[col_name]
    rule, value = box_plot_outliers(data_series, box_scale=scale)
    index = np.arange(data_series.shape[0])[rule[0] | rule[1]]
    print("Delete number is: {}".format(len(index)))
    data_n = data_n.drop(index)
    data_n.reset_index(drop=True, inplace=True)
    print("Now column number is: {}".format(data_n.shape[0]))
    index_low = np.arange(data_series.shape[0])[rule[0]]
    outliers = data_series.iloc[index_low]
    print("Description of data less than the lower bound is:")
    print(pd.Series(outliers).describe())
    index_up = np.arange(data_series.shape[0])[rule[1]]
    outliers = data_series.iloc[index_up]
    print("Description of data larger than the upper bound is:")
    print(pd.Series(outliers).describe())
    
    fig, ax = plt.subplots(1, 2, figsize=(10, 7))
    sns.boxplot(y=data[col_name], data=data, palette="Set1", ax=ax[0])
    sns.boxplot(y=data_n[col_name], data=data_n, palette="Set1", ax=ax[1])
    return data_n
from sklearn import preprocessing
min_max_scaler=preprocessing.MinMaxScaler()

#具体minmax的过程
data['power']=np.log(data['power']+1)
data['power']=((data['power']-np.min(data['power']))/np.max(data['power']-np.min(data['power'])))
data['power'].plot.hist()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值