机器学习接口代码之 Ridge、Lasso、Elasitc Net

目录

Ridge Regression (岭回归)

Lasso Regression

Elasitc Net(弹性网络)

案例:葡萄酒质量预测


官网地址https://scikit-learn.org/stable/modules/linear_model.html

Ridge Regression (岭回归)

API

class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver=’auto’, random_state=None)
岭回归是一种正则化方法,通过在损失函数中加入L2范数惩罚系项,来控制线性模型的复杂程度,从而使模型更加稳健。参数alpha:{float,array-like},shape(n_targets)正则化参数α项,其值越大正则化项越大。其必须是正浮点数。 正则化改善了问题的条件并减少了估计的方差。Alpha对应于其他线性模型(如Logistic回归或LinearSVC)中的C^-1。 如果传递数组,则假定惩罚被特定于目标。 因此,它们必须在数量上对应。fit_intercept:boolean是否计算此模型的截距,即b值。如果为False,则不计算b值(模型会假设你的数据已经中心化)copy_X:boolean,可选,默认为True如果为True,将复制X; 否则,它可能被覆盖。max_iter:int,可选共轭梯度求解器的最大迭代次数。如果为None,则为默认值(不同silver的默认值不同) 对于'sparse_cg'和'lsqr'求解器,默认值由scipy.sparse.linalg确定。 对于'sag'求解器,默认值为1000。normalize:boolean,可选,默认为False如果为真,则回归X将在回归之前被归一化。 当fit_intercept设置为False时,将忽略此参数。 当回归量归一化时,注意到这使得超参数学习更加鲁棒,并且几乎不依赖于样本的数量。 相同的属性对标准化数据无效。 然而,如果你想标准化,请在调用normalize = False训练估计器之前,使用preprocessing.StandardScaler处理数据。solver:{'auto','svd','cholesky','lsqr','sparse_cg','sag'}指定求解最优化问题的算法:'auto':根据数据类型自动选择求解器。'svd':使用X的奇异值分解来计算Ridge系数。对于奇异矩阵比'cholesky'更稳定。'cholesky':使用标准的scipy.linalg.solve函数来获得闭合形式的解。'sparse_cg':使用在scipy.sparse.linalg.cg中找到的共轭梯度求解器。作为迭代算法,这个求解器比大规模数据(设置tol和max_iter的可能性)的“cholesky”更合适。'lsqr':使用专用的正则化最小二乘常数scipy.sparse.linalg.lsqr。它是最快的,但可能不是在旧的scipy版本可用。它还使用迭代过程。'sag':使用随机平均梯度下降。它也使用迭代过程,并且当n_samples和n_feature都很大时,通常比其他求解器更快。注意,“sag”快速收敛仅在具有近似相同尺度的特征上被保证。您可以使用sklearn.preprocessing的缩放器预处理数据。所有最后四个求解器支持密集和稀疏数据。但是,当fit_intercept为True时,只有'sag'支持稀疏输入。新版本0.17支持:随机平均梯度下降解算器。tol:float。解的精度,制定判断迭代收敛与否的阈值。random_state:int seed,RandomState实例或None(默认)仅用于'sag'求解器。如果为整数,则它指定了随机数生成器的种子。如果为RandomState实例,则指定了随机数生成器。如果为None,则使用默认的随机数生成器。 新版本0.17:random_state支持随机平均渐变。属性coef_:array,shape(n_features,)或(n_targets,n_features)权重向量。intercept_:float | array,shape =(n_targets,)决策函数的独立项,即截距b值。 如果fit_intercept = False,则设置为0.0。n_iter_:array或None,shape(n_targets,)每个目标的实际迭代次数。 仅适用于sag和lsqr求解器。 其他求解器将返回None。在版本0.17中出现。

方法

fit(X,y [,sample_weight]):训练模型。

get_params([deep]):获取此估计器的参数。

predict(X):使用线性模型进行预测,返回预测值。

score(X,y [,sample_weight]):返回预测性能的得分,不大于1,越大效果越好。

set_params(** params)设置此估计器的参数。

Lasso Regression

API

class sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic'属性:alpha:float, optional。正则项参数。常数。默认值1.0。alpha=0时转化为最小二乘估计,由线性回归模型求解。使用Lasso模型时,通常令alpha≠0。fit_intercept:boolean, optional, default True。是否计算截距。如果为False,对数据进行去中心化处理。normalize:boolean, optional, default False。当fit_intercept=False时,该参数忽略。如果为normalize=True,使用回归模型之前先对回归数据X进行去均值和除以l2范数的处理。如果要对数据X进行标准化,令normalize=False,并在调用fit方法之前,使用sklearn.preprocessing.StandardScaler进行标准化。precompute:True | False | array-like, default=False是否使用事先计算好的Gram矩阵来加速模型计算。如果precompute='auto',让程序自动决定。Gram矩阵可以作为参数被传递。对于稀疏数据,通常令precompute=True,保留稀疏性。copy_X:boolean, optional, default True如果copy_X=True,复制X;如果copy_X=False,覆盖上次运行的X。max_iter:int, optional最大迭代次数。tol:float, optional优化容忍度:如果更新大于tol,继续优化,直到小于tol。warm_start:bool, optional如果warm_start=True,使用上次的解作为初始化;如果warm_start=False,清除之前的解。positive:bool, optional如果positive=True,强制将系数设为正数。random_state:int, RandomState instance or None, optional, default None伪随机数发生器种子,随机选择特征来更新模型。如果为int,random_state即为随机数发生器使用的种子;如果为RandomState实例,random_state即为随机数发生器;如果为None,随机数发生器为np.random使用的随机数发生器实例。该参数仅当selection=‘random’时使用。selection:str, default ‘cyclic’如果为‘random’,每次迭代都会更新随机系数,而不是按顺序遍历每个特征。该参数值可以使得算法更快收敛,尤其当tol>1e-4时。坐标轴下降法的下降形式属性(Attributes)coef_:array, shape (n_features,) | (n_targets, n_features)系数向量。目标函数中的w。sparse_coef_:scipy.sparse matrix, shape (n_features, 1) | (n_targets, n_features)求解的coef_的稀疏表示。intercept_:float | array, shape (n_targets,)决策函数的依赖项。n_iter_:int | array-like, shape (n_targets,)坐标下降法求解达到容忍度时的迭代次数。

方法

fit(X,y,sample_weight=None):X:numpy array或稀疏矩阵,shape(n_samples,n_features)。训练数据y:numpy array,shape(n_samples,n_targets),对应的目标值sample_weight:numpy array,shape(n_samples),每个样本单独的权值。返回一个训练好的线性模型。get_params(deep=True):获取模型的参数,返回一个string到任意可能值的映射predict(X):对给定的数据X进行预测X:arrat-like对象或稀疏矩阵。shape(n_samples,n_features)。待测样本返回:array,shape(n_samples,),对输入的预测结果score(X,y,sample_weight=None):计算对于X,y的R^2值。R^2=1-u/v. u= ((y_true - y_pred) ** 2).sum() ,v=((y_true - y_true.mean()) ** 2).sum()X:测试样例,array-like对象,shape(n_samples,n_features)y:X的真实目标值,array-like对象,shape(n_samples,)或者(n_samples, n_outputs)sample_weight:array-like对象,shape(n_samples,),样本的独立权值。返回对应的R^2值,floatset_params(**params):设置参数。

Elasitc Net(弹性网络)

class sklearn.linear_model.ElasticNet(alpha=1.0, l1_ratio=0.5, fit_intercept=True, normalize=False, precompute=False, max_iter=1000, copy_X=True, tol=0.0001, warm_start=False, positive=False, random_state=None, selection=’cyclic’)参数:alpha : alpha:正则化项中alpha值。l1_ratio:ρ值,ElasticNet混合参数,其中0 <= l1_ratio <= 1。对于l1_ratio = 0,惩罚为L2范数。 对于l1_ratio = 1,为L1范数。 对于0 <l1_ratio<1,惩罚是L1和L2的组合。fit_intercept:一个布尔值,制定是否需要b值。max_iter:一个整数,指定最大迭代数。normalize:一个布尔值。如果为True,那么训练样本会在回归之前会被归一化。copy_X:一个布尔值。如果为True,会复制X,否则会覆盖X。precompute:一个布尔值或者一个序列。它决定是否提前计算Gram矩阵来加速计算。Gram也可以传递参数, 对于稀疏输入,此选项始终为“True”以保留稀疏性。tol:一个浮点数,指定判断迭代收敛与否的一个阈值。warm_start:一个布尔值。如果为True,那么使用前一次训练结果继续训练,否则从头开始训练。positive:一个布尔值。如果为True,那么强制要求权重向量的分量都为整数。selection:一个字符串,可以选择‘cyclic’或者‘random’。它指定了当每轮迭代的时候,选择权重向量的哪个分量来更新。‘ramdom’:更新的时候,随机选择权重向量的一个分量来更新。‘cyclic’:更新的时候,从前向后一次选择权重向量的一个分量来更新。random_state:一个整数或者一个RandomState实例,或者None。 如果为整数,则它指定了随机数生成器的种子。如果为RandomState实例,则指定了随机数生成器。如果为None,则使用默认的随机数生成器。 属性:coef_:权重向量。intercept:b值。n_iter_:实际迭代次数。

方法

fix(X,y[,sample_weight]):训练模型。
predict(X):用模型进行预测,返回预测值。
score(X,y[,sample_weight]):返回预测性能的得分,不大于1,越大效果越好。
get_params([deep]):获取此估计器的参数。
set_params(** params):设置此估计器的参数。

案例:葡萄酒质量预测

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
import warnings
import sklearn
from sklearn.linear_model import LinearRegression, LassoCV, RidgeCV, ElasticNetCV
from sklearn.preprocessing import PolynomialFeatures  # 数据预处理,标准化
from sklearn.pipeline import Pipeline
from sklearn.linear_model.coordinate_descent import ConvergenceWarning# 设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif'] = [u'simHei']
mpl.rcParams['axes.unicode_minus'] = False
# 拦截异常,不显示异常
warnings.filterwarnings(action='ignore', category=ConvergenceWarning)# 创建模拟数据
np.random.seed(100)
np.set_printoptions(linewidth=1000, suppress=True)  # 显示方式设置,每行的字符数用于插入换行符,是否使用科学计数法
N = 10
x = np.linspace(0, 6, N) + np.random.randn(N)
y = 1.8 * x ** 3 + x ** 2 - 14 * x - 7 + np.random.randn(N)
# 将其设置为矩阵
x.shape = -1, 1
y.shape = -1, 1# RidgeCV和Ridge的区别是:前者可以进行交叉验证
models = [Pipeline([('Poly', PolynomialFeatures(include_bias=False)),('Linear', LinearRegression(fit_intercept=False))]),Pipeline([('Poly', PolynomialFeatures(include_bias=False)),# alpha给定的是Ridge算法中,L2正则项的权重值,也就是ppt中的兰姆达# alphas是给定CV交叉验证过程中,Ridge算法的alpha参数值的取值的范围('Linear', RidgeCV(alphas=np.logspace(-3, 2, 50), fit_intercept=False))]),Pipeline([('Poly', PolynomialFeatures(include_bias=False)),('Linear', LassoCV(alphas=np.logspace(0, 1, 10), fit_intercept=False))]),Pipeline([('Poly', PolynomialFeatures(include_bias=False)),# la_ratio:给定EN算法中L1正则项在整个惩罚项中的比例,这里给定的是一个列表;# 表示的是在CV交叉验证的过程中,EN算法L1正则项的权重比例的可选值的范围('Linear', ElasticNetCV(alphas=np.logspace(0, 1, 10), l1_ratio=[.1, .5, .7, .9, .95, 1], fit_intercept=False))])
]# 线性模型过拟合图形识别
plt.figure(facecolor='w')
degree = np.arange(1, N, 4)  # 阶
dm = degree.size
colors = []  # 颜色
for c in np.linspace(16711680, 255, dm):colors.append('#%06x' % int(c))model = models[0]
for i, d in enumerate(degree):plt.subplot(int(np.ceil(dm / 2.0)), 2, i + 1)plt.plot(x, y, 'ro', ms=10, zorder=N)# 设置阶数model.set_params(Poly__degree=d)# 模型训练model.fit(x, y.ravel())lin = model.get_params('Linear')['Linear']output = u'%d阶,系数为:' % (d)# 判断lin对象中是否有对应的属性if hasattr(lin, 'alpha_'):idx = output.find(u'系数')output = output[:idx] + (u'alpha=%.6f, ' % lin.alpha_) + output[idx:]if hasattr(lin, 'l1_ratio_'):idx = output.find(u'系数')output = output[:idx] + (u'l1_ratio=%.6f, ' % lin.l1_ratio_) + output[idx:]print(output, lin.coef_.ravel())x_hat = np.linspace(x.min(), x.max(), num=100)  ## 产生模拟数据x_hat.shape = -1, 1y_hat = model.predict(x_hat)s = model.score(x, y)z = N - 1 if (d == 2) else 0label = u'%d阶, 正确率=%.3f' % (d, s)plt.plot(x_hat, y_hat, color=colors[i], lw=2, alpha=0.75, label=label, zorder=z)plt.legend(loc='upper left')plt.grid(True)plt.xlabel('X', fontsize=16)plt.ylabel('Y', fontsize=16)plt.tight_layout(1, rect=(0, 0, 1, 0.95))
plt.suptitle(u'线性回归过拟合显示', fontsize=22)
plt.show()## 线性回归、Lasso回归、Ridge回归、ElasticNet比较
plt.figure(facecolor='w')
degree = np.arange(1, N, 2)  # 阶, 多项式扩展允许给定的阶数
dm = degree.size
colors = []  # 颜色
for c in np.linspace(16711680, 255, dm):colors.append('#%06x' % int(c))
titles = [u'线性回归', u'Ridge回归', u'Lasso回归', u'ElasticNet']for t in range(4):model = models[t]  # 选择了模型--具体的pipeline(线性、Lasso、Ridge、EN)plt.subplot(2, 2, t + 1)  # 选择具体的子图plt.plot(x, y, 'ro', ms=10, zorder=N)  # 在子图中画原始数据点; zorder:图像显示在第几层# 遍历不同的多项式的阶,看不同阶的情况下,模型的效果for i, d in enumerate(degree):# 设置阶数(多项式)model.set_params(Poly__degree=d)# 模型训练model.fit(x, y.ravel())# 获取得到具体的算法模型# model.get_params()方法返回的其实是一个dict对象,后面的Linear其实是dict对应的key# 也是我们在定义Pipeline的时候给定的一个名称值lin = model.get_params()['Linear']# 打印数据output = u'%s:%d阶,系数为:' % (titles[t], d)# 判断lin对象中是否有对应的属性if hasattr(lin, 'alpha_'):  # 判断lin这个模型中是否有alpha_这个属性idx = output.find(u'系数')output = output[:idx] + (u'alpha=%.6f, ' % lin.alpha_) + output[idx:]if hasattr(lin, 'l1_ratio_'):  # 判断lin这个模型中是否有l1_ratio_这个属性idx = output.find(u'系数')output = output[:idx] + (u'l1_ratio=%.6f, ' % lin.l1_ratio_) + output[idx:]# line.coef_:获取线性模型的参数列表,也就是我们ppt中的theta值,ravel()将结果转换为1维数据print(output, lin.coef_.ravel())# 产生模拟数据x_hat = np.linspace(x.min(), x.max(), num=100)  ## 产生模拟数据x_hat.shape = -1, 1# 数据预测y_hat = model.predict(x_hat)# 计算准确率s = model.score(x, y)# 当d等于5的时候,设置为N-1层,其它设置0层;将d=5的这条线凸显出来z = N + 1 if (d == 5) else 0label = u'%d阶, 正确率=%.3f' % (d, s)plt.plot(x_hat, y_hat, color=colors[i], lw=2, alpha=0.75, label=label, zorder=z)plt.legend(loc='upper left')plt.grid(True)plt.title(titles[t])plt.xlabel('X', fontsize=16)plt.ylabel('Y', fontsize=16)
plt.tight_layout(1, rect=(0, 0, 1, 0.95))
plt.suptitle(u'各种不同线性回归过拟合显示', fontsize=22)
plt.show()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公司技术管理角度看C++游戏程序员发展

公司技术管理角度看C游戏程序员发展 H3D 这是我多年来招聘培训游戏程序员的一点想法。一直想汇总一下。主要目的是为了更好的对公司新进C程序员进行培训&#xff0c;并且建立起游戏程序员培训&#xff0c;发展&#xff0c;成才&#xff0c;成为核心骨干&#xff0c;管理层&am…

android生命周期_Android开发 View的生命周期结合代码详解

咱们以TextView控件为例&#xff1a;/*** Created by SunshineBoy on 2020/9/23.*/public class TestTextView extends android.support.v7.widget.AppCompatTextView {public TestTextView(Context context) {super(context);Log.e("TestTextView","TestTextVi…

salt

安装服务端和客户端服务端(marster)yum install salt-master -y客户端(slave)yum install salt-minion -ymarster192.168.11.17/etc/init.d/salt-master start配置文件: vi /etc/salt/mastercat master|egrep -v ;|#|^$auto_accept:True #设置自动接受日志: /var/log/salt/mas…

python | 查看pip支持的文件名和版本

python | 查看pip支持的文件名和版本win下查询大哥推荐已经解决win下查询 import pip._internalprint(pip._internal.pep425tags.get_supported())64位的需要在pip后面加个_internal 如果不行试试下边的 大哥推荐已经解决 import wheel.pep425tags as w print(w.get_suppor…

机器学习算法之支持向量机 SVM

距离知识 点到直线/平面的距离公式&#xff1a; 1、假定点p(x0,y0)&#xff0c;平面方程为f(x,y)AxByC&#xff0c;那么点p到平面f(x)的距离为&#xff1a; 2、从三维空间扩展到多维空间中&#xff0c;如果存在一个超平面f(X)θXb; 那么某一个点X0到这个超平面的距离为: 参考…

set IDENTITY_INSERT on 和 off 的设置

批量插入记录时,对有标识列的字段要设置 set IDENTITY_INSERT 表名 on,然后再执行插入记录操作;插入完毕后恢复为 off 设置 转载于:https://www.cnblogs.com/TTonly/p/10349931.html

VMware Horizon虚拟桌面工具箱2.0-审计,远程协助,控制台,电源

各位朋友,大家好,VMware Horizon 虚拟桌面工具箱2.0版本,已经面世啦!在2.0 版本中我们添加了vSphere虚拟机控制台访问、开机策略和图形化安装这三个新功能&#xff0c;并改进了部分老的功能。老版本即1.5版本的相关知识可以参考我的博文VMware Horizon虚拟桌面工具箱之审计与远…

python词云改颜色_一种用Python生成词云

一种用Python生成词云 我们在阅读一篇很长的文章时&#xff0c;总先看看文章的关键词来获知文章的大概内容。今天我们就来制作一个词云程序&#xff0c;将文章中出现次数较多的词语提取出来&#xff0c;生成一张词云图。词云图的生成原理&#xff1a; 程序会将这篇文章中的所有…

什么是程序员正确的职场心态?

&#xff08;本文为《程序员羊皮卷》最新公布的第七章的一部分&#xff0c;下载地址&#xff1a;http://download.csdn.net/source/1868065 或者http://zhaopinpro.com/wordpress/wp-content/uploads/2009/12/《程序员羊皮卷》第7章-程序员职场心态.doc 欢迎大家购买作者签名…

git第一次提交代码至远程仓库步骤

git第一次提交代码至远程仓库步骤在将要提交的文件目录下打开Git Bash Here1.git init git add . 提交该目录下的所有文件 3.git commit -am “qiantai”(提交到本地仓库) 4.git remote add origin *** (***git地址) 5.git push -u -f origin master(提交到远程仓库&#x…

机器学习之 朴素贝叶斯、贝叶斯网络

目录 贝叶斯定理 朴素贝叶斯算法 高斯朴素贝叶斯 伯努利朴素贝叶斯 多项式朴素贝叶斯 贝叶斯网络 最简单的贝叶斯网络 全连接贝叶斯网络 一般化的贝叶斯网络 引子 参赛者会看见三扇关闭了的门&#xff0c;其中一扇的后面有一辆汽车&#xff0c;选中后面有车的那扇门可…

liunx -bash:ls:command not found,执行命令总是报找不到

解决办法: 使用绝对命令vi打开profile /bin/vi /etc/profile 添加: export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 简便方法: 直接执行 export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin export PA…

Nginx的Web管理界面收集

Nginx实在是太强大了&#xff01;灰度发布、金丝雀发布、负载均衡就只需要简单的几行配置就可以实现&#xff0c;这些特性嗾使微软无法比拟的。 原来Nginx除了使用ngx_http_stub_status_module模块&#xff08;http://127.0.0.1/ngx_status&#xff09;实现Web页面上的监控外&a…

attention机制_简析Attention机制—优缺点,实现,应用

什么是Attention机制&#xff1f;Attention机制的本质来自于人类视觉注意力机制。人们在看东西的时候一般不会从到头看到尾全部都看&#xff0c;往往只会根据需求观察注意特定的一部分。简单来说&#xff0c;就是一种权重参数的分配机制&#xff0c;目标是协助模型捕捉重要信息…

高级程序员如何面对职场压力?(2)--受伤的总是我

版权声明&#xff1a;原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。本文地址&#xff1a;http://tech.it168.com/a2008/0911/204/000000204752.shtml 课程上线消息&#xff1a;Leo讲的《初入公司…

pycharm Debug问题

pycharm Debug问题 参考链接:https://blog.csdn.net/weixin_43472408/article/details/85072640 Debug的调试方式如下所示&#xff1a; 1.show execution point (F10) 显示当前所有断点 2.step over(F8) 单步调试。 若函数A内存在子函数a时&#xff0c;不会进入子函数a内执…

vue表单的用法

你可以用 v-model 指令在表单控件元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇&#xff0c;但 v-model 本质上不过是语法糖&#xff0c;它负责监听用户的输入事件以更新数据&#xff0c;并特别处理一些极端的例子。 v-model 会忽略所有…

php执行npm命令_npm系列之命令执行

当我想使用vue的脚手架来创建一个项目的时候&#xff0c;我应该怎么做&#xff1f;执行命令 npm install -g vue/cli 全局安装&#xff0c;之后就可以在控制台中使用vue create programName 来创建一个项目。为什么可以直接使用vue命令&#xff1f;这类支持命令的依赖会在项目中…

模拟产品展示 Flash无法展示的追踪过程

鼠标滑过小图时&#xff0c;左侧前四张大图可以&#xff0c;但是最后那张大图无法展示&#xff1a; falsh产品展示需要通过参数传递&#xff0c;把关联产品id的图片get出来&#xff0c;如&#xff1a; http://192.168.8.166:90/category/prod_img.aspx?prodid101 结果&#xf…

git提交 本地分支和远程分支断开连接

1级标题 当 git push origin branch_name时遇到报错如下&#xff1a; fatal:‘origin’ does not appear to be a git repository fatal:Could not read from remote repository 原因&#xff1a; 本地分支和远程分支断开连接 解决方法&#xff1a; cd 本地分支里 1、git…