程序所用文件: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算法_弹性网相关推荐

  1. python随机森林 交叉验证_随机森林算法详解及Python实现

    一 简介 随机森林是一种比较有名的集成学习方法,属于集成学习算法中弱学习器之间不存在依赖的一部分,其因为这个优点可以并行化运行,因此随机森林在一些大赛中往往是首要选择的模型. 随机森立中随机是核心,通 ...

  2. python随机森林 交叉验证_随机森林是否需要交叉验证+特征的重要性

    随机森林不需要交叉验证! 随机森林属于bagging集成算法,采用Bootstrap,理论和实践可以发现Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中.故没有参加 ...

  3. python k折交叉验证_机器学习之K折交叉验证

    本文主题:使用 train/test split 进行模型评估的缺点 K-fold cross-validation 如何克服这些缺点 K-fold cross-validation 如何用于参数调优 ...

  4. python机器学习——十次交叉验证训练的数据准备算法

    摄于 2017年4月21日 台湾垦丁船帆石海滩 前言 python强大的机器学习包scikit-learn可以直接进行交叉分割,之所以写个相当于锻炼自己思维. 这两天本来打算开始写朴素贝叶斯分类器的算 ...

  5. python k折交叉验证,python中sklearnk折交叉验证

    python中sklearnk折交叉验证 发布时间:2018-06-10 11:09, 浏览次数:492 , 标签: python sklearnk 1.模型验证回顾 进行模型验证的一个重要目的是要选 ...

  6. 统计机器学习 作业一 采用交叉验证、留出法、自助法划分数据集,绘制PR图

    要求:随机生成两组数据,每组50个数,其中一组服从正态分布,另一组服从N(1,1) .编写一个code: Input:上面产生的100个数,类别数:2 Output:1.0标签序列(每个标签对应每个数 ...

  7. (python基础)交叉验证

    K折验证交叉验证 总的来说,交叉验证既可以解决数据集的数据量不够大问题,也可以解决参数调优的问题.这块主要有三种方式:简单交叉验证(HoldOut检验).k折交叉验证(k-fold交叉验证).自助法. ...

  8. sklearn做交叉验证

    交叉验证是经常用到的验证方法 使用sklearn可以很大程度上简化交叉验证的过程 使用过程见下方: from sklearn import cross_validation gbdt=Gradient ...

  9. 周志华西瓜书3.4题——用十折交叉验证法和留一法估计对率回归的误差

    周志华西瓜书3.4题. 本文所编写的代码均使用python3.7进行调试,依靠的sklearn进行的实验. 第一步,导入iris数据集,数据集使用sklearn包里面自带的. from sklearn ...

最新文章

  1. C# socket 解析http 协议
  2. springMVC简单实例
  3. 十进制数与八进制数互相转换(MATLAB和C版本)
  4. linux qt显示gif图片,QT显示GIF图片
  5. SAST算法的学习笔记
  6. 多linux服务器之间实现文件自动复制(脚本)
  7. 腾讯视频 Python 爬虫项目实战
  8. mysql配置文件 my.ini
  9. 【机器人学习】机器人轨迹规划A※算法代码
  10. 【语音识别】基于支持向量机SVM实现脑电信号分期睡眠监测matlab 源码
  11. Python 并口(LPT)打印
  12. 14.敏捷组织转型四步法之4 - 通过复盘、回顾,持续改进
  13. 群晖Docker百度网盘套件一直灰界面
  14. 1024程序员节,带你解锁过节新方式
  15. 深空通信相关资料——以火星为例
  16. 大通流TVS管和ESD静电二极管的区别
  17. 记一次rsyslog日志记录失败的解决过程
  18. ddr2的上电顺序_DDR DDR2 DDR3设计总结指导手册.pdf
  19. 从黑天鹅事件到墨菲定律
  20. 新古典增长理论和内生增长理论的小总结

热门文章

  1. Windows应急响应篇
  2. 微星B450M迫击炮MAX开启CPU虚拟化功能
  3. python开源社区汇总_Github上热门Python开源项目盘点
  4. 有了这几个软件安全测试工具,编写安全测试报告再也不愁
  5. 图形加速卡技术(大众扫盲篇)
  6. CAN总线多节点通信异常分析及解决
  7. 深入探索C语言struct的用法
  8. 如何使用ABBYY FineReader 14签署PDF文档
  9. 免费开源HC小区物业管理系统
  10. UVA 662 Fast Food(dp)