【机器学习竞赛+笔记干货】工业蒸汽量预测:特征优化篇(六)


相关阅读:

比赛地址:工业蒸汽量预测_学习赛_天池大赛

6 特征优化

6.1 特征优化的方法

6.1.1 合成特征

从一个或多个输入特征衍生而来的特征。
通过标准化或缩放单独创建的特征不属于合成特征。
合成特征包括:

  • 将一个特征与其本身或其他特征相乘(称为特征组合)
  • 两个特征相处
  • 对连续特征进行分桶(分箱),以分为多个区间分箱

6.1.2 特征的简单变换

1. 数值特征的变换和组合
  • 单独特征列乘以一个常数或者加、减一个常熟,对生成新的、有用的特征毫无用处,只能作为对已有特征的处理。
  • 任何针对单独特征列的单独变换(如对数),都不适用于决策树类算法。对于决策树, X X X X 3 X^3 X3 X 3 X^3 X3之间没有差异, ∣ X ∣ \vert{X}\vert X X 2 X^2 X2 X 4 X^4 X4之间也没有差异,除非有舍入误差。
  • 特征的线性组合(linear combination)仅适用于决策树以及基于决策树的集成学习算法,因为树模型不擅长捕获不同特征之间的相关性。而SVM、线性回归、神经网络等模型自身可以线性组合。
  • 常用的数值特征的变换和组合:
    (1)多项式特征(polynomial feature)
    (2)比例特征(ratio feature): X 1 / X 2 X_1/X_2 X1/X2
    (3)绝对值(absolute value)
    (4) m a x ( X 1 , X 2 ) max(X_1,X_2) max(X1,X2) m i n ( X 1 , X 2 ) min(X_1,X_2) min(X1,X2) X 1 o r X 2 X_1 or X_2 X1orX2
2. 类别特征与数值特征的组合

用N1和N2表示数值特征,用C1和C2表示类别特征(C2可以说离散化了的N1),利用Pandas的groupby操作可以创造:
(1)中位数: m e d i a n ( N 1 ) _ b y ( C 1 ) median(N1)\_by(C1) median(N1)_by(C1)
(2)算术平均数: m e a n ( N 1 ) _ b y ( C 1 ) mean(N1)\_by(C1) mean(N1)_by(C1)
(3)众数: m o d e ( N 1 ) _ b y ( C 1 ) mode(N1)\_by(C1) mode(N1)_by(C1)
(4)最大值: m a x ( N 1 ) _ b y ( C 1 ) max(N1)\_by(C1) max(N1)_by(C1)
(5)最小值: m i n ( N 1 ) _ b y ( C 1 ) min(N1)\_by(C1) min(N1)_by(C1)
(6)标准差: s t d ( N 1 ) _ b y ( C 1 ) std(N1)\_by(C1) std(N1)_by(C1)
(7)方差: v a r ( N 1 ) _ b y ( C 1 ) var(N1)\_by(C1) var(N1)_by(C1)
(8)频数: f r e q ( C 2 ) _ b y ( C 1 ) freq(C2)\_by(C1) freq(C2)_by(C1)
说明: f r e q ( C 1 ) freq(C1) freq(C1)不需要进行groupby操作也有意义。
还可以将这种方法和线性组合等基础特征工程方法结合(仅用于决策树):
(1) N 1 − m e d i a n ( N 1 ) _ b y ( C 1 ) N1-median(N1)\_by(C1) N1median(N1)_by(C1)
(2) N 1 − m e a n ( N 1 ) _ b y ( C 1 ) N1-mean(N1)\_by(C1) N1mean(N1)_by(C1)

6.1.3 用决策树创造新的特征

在决策树系列算法中,由于每一个样本都会被映射到决策树的一片叶子上,因此我们可以把样本经过每一棵决策树映射后的index(自然数)或one-hot-vector(哑编码得到的稀疏矢量)作为一项新的特征加入模型中。
可采用sklearn和xgboost中的apply()方法和decision_path()方法。

6.1.4 特征组合

将单独的特征进行组合(相乘或求笛卡尔积)而形成的合成特征,其有助于表示非线性关系。

1. 对非线性规律进行编码

由于通过采用随机梯度下降法可以有效地训练线性模型,因此在使用拓展的线性模型时,辅以特征组合一直都是训练大规模数据集的有效方法。
不同种类的特征组合,例如:
(1) [ A × B ] [A\times{B}] [A×B]:将两个特征的值相乘
(1) [ A × B × C × D × E ] [A\times{B}\times{C}\times{D}\times{E}] [A×B×C×D×E]:将五个特征的值相乘
(1) [ A × A ] [A\times{A}] [A×A]:对单个特征的值求平方形成的特征组合

2. 组合独热矢量

我们将独热特征矢量的特征组合视为逻辑连接。
对大规模数据集使用特征组合是学习高度复杂模型的一种有效策略。

3. 使用分桶特征列训练模型

分桶特征:以一定方式将连续型数值划分到不同的桶(箱)中,可以理解为是对连续型特征的一种离散化处理方式。
要为分桶特征定义特征列,则可以使用bucketized_column(而非numeric_column),该列将数字列作为输入并使用boundaries参数中指定的分桶边界,将其转换为分桶特征。

6.2 赛题特征优化

6.2.1 导入数据

6.2.2 特侦构造方法

epsilon=1e-5
func_dict={
		   'add':lambda x,y:x+y,
		   'mins':lambda x,y:x-y,
		   'div':lambda x,y:x/(y+epsilon),
		   'multi':lambda x,y:x*y,
}

6.2.3 特征构造函数

def auto_feature_make(train_data,test_data,func_dict,col_list):
	train_data,test_data=train_data.copy(),test_data.copy()
	for col_i in col_list:
		for func_name,func in func_dict.items():
			func_features=func(data[col_i],data[col_j])
			col_func_features='-'.join([col_i,func_name,col_j])
			data[col_func_features]=func_features
	return train_data,test_data

6.2.4 特征降维处理

train_data2,test_data2=auto_features_make(train_data,test_data,func_dict,col_list=test_data,columns)
from sklearn.decomposition import PCA

pca=PCA(n_components=500)
train_data2_pca=pca.fit_transform(train_data2.iloc[:,0:-1])
test_data2_pca=pca.fit_transform(test_data2)
train_data2_pca=pd.DataFrame(train_data2_pca)
test_data2_pca=pd.DataFrame(test_data2_pca)
train_data2_pca['target']=train_data2['target']
X_train2=train_data2[test_data2.columns].values
y_train=train_data2['target']

6.2.5 模型训练与评估

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还重名就过分了啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值