一、原理及简介
弹性网络.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
网友评论