(八)弹性网络---ElasticNet

一、原理及简介

弹性网络.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)