前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >采用Ridge(岭回归)重新对三种不同销售方式所影响的销售额展开分析

采用Ridge(岭回归)重新对三种不同销售方式所影响的销售额展开分析

作者头像
用户6719124
发布2019-11-17 23:43:11
6520
发布2019-11-17 23:43:11
举报

上述例子中我们使用了最简单的线性回归进行了机器学习分析,本文将介绍了一种新的回归方式:岭回归。

岭回归是一种专门用于共线性数据分析的有偏估计回归方法,其本质是改良型的最小二乘估计法,但它放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价使得回归系数更可靠,且对于病态数据的拟合要强于最小二乘法。

Ridge原理如下

下面采用ridge函数对上次代码进行重写

首先引入工具包

代码语言:javascript
复制
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV

开始数据读取

代码语言:javascript
复制
data = pd.read_csv('Advertising.csv')    # TV、Radio、Newspaper、Sales
x = data[['TV', 'Radio', 'Newspaper']]
y = data['Sales']

构建模型

代码语言:javascript
复制
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.8)
# 同样设定80%的训练样本
# model = Lasso()
model = Ridge()
# 设定Ridge模型
alpha_can = np.logspace(-3, 2, 10)
# Ridge函数需要一个参数值,这里从10的-3次方到10的2次方取十个候选值
np.set_printoptions(suppress=True)
print ('alpha_can = ', alpha_can)

输出alpha_can的值为

代码语言:javascript
复制
alpha_can =  [  0.001        0.00359381   0.0129155    0.04641589   0.16681005

继续构建模型

代码语言:javascript
复制
Ridge_model = GridSearchCV(model, param_grid={'alpha': alpha_can}, cv=5)
# 挨个搜索alpha_can
Ridge_model.fit(x_train, y_train)
# 数据喂给函数
print ('超参数:\n', Ridge_model.best_params_)
# 输出最佳参数

输出为

代码语言:javascript
复制
{'alpha': 7.742636826811277}

余下的模型测试与绘图部分与之前类似,不再赘述

代码语言:javascript
复制
order = y_test.argsort(axis=0)
y_test = y_test.values[order]
x_test = x_test.values[order, :]
y_hat = Ridge_model.predict(x_test)
mse = np.average((y_hat - np.array(y_test)) ** 2) 
rmse = np.sqrt(mse) 

t = np.arange(len(x_test))
mpl.rcParams['font.sans-serif'] = [u'simHei']
mpl.rcParams['axes.unicode_minus'] = False
plt.figure(facecolor='w')
plt.plot(t, y_test, 'r-', linewidth=2, label=u'真实数据')
plt.plot(t, y_hat, 'g-', linewidth=2, label=u'预测数据')
plt.title(u'线性回归预测销量', fontsize=18)
plt.legend(loc='upper left')
plt.grid(b=True, ls=':')
plt.show()

图片为

这里所得到的mse和rmse的数值分别为:1.992745和1.411646。这个结果略差于上期的线性回归结果,但若进行alpha_can的调参工作和优化数据(舍去相关性差的数据)或许会得到更好的结果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档