python lasso做交叉验证法_标准方程法_岭回归_LASSO算法_弹性网
程序所用文件:https://files.cnblogs.com/files/henuliulei/%E5%9B%9E%E5%BD%92%E5%88%86%E7%B1%BB%E6%95%B0%E6%8D%AE.zip
标准方程法
标准方程法是求取参数的另一种方法,不需要像梯度下降法一样进行迭代,可以直接进行结果求取
那么参数W如何求,下面是具体的推导过程
因此参数W可以根据最后一个式子直接求取,但是我们知道,矩阵如果线性相关,那么就无法取逆,如下图
因此,对比梯度下降法和标准方程法我们可以得到下面的图
下面的demo是标准方程法实现拟合
import numpy asnpfrom matplotlib import pyplot aspltfromnumpy import genfromtxt
#载入数据
data= genfromtxt('data.csv',delimiter=',')
x_data= data[:,0,np.newaxis]#一维变为二维
y_data= data[:,1,np.newaxis]
plt.scatter(x_data,y_data)
plt.show()
print(np.mat(x_data).shape)
print(np.mat(y_data).shape)
#给样本添加偏置项
X_data= np.concatenate((np.ones((100,1)),x_data),axis=1)
print(X_data.shape)
#标准方程法求解回归参数
def weights(xArr, yArr):
xMat=np.mat(xArr)#array变为mat,方便进行矩阵运算
yMat=np.mat(yArr)
xTx= xMat.T *xMatif np.linalg.det(xTx) == 0.0: #一、np.linalg.det():矩阵求行列式二、np.linalg.inv():矩阵求逆三、np.linalg.norm():求范数
print("该矩阵不可逆")returnws= xTx.I * xMat.T *yMatreturnws
ws=weights(X_data,y_data)
print(ws[1].shape)
#画图
x_test= np.array([[20], [80]])
print(x_test.shape)
y_test= ws[0] + x_test * ws[1]
plt.plot(x_data, y_data,'b.')
plt.plot(x_test, y_test,'r')
plt.show()
捎带一下两个小的知识点
数据归一化
由于单位的原因,不同单位之间数据产别太大,影响数据分析,所以我们一般会对某些数据进行归一化,即把数据归一化到某个范围之内。
交叉验证
当样本数据比较小的时候,为了避免验证集“浪费”太多的训练数据,采用样本交叉验证的方法,并把平均值作为结果
过拟合,欠拟合,正确拟合
过拟合会导致训练集拟合效果好,测试集效果差,欠拟合都差。为防止过拟合
正则化就是在原来的损失函数基础上加入一项,来减少高次项的值,使得曲线平滑
岭回归
为解决标准方程法中存在的矩阵不可逆问题,引入了岭回归
1 import numpy asnp2 from matplotlib import pyplot asplt3 fromsklearn import linear_model4 #读取数据5 data = np.genfromtxt("longley.csv", delimiter=',')6 print(data)7 #切分数据8 x_data = data[1:,2:]9 y_data = data[1:,1]10 #创建模型11 #生成0.001到1的五十个岭系数值12 alphas_to_test = np.linspace(0.001, 1)#从0.001到1共五十个数据,默认在start和end之间有50个数据,这五十个数据是假设的岭系数13 model = linear_model.RidgeCV(alphas= alphas_to_test, store_cv_values=True)#store_cv_values表示存储每个岭系数和样本对应下的损失值14 model.fit(x_data, y_data)15 print(model.alpha_)#最小损失函数对应的岭系数16 print(model.cv_values_.shape)#16*50的矩阵17 #绘图18 #岭系数和loss值得关系19 plt.plot(alphas_to_test, model.cv_values_.mean(axis = 0))# 求在每个系数下对应的平均损失函数,axis=1表示横轴,方向从左到右;0表示纵轴,方向从上到下20 plt.plot(model.alpha_, min(model.cv_values_.mean(axis = 0)),'ro')#最优点21 plt.show()22 model.predict(x_data[2,np.newaxis])#对一个样本进行预测
岭系数和损失函数对应的关系图
简单说一下arange,range,linspace的区别,arange和range都是在start和end之间以step作为等差数列对应的数组,只不过arange的step
可以是小数,而range必须为整数,而且arange属于numpy,linspace则是在start和end之间取num个数 np.linspace(start,end,num)
LASSO算法
由于岭回归计算得到的系数很难为0,而Lasso算法可以使一些指标为0
从上图可以看出,LASSo在入系数某个取值下某些特征的系数就归为0了
交点处变为最优取值处
1 import numpy asnp2 from matplotlib import pyplot asplt3 fromsklearn import linear_model4 #读取数据5 data = np.genfromtxt("longley.csv", delimiter=',')6 print(data)7 #切分数据8 x_data = data[1:,2:]9 y_data = data[1:,1]10 #创建模型11 model =linear_model.LassoCV()12 model.fit(x_data,y_data)13 #lasso系数14 print(model.alpha_)15 #相关系数,发现某些系数为零,说明这些系数权重比较小,可以忽视16 print(model.coef_)#[0.10206856 0.00409161 0.00354815 0. 0. 0. ]17 #验证18 model.predict(x_data[-2,np.newaxis])
弹性网
对lasso和岭系数方法综合起来
1 import numpy asnp2 from matplotlib import pyplot asplt3 fromsklearn import linear_model4 #读取数据5 data = np.genfromtxt("longley.csv", delimiter=',')6 print(data)7 #切分数据8 x_data = data[1:,2:]9 y_data = data[1:,1]10 #创建模型11 model =linear_model.ElasticNetCV()12 model.fit(x_data,y_data)13 #lasso系数14 print(model.alpha_)15 #相关系数,发现某些系数为零,说明这些系数权重比较小,可以忽视16 print(model.coef_)#[0.10206856 0.00409161 0.00354815 0. 0. 0. ]17 #验证18 print(model.predict(x_data[-2,np.newaxis]))
python lasso做交叉验证法_标准方程法_岭回归_LASSO算法_弹性网相关推荐
- python随机森林 交叉验证_随机森林算法详解及Python实现
一 简介 随机森林是一种比较有名的集成学习方法,属于集成学习算法中弱学习器之间不存在依赖的一部分,其因为这个优点可以并行化运行,因此随机森林在一些大赛中往往是首要选择的模型. 随机森立中随机是核心,通 ...
- python随机森林 交叉验证_随机森林是否需要交叉验证+特征的重要性
随机森林不需要交叉验证! 随机森林属于bagging集成算法,采用Bootstrap,理论和实践可以发现Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中.故没有参加 ...
- python k折交叉验证_机器学习之K折交叉验证
本文主题:使用 train/test split 进行模型评估的缺点 K-fold cross-validation 如何克服这些缺点 K-fold cross-validation 如何用于参数调优 ...
- python机器学习——十次交叉验证训练的数据准备算法
摄于 2017年4月21日 台湾垦丁船帆石海滩 前言 python强大的机器学习包scikit-learn可以直接进行交叉分割,之所以写个相当于锻炼自己思维. 这两天本来打算开始写朴素贝叶斯分类器的算 ...
- python k折交叉验证,python中sklearnk折交叉验证
python中sklearnk折交叉验证 发布时间:2018-06-10 11:09, 浏览次数:492 , 标签: python sklearnk 1.模型验证回顾 进行模型验证的一个重要目的是要选 ...
- 统计机器学习 作业一 采用交叉验证、留出法、自助法划分数据集,绘制PR图
要求:随机生成两组数据,每组50个数,其中一组服从正态分布,另一组服从N(1,1) .编写一个code: Input:上面产生的100个数,类别数:2 Output:1.0标签序列(每个标签对应每个数 ...
- (python基础)交叉验证
K折验证交叉验证 总的来说,交叉验证既可以解决数据集的数据量不够大问题,也可以解决参数调优的问题.这块主要有三种方式:简单交叉验证(HoldOut检验).k折交叉验证(k-fold交叉验证).自助法. ...
- sklearn做交叉验证
交叉验证是经常用到的验证方法 使用sklearn可以很大程度上简化交叉验证的过程 使用过程见下方: from sklearn import cross_validation gbdt=Gradient ...
- 周志华西瓜书3.4题——用十折交叉验证法和留一法估计对率回归的误差
周志华西瓜书3.4题. 本文所编写的代码均使用python3.7进行调试,依靠的sklearn进行的实验. 第一步,导入iris数据集,数据集使用sklearn包里面自带的. from sklearn ...
最新文章
- C# socket 解析http 协议
- springMVC简单实例
- 十进制数与八进制数互相转换(MATLAB和C版本)
- linux qt显示gif图片,QT显示GIF图片
- SAST算法的学习笔记
- 多linux服务器之间实现文件自动复制(脚本)
- 腾讯视频 Python 爬虫项目实战
- mysql配置文件 my.ini
- 【机器人学习】机器人轨迹规划A※算法代码
- 【语音识别】基于支持向量机SVM实现脑电信号分期睡眠监测matlab 源码
- Python 并口(LPT)打印
- 14.敏捷组织转型四步法之4 - 通过复盘、回顾,持续改进
- 群晖Docker百度网盘套件一直灰界面
- 1024程序员节,带你解锁过节新方式
- 深空通信相关资料——以火星为例
- 大通流TVS管和ESD静电二极管的区别
- 记一次rsyslog日志记录失败的解决过程
- ddr2的上电顺序_DDR DDR2 DDR3设计总结指导手册.pdf
- 从黑天鹅事件到墨菲定律
- 新古典增长理论和内生增长理论的小总结