使用Pandas转换特性以适合您的模型。
文章目录
- 1、简介
- 2、数学变换
- 3、计数
- 4、构建和分解特征
- 5、分组转换
1、简介
一旦你确定了一组有潜力的特性,就可以开始开发它们了。在这节课中,你将学习如何在Pandas中进行一些常见的转换。如果你对Pandas不熟练, 请参考《从零开始的Pandas之旅_AI算法蒋同学的博客-CSDN博客》进行学习。
我们将在本课中使用四个数据集,它们具有各种特性类型:美国交通事故,1985年的汽车,混凝土配方,和客户终身价值。下面的隐藏单元格加载它们。
In [1]:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as snsplt.style.use("seaborn-whitegrid")
plt.rc("figure", autolayout=True)
plt.rc("axes",labelweight="bold",labelsize="large",titleweight="bold",titlesize=14,titlepad=10,
)accidents = pd.read_csv("../input/fe-course-data/accidents.csv")
autos = pd.read_csv("../input/fe-course-data/autos.csv")
concrete = pd.read_csv("../input/fe-course-data/concrete.csv")
customer = pd.read_csv("../input/fe-course-data/customer.csv")
发现新特性的提示
- 理解特性。如果有的话,参考你的数据集的数据文档。
- 研究问题领域以获取领域知识。例如,如果你的问题是预测房价,那么可以研究一下房地产。维基百科可以作为一个很好的起点,但是书籍和期刊文章通常会有最好的信息。
- 学习以前的工作。过去Kaggle比赛的解决方案写作是一个很好的资源。
- 使用数据可视化。可视化可以揭示特性分布的病态或者可以简化的复杂关系。在进行特性工程过程中,一定要可视化你的数据集。
2、数学变换
数值特性之间的关系通常通过数学公式来表达,这些公式你在领域研究中经常会遇到。在Pandas中,你可以将算术运算应用到列上,就像它们是普通的数字一样。
在汽车数据集中有描述汽车引擎的特性。研究得出了创建潜在有用新特性的各种公式。例如,"冲程比"是一个衡量引擎效率与性能的指标:
In [2]:
autos["stroke_ratio"] = autos.stroke / autos.boreautos[["stroke", "bore", "stroke_ratio"]].head()
Out[2]:
stroke | bore | stroke_ratio | |
---|---|---|---|
0 | 2.68 | 3.47 | 0.772334 |
1 | 2.68 | 3.47 | 0.772334 |
2 | 3.47 | 2.68 | 1.294776 |
3 | 3.40 | 3.19 | 1.065831 |
4 | 3.40 | 3.19 | 1.065831 |
组合越复杂,模型学习起来就越困难,比如这个引擎的"排量"公式,它是衡量引擎功率的指标:
In [3]:
autos["displacement"] = (np.pi * ((0.5 * autos.bore) ** 2) * autos.stroke * autos.num_of_cylinders
)
数据可视化可以建议转换,通常是通过幂或对数对特性进行"重塑"。例如,美国事故中的WindSpeed
分布是高度偏斜的。在这种情况下,对数对其进行标准化是有效的:
In [4]:
# 如果特性有0.0值,使用np.log1p (log(1+x))而不是np.log
accidents["LogWindSpeed"] = accidents.WindSpeed.apply(np.log1p)# 绘制比较图
fig, axs = plt.subplots(1, 2, figsize=(8, 4))
sns.kdeplot(accidents.WindSpeed, shade=True, ax=axs[0])
sns.kdeplot(accidents.LogWindSpeed, shade=True, ax=axs[1]);
/