kaggle实战学习1

作者: Rooooooooong | 来源:发表于2018-11-13 19:47 被阅读2次

    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

    相关文章

      网友评论

        本文标题:kaggle实战学习1

        本文链接:https://www.haomeiwen.com/subject/opdlfqtx.html