参考:《python机器学习预测分析核心算法》4-2 & llx1026同学的修改代码

十折交叉验证整体采用上节的lars算法框架,加入了十折验证,十个β系数,每个β系数进行350次迭代。

算法概要:
1.从网页中读取数据
2.属性存入属性列表,结果存入标签列表
3.计算每列的均值与方差
4.属性和标签分别进行归一化处理
5.设置相关系数
6.进行10折交叉验证(循环10次)
每次循环生成一个β系数,并抽取数据中的1/10行数加入验证效果的列表,剩下的行进行训练,350轮训练是的每次验证产生350个β数据,选取其中最好的那个显示

代码:

# -*- coding:utf-8 -*-
import urllib.request
import numpy
from sklearn import datasets,linear_model
from math import sqrt
import matplotlib.pyplot as plot#从网页中读取数据
url="http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
data=urllib.request.urlopen(url)#将数据中第一行的属性读取出来放在names列表中,将其他行的数组读入row中,并将row中最后一列提取
#出来放在labels中作为标签,并使用pop将该列从row去去除掉,最后将剩下的属性值转化为float类型存入xList中
xlist=[]
labels=[]
names=[]
firstline=True
for line in data:if firstline:names=line.strip().split(b';')firstline=Falseelse:row=line.strip().split(b';')labels.append(float(row[-1]))row.pop()floatrow=[float(num) for num in row]xlist.append(floatrow)#计算几行几列
nrows=len(xlist)
ncols=len(xlist[1])
#print("rows:"+nrows)
#print("cols"+ncols)#计算均值和方差
xmeans=[]
xsd=[]
for i in range(ncols):col=[xlist[j][i] for j in range(nrows)]mean=sum(col)/nrowsxmeans.append(mean)coldiff=[(xlist[j][i]-mean) for j in range(nrows)]sumsq=sum([coldiff[j]*coldiff[j] for j in range(nrows)])stddev=sqrt(sumsq/nrows)xsd.append(stddev)#数值减去平均数再除以标准差得到标准分数,反映了各数值的相对位置,也就是书中说的归一化
#对数值进行归一化
xnormalized=[]
for i in range(nrows):rownormalized=[(xlist[i][j]-xmeans[j])/xsd[j] for j in range(ncols)]xnormalized.append(rownormalized)#对标签进行归一化
meanlabel=sum(labels)/nrows
sdlabel=sqrt(sum([(labels[i]-meanlabel)*(labels[i]-meanlabel) for i in range(nrows)])/nrows)
labelnormalized=[(labels[i]-meanlabel)/sdlabel for i in range(nrows)]#设置走多少步
nsteps=350
#设置每一步系数变化多少
stepsize=0.004
#设置交叉数量
nxval=10#初始化储存错误的列表
errors=[]
for i in range(nsteps):b=[]errors.append(b)#进行10折交叉验证
for ixval in range(nxval):#书上应该是写错了,ixcal*nxval的话a就没了啊,参考了辣个女生的#每次验证取出1/10的行数idxtest=[a for a in range(nrows) if a%nxval==ixval]idxtrain=[a for a in range(nrows) if a%nxval!=ixval]xtest=[xnormalized[r] for r in idxtest]xtrain=[xnormalized[r] for r in idxtrain]nrowstest=len(xtest)nrowstrain=len(xtrain)labeltest=[labelnormalized[r] for r in idxtest]labeltrain=[labelnormalized[r] for r in idxtrain]#初始化初始化向量系数βbeta=[0.0]*ncols#初始化矩阵β的每一步betamat=[]betamat.append(list(beta))#计算每列与最终结果的关系系数βfor i in range(nsteps):
#计算残差residuals=[0.0]*nrowsfor j in range(nrowstrain):
#labelshat=每行的各个标准差*相应β系数后的和(预测标准差)labelshat=sum([xtrain[j][k]*beta[k] for k in range(ncols)])
#residuals是列表,记录每行的实际标准差与预测标准差的差值residuals[j]=labeltrain[j]-labelshat#通过标准分数和残差值计算列的相关属性corr=[0.0]*ncolsfor j in range(ncols):
#corr列表初始化为各列的数值*他所在行的差值后的和再除以行数=各列对残差值减小的贡献数值
#2个属性的关联值=两者归一化的乘积corr[j]=sum([xtrain[k][j]*residuals[k] for k in range(nrowstrain)])/nrowstrain#寻找刚刚计算的关联值中最大的那一列(正负)istar=0corrstar=corr[0]for j in range(1,(ncols)):if abs(corrstar)<abs(corr[j]):istar=jcorrstar=corr[j]
#对残差值减小关联最大的这列β进行增大或减小(corrstar/abs(corrstar)控制正负)beta[istar]+=stepsize*corrstar/abs(corrstar)betamat.append(list(beta))for j in range(nrowstest):labelshat=sum([xtest[j][k]*beta[k] for k in range(ncols)])err=labeltest[j]-labelshaterrors[i].append(err)#print("errors= ", errors)              cvcurve = []  for errvect in errors:  mse = sum([x*x for x in errvect]) / len(errvect)  cvcurve.append(mse)  minemse = min(cvcurve)  minpt = [i for i in range(len(cvcurve)) if cvcurve[i] == minemse][0]  print("Minimum Mean Square Error", minemse)  print("Index of Minimum Mean Square Error", minpt)  xaxis = range(len(cvcurve))  plot.plot(xaxis, cvcurve)  plot.xlabel("Steps Taken")  plot.ylabel(("Mean Square Error"))  plot.show()

结果:

Minimum Mean Square Error 0.5873018933136459
Index of Minimum Mean Square Error 311
Minimum Mean Square Error 0.5534955247726759
Index of Minimum Mean Square Error 289
Minimum Mean Square Error 0.5957385843236068
Index of Minimum Mean Square Error 244
Minimum Mean Square Error 0.6163846701751715
Index of Minimum Mean Square Error 265
Minimum Mean Square Error 0.6205467405536572
Index of Minimum Mean Square Error 289
Minimum Mean Square Error 0.6273690438035697
Index of Minimum Mean Square Error 312
Minimum Mean Square Error 0.6214330728517901
Index of Minimum Mean Square Error 285
Minimum Mean Square Error 0.6180113626794431
Index of Minimum Mean Square Error 285
Minimum Mean Square Error 0.6295047735731523
Index of Minimum Mean Square Error 280
Minimum Mean Square Error 0.6494495844086484
Index of Minimum Mean Square Error 285

结果是十个,但是算法是一样的。都是一样的算法,抽取的训练数据不同导致的结果的差异,使用十折交叉验证可以大致评估上节的lars算法的性能

LARS算法---十折交叉验证相关推荐

  1. 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集

    机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q:如何将数据集划分为测试数据集和训练数据集? A:three ways: 1.像sklearn一样,提供一个将数据集切分成训练集和测试集的函数 ...

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

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

  3. R语言选模型/用AIC BIC adjustRsq 十折交叉验证 LOOCV等验证/择参 以fama三因子模型和CAMP模型为例@[理科班的习习同学

    R语言选模型/用AIC BIC adjustRsq 十折交叉验证 LOOCV等验证/择参 以fama三因子模型和CAMP模型为例@理科班的习习同学 引入包与数据预处理 install.packages ...

  4. 十折交叉验证pythoniris_数据集的划分——交叉验证法

    本文作者:王 歌 文字编辑:戴 雯 技术总编:张 邯Python云端培训课程火热招生中~重大通知!!!爬虫俱乐部于2020年7月11日至14日在线上举行为期四天的Stata编程技术定制培训,招生工作已 ...

  5. R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化

    最近我们被客户要求撰写关于葡萄酒的研究报告,包括一些图形和统计输出. 介绍 数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息.该数据集有1599个观测值和12个变量,分别是 ...

  6. C语言十折交叉验证,R随机森林交叉验证 + 进度条

    library(data.table) library(randomForest) data str(data) #交叉验证,使用rf预测sepal.length k = 5 data$id list ...

  7. 十折交叉验证pythoniris_python机器学习-交叉验证(cross-vaildation)

    K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一. 所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. kNN算 ...

  8. pytorch - K折交叉验证过程说明及实现

    代码主要核心思想来自:https://www.cnblogs.com/JadenFK3326/p/12164519.html K折交叉交叉验证的过程如下: 以200条数据,十折交叉验证为例子,十折也就 ...

  9. 机器学习代码实战——K折交叉验证(K Fold Cross Validation)

    文章目录 1.实验目的 2.导入数据和必要模块 3.比较不同模型预测准确率 3.1.逻辑回归 3.2.决策树 3.3.支持向量机 3.4.随机森林 1.实验目的 使用sklearn库中的鸢尾花数据集, ...

  10. 周志华《机器学习》课后习题3.410折交叉验证法和留一法UCI实例比较

    3.4选择两个UCI数据集,比较10折交叉验证法和留一法所估计出的对率回归的错误率. 利用SciKitLearn做十折交叉验证和留一法筛选 本文选用UCI提供的鸢尾花数据集和红酒产地数据集. Iris ...

最新文章

  1. 步步为营-68-asp.net简单练习(get set)
  2. 你可能不知道的小知识-bug为什么叫bug
  3. C++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
  4. Servlet中防止盗链的代码
  5. matlab 等分矩阵,用matlab根据列拆分矩阵.
  6. sharepoint的文件是怎样存放的及存放的表是哪个
  7. windbg调试句柄泄露
  8. Markdown效率参考手册
  9. AlloyTeam|腾讯全端 AlloyTeam 团队 - HTML5开源图像处理框架AlloyImage
  10. 如何在 iPhone、iPad、Apple Watch、Mac 和 Apple TV 上使用 AirPods 收听?
  11. NOD32 AntiVirus v2.70.16杀毒软件
  12. Arduino uno LED灯实验
  13. EXCEL2007导入SQL生成新表并插入数据
  14. 关于网络口碑研究小组
  15. 2019广东工业智造创新大赛【赛场二】感谢拼命的自己
  16. 【机器学习】【ICA-2】ICA独立成分分析的原理 + ICA前的预处理(中心化+漂白)
  17. 人脸识别数据集整理以及下载
  18. 热门壁纸 罗盘时钟原生js 实现
  19. 【项目实战】北京二手房房价分析与预测
  20. 零基础如何学习云计算?云计算开发课程详解

热门文章

  1. Python实现google翻译
  2. 《如何成为一个会学习的人》
  3. c++创建线程的6种方法
  4. 如何从seo的维度来选择网站的关键词
  5. epson连接计算机后无法打印,如何解决连接到Epson打印机后计算机无法打印的问题...
  6. itext 生成pdf、pdf模板生成pdf
  7. Python 字符串去除空格的方法
  8. 实验室计算机维修申请条件,计算机实验室管理制度
  9. fso 拒绝访问_CTBS问题及解决.docx
  10. linux只打包空目录,linux 打包当前文件夹下所有文件的方法