机器学习与数据挖掘

kaggle实战学习1

2018-11-13  本文已影响2人  Rooooooooong

1 均值编码

111.png

1为什么均值编码有效?
如果数据的“类别基数”比较高,那么均值编码是最简单有效的一种。除此之外,编码方式还有LabelEncoder, OneHotEncoder。

特征类别比较多时三种编码方式的缺点比较:
(1)均值编码:可能导致过拟合和数据泄露问题,所以要配合正则化使用。
·用CV loop工具进行正则化(深度学习)
·Regularization Smoothing
·Regularization Expanding mean

(2)LabelEncoder:类别基数大使用LabelEncoder会导致编码噪声。
(3)OneHotEncoder:导致稀疏性问题,但是可以通过引起“其他”类别,解决稀疏问题。


2 擅用热力图

用电情况热力图
上图的横坐标表示一天的24时刻,纵坐标表示一周七天。通过观察热力图,不难发现周末的用电模式和深夜的一致。(这个特征帮助原文作者大幅提高了模型效果)

效仿作者做了如下如力图,怎么说呢?可以说label与时刻无关,至于日期的变化有关,而且还呈现某种周期规律。事实上确实如此~

import seaborn as sns
d1 = train[["日期","时刻","电场实际太阳辐射指数"]]
d2 = d1.pivot(index="日期",columns="时刻",values="电场实际太阳辐射指数")
fig = plt.figure(figsize=(15,10))
sns.heatmap(d2)
热力图.png

3 自编码器-表征学习

自编码器

自编码器可以直接从样本中学习,这意味着算法直接从训练集中捕捉最显著的特征,无需其他特征工程。

def plot_cluster(dimension1,dimension2):
    d1 = train[[dimension1,dimension2]]
    km = KMeans(n_clusters=5,random_state=14)
    km.fit(d1)
    pre_center = km.cluster_centers_
    y_pre = km.predict(d1)
    plt.scatter(x=d1[dimension1],y=d1[dimension2],c=y_pre)
    plt.scatter(x=pre_center[:,0],y=pre_center[:,1],c=[0,1,2,3,4],marker="o",edgecolors ="tomato")
    plt.xlabel(dimension2)
    plt.ylabel(dimension1)
  
fig = plt.figure(figsize=(15,8))
ax1 = plt.subplot(131)
plot_cluster("湿度","气压")
ax2 = plt.subplot(132)
plot_cluster("温度","湿度")
ax3 = plt.subplot(133)
plot_cluster("风速","湿度")
聚类效果比较图
这意味着,利用无监督学习自动从数据中学出5类样本,直接用上无监督学习打的标签作为一维特征。为什么这里k定为5?因为这个数据有个先验信息,就是有5个默认的类。

4 Binning

为什么Binning?
如果你要预测未来5年的股票,那么每天的股票波动对你来说不必全部考虑进模型,这样做反而会给模型带来更多的噪声。所以,可以使用Binning操作。


参考资料
Kaggle前1%参赛者经验:ML竞赛中常被忽视的特征工程技术
Binning

上一篇下一篇

猜你喜欢

热点阅读