美文网首页
(八)弹性网络---ElasticNet

(八)弹性网络---ElasticNet

作者: 羽天驿 | 来源:发表于2020-04-07 08:36 被阅读0次

    一、原理及简介

    弹性网络.png

    二、什么是L2正则化和L1正则化

    原理及作用:https://blog.csdn.net/liuweiyuxiang/article/details/99984288

    三、弹性网络预测天池项目代码

    导包

    import numpy as np
    
    # cross validation:交叉验证
    # 传递参数的时候,一次可以传递多个,挑选最合适的
    from sklearn.linear_model import ElasticNet,ElasticNetCV
    
    # train_test_split 数据一分为二
    from sklearn.model_selection import train_test_split
    
    # metrics 评估
    # mean_squared_error均方误差
    from sklearn.metrics import mean_squared_error
    
    # pandas非常重要,机器学习,深度学习中,都要加载,处理数据
    import pandas as pd
    

    加载数据

    # 脱敏数据
    train = pd.read_csv('./zhengqi_train.txt',sep = '\t')
    # test测试数据,没有target
    # 模型算出来,计算
    # 标准答案,阿里巴巴服务器
    # 使用模型计算结果,提交到阿里巴巴,评分
    test = pd.read_table('./zhengqi_test.txt')
    
    # 通过DataFrame切片的方式,获取了数据X和目标值y
    # 数据,特征,38个特征,工场,传感器采集
    X = train.iloc[:,:-1]
    # y是目标值
    y = train['target']
    

    训练数据,划分成两份,一份是训练,另一份用于验证,评估,模型好坏

    # 算法评估,将数据分成两份,一份训练,另一份,验证
    # validatioin 验证
    # random_state 随机数的种子,固定,每次生成的数据一样的
    X_train,X_validation,y_train,y_validation = train_test_split(X,y,test_size = 0.2,random_state = 1024)
    y_validation[:5]
    
    1073    0.176
    168     0.411
    1389   -0.642
    436     0.584
    1279    1.067
    Name: target, dtype: float64
    
    # 算法评估,将数据分成两份,一份训练,另一份,验证
    # validatioin 验证
    # random_state 随机数的种子
    X_train,X_validation,y_train,y_validation = train_test_split(X,y,test_size = 0.2,random_state = 1024)
    y_validation[:5]
    
    1073    0.176
    168     0.411
    1389   -0.642
    436     0.584
    1279    1.067
    Name: target, dtype: float64
    

    使用弹性网络ElasticNet训练和学习

    model = ElasticNet(alpha = 0.3,l1_ratio=0.2)
    model.fit(X_train,y_train)
    y_ = model.predict(X_validation)
    print('弹性网络mse:',mean_squared_error(y_validation,y_))
    
    弹性网络mse: 0.13775398067490824
    
    # alphas 一次给了多个alpha,算法从其中删选最好的,得分最高的,mse(误差,越小越好)
    # ElasticNet模型就是删选alpha 
    # l1_ratio这个参数需要一个个尝试
    model = ElasticNetCV(l1_ratio=0.09,alphas=[0.1,0.63,0.71,0.72,0.62])
    model.fit(X,y)#训练所有的数据,希望算法找到更多的规律
    y_ = model.predict(X_validation)
    print('弹性网络mse:',mean_squared_error(y_validation,y_))
    result = model.predict(test)
    pd.Series(result).to_csv('./elasticnet.txt',index = False,header = False)
    print(model.alpha_)
    
    弹性网络mse: 0.11087170958128821
    0.1
    
    
    

    相关文章

      网友评论

          本文标题:(八)弹性网络---ElasticNet

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