#-*- coding: utf-8 -*-

#看来这个程序适合的是python2版本的。来源:https://blog.csdn.net/li_huifei/article/details/78467689#这个目前也可以用了,主要还是在第60行的数据转换,,,不太清楚怎样去做装换。主要是因为数据类型不清楚,所以用了最笨的方法,不知道结果正不正确。????【这个是错误的】#PLSR3经过摸索,第68行,还是因为数据结构类型不对,之后把array类型的数组转换成了list,,,这样方便在外面套一个[],,之后运行没有问题,但是结果的正确与否,还有待验证。

#导入库的部分

importcsvfrom sklearn importpreprocessingfrom sklearn.cross_validation importtrain_test_splitfrom sklearn.decomposition importRandomizedPCAfrom sklearn.cross_decomposition import PLSRegression #偏最小二乘法的实现, 在这里是可以跳进 PLSRegression 里面的

importnumpy as npimportmathimportmatplotlib.pyplot as plt#导入数据的部分

A = np.loadtxt('A.csv',delimiter=',') #读入数据 这里的A就是y的矩阵 #读了这么多的数据???哪个是x,,哪个又是y呢???

print(A.shape)

RON= np.loadtxt('RON.csv',delimiter=',') #这里的RON就是x的矩阵

print(RON.shape)#暂且在这里设置全局变量吧。

x_train_st_i=[]#定义全局函数的部分。

def error(y_predict,y_test): #定义计算误差平方和函数,,,传入的是估算出的值,和测试值,,这里仅仅是用来定义的,方便后面的调用。

errs =[]for i inrange(len(y_predict)):

e= (y_predict[i]-y_test[i])**2errs.append(e)returnsum(errs)#偏最小二乘法的实现部分。

x_train, x_test, y_train, y_test = train_test_split(RON,A,test_size=0.5) #划分训练集测试集,,,这个是一个库函数?? ,,,,这里能够看出是A和RON进行建模的。

x_train_st = preprocessing.scale(x_train) #数据标准化,这个是内置函数

y_train_st = preprocessing.scale(y_train) #数据标准化,,这一句是我仿照上面的一句改写的。

n_components = 0 #这个应该是保存主成分的个数。

while n_components

n_components=n_components+1 #在第一遍的时候n_components是1,第二遍循环的时候是2,,,第n遍循环是n,,最大是x的列数,也就是特征的个数,

pls2 = PLSRegression(n_components=n_components) #计算SS (SS这个是全建模 , PRESS是减去一个进行建模,,,,在python里建模很简单,设置好参数,调用一下函数就能建模了)

#这个不是偏最小二乘法吗???,,这里是循环计算主成分的个数,直到达到满意的精度。

pls2.fit(x_train_st, y_train) #fit也是一个函数,,,两个参数,第一个参数是训练集,第二个参数是目标。

y_predict0 = pls2.predict(x_train_st) #predict也是一个内置的函数,,,,这个是不是用建好的模型去做预测,,,,把参数训练集输入进去,得到的是预测的值。

SS = error(y_predict0,y_train) #这里是预测的值和真正的值之间的误差大小。

y_predict1 = [] #这是创建了一个新的变量。根据名字的意思,根据模型得到的y的预测值,实际上这个模型是留一法建立的模型。

for i in range(x_train_st.shape[0]): #计算PRESS,,,,这个是x_train_st的行数

n_components1 = n_components #但是我不明白,为什么这里还要加1,主成分不可能是0个吧,所以就从1开始了。

x_train_st1 = np.delete(x_train_st,i,0) #这里的0是行,1是列,,这个应该是删除第i行,,,这里是标准化的数组。留一法的实现

y_train_st1 = np.delete(y_train,i,0) #这个也是删除第i行,这里都是经过标准化的(但这个x是经过标准化的,y却没有用标准化的数据)。,,这个没有用到过,是不是这里写错了??

pls2 = PLSRegression(n_components=n_components1) #偏最小二乘法参数的设置,,,这里面一般有5个参数,,但这里只传入了主成分的个数。

#参数1:n_components:int ,(default 2) ,,要保留的主成分数量,默认为2

#参数2:scale:boolean,(default True),,是否归一化数据,默认为是

#参数3:max_iter: an integer,(default 500),,使用NIPALS时的最大迭代次数

#参数4:tol: non-negative real(default 1e-06),,迭代截止条件

#参数5:copy: Boolean,(default True),,

pls2.fit(x_train_st1, y_train_st1) #这里是根据前面设置好的参数建模过程,这里的建模过程是不是不太对(这里x是归一化的,y并没有用归一化的),应该都是用归一化的才行呀。???

#这里主要是进行了数据格式的转换,因为做预测要传进的是矩阵【格式很重要】

x_train_st_i=[] #用之前要进行清空,这个很重要。用一个参数之前要进行清空。

x_train_st_list=x_train_st[i].tolist()

x_train_st_i.append(x_train_st_list)print ('the x_train_st is',x_train_st_i) #输出一下变量,查看格式是否正确,因为下面的predict函数需要用[[1,1,1,1,1,1]] 这种格式的数据

y_predict11= pls2.predict(x_train_st_i) #预测函数,给定之前留一法没有用到的样本,进行建模,预测对应的y值。????可是已经删除了不是吗??? ZHE这句出了一点问题????就是数据格式有问题,需要在最外面在加一个[]

y_predict1.append(y_predict11)#把所有的y值组成一个数组,便于计算误差。,这个也是y的预测值,用它来算出另一个误差。

PRESS = error(y_predict1,y_train) #可能错误:https://blog.csdn.net/little_bobo/article/details/78861578

Qh = 1-float(PRESS/SS)if Qh<0.0985: #判断精度 模型达到精度要求,可以停止主成分的提取了。

plt.figure(1)

plt.scatter(y_predict0,y_train)#画了一个图,这个图是预测值,与测量值的图???

plt.figure(2)

plt.scatter(y_predict1,y_train)print ('the Qh is',Qh)print ('the PRESS is',PRESS)print ('the SS is',SS)break #达到了上面的精度,就可以停止while的迭代了

#这下面就没有看懂了。

print ('n_components is',n_components+1) #这里为什么要加1???,,,难道因为计数是从0开始的??

SECs =[]

errors=[]

e= 100

for i in range(10): #循环测试

#print i

x_train, x_test, y_train, y_test = train_test_split( RON,A, test_size=0.5) #划分训练集与测试集,这个是一个内置的函数。

x_test_st = preprocessing.scale(x_test) #数据标准化

y_predict = pls2.predict(x_test_st) #进行预测

SECs.append(np.sqrt(error(y_predict,y_test)/(y_test.shape[0]-1)))

errors.append(float(error(y_predict,y_test)))if SECs[-1]

y_predict_min=y_predict

y_test_min=y_testprint ('the prediced value is' ,y_predict.T) #画图,打印结果

print ('the true value is',y_test)print ('the mean error is',float(np.mean(errors)))print ("the mean SEC is",float(np.mean(SECs)))

plt.figure(3)

plt.scatter(y_predict_min,y_test_min)

python偏最小二乘法公式,python3 偏最小二乘法实现相关推荐

  1. 最小二乘法矩阵微分偏导法证明

                               最小二乘法矩阵微分偏导法证明 向量范数回顾 向量1范数 向量1范数即是向量元素的绝对值.定义见: . 向量2范数 向量2范数即是向量里每个元素的平 ...

  2. 单变量线性回归的最小二乘法公式

    单变量线性回归的最小二乘法公式 单变量线性回归 线性回归系数的确定 导数方法 配方法 简单程序验证 单变量线性回归 假设有nnn个点 (x1,y1),(x2,y2),⋯,(xn,yn)(x_1, \, ...

  3. 最小二乘公式推导(步骤详细,一看就会)_Polaris_T的博客-CSDN博客_最小二乘法公式

    最小二乘公式推导(步骤详细,一看就会)_Polaris_T的博客-CSDN博客_最小二乘法公式

  4. ols最小二乘法是什么|OLS最小二乘法是如何推导的

    本站原创文章,转载请说明来自<老饼讲解-机器学习>ml.bbbdata.com <老饼讲解-机器学习>--一个免费.专业.全面的机器学习网站http://ml.bbbdata. ...

  5. 递归最小二乘法、增广最小二乘法、带遗忘因子的递归增广最小二乘法

    一.递归最小二乘法 递推最小二乘法:当矩阵维数增加时,矩阵求逆运算计算量过大,而且不适合在线辨识.为了减少计算量,并且可以实时地辨识出动态系统的特性,可以将最小二乘法转换成参数递推的估计. 取前N组数 ...

  6. 一步完成最小二乘法、递推最小二乘法、增广最小二乘法、广义最小二乘法、辅助变量法、二步法辨识(传递函数)

    用一步完成最小二乘法.递推最小二乘法.增广最小二乘法.广义最小二乘法.辅助变量法.二步法辨识如下模型的参数: 噪声的成形滤波器 采样时间0.01 要求: 1.用matlab 写出程序代码: 2.画出实 ...

  7. 放大电路为什么要保证“发射结正偏,集电结反偏”?集电极和发射极电流等比例变化(放大)的本质原因是什么?

    下面这张图我觉得是放大电路这一章最重要的一张图之一了: 我不学课本那样,先一个个跟你讲每一条电流是怎么来的,每一极的电流又等于什么+什么. 咱先来感性认识(不讲公式),等你懂了之后咱再来理性分析. 一 ...

  8. Excel单元格使用xlwings包调用python函数的公式,截取子网页(标题)的试验 问题求助CSDN

    Excel单元格使用xlwings包调用python函数的公式,截取子网页(标题)的试验 问题求助CSDN Python 环境:python3.7 的conda上的py3环境 Excel 2010 E ...

  9. python3里的pillow怎么安装_“python安装pillow教程“python3.4怎么安装pil

    "python安装pillow教程"python3.4怎么安装pil python安装pillow教程2020-10-09 03:37:02人已围观 如何在python3.6中装p ...

  10. linux下载哪个python版本-Linux安装python3.6

    如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环境! 一.安装p ...

最新文章

  1. 身份证校验程序(上)- 零基础入门学习Delphi48
  2. Linux环境下USB的原理、驱动和配置
  3. LACP链路聚合-基础篇
  4. 日常生活小技巧 -- win10造字
  5. python绘制3d动态模型_怎么用python把*.obj文件里面的3D模型特征提取出来?
  6. MySQL5.5 对多核CPU的支持测试
  7. Python 第三方模块之 pdfkit
  8. 3-2:HTTP协议之URI(URL)和HTTP基本概念及其特征
  9. jQuery 源码解析一:jQuery 类库整体架构设计解析
  10. lisp 河道水面线计算_鹤岗河道用铸铁轻型闸门厂家
  11. 高效延时消息设计与实现的场景
  12. Java字符串contains()
  13. 正则表达式 - 中文、英文姓名匹配
  14. 这个AI批量作画每小时九张,与毕加索同台竞技,还真有人买
  15. jspsmartupload简述
  16. c语言 常量和变量 ppt,c语言常量与变量.ppt
  17. Xposed环境安装
  18. SQLite 查询得到今天日期
  19. 离散数学——哈斯图,最大最小值,极大极小值,上界和下界
  20. wifi-pumpkin/wifipumpkin3-2022-kali安装(源码编译)

热门文章

  1. 诺基亚如何利用计算机上网,诺基亚E63的WIFI上网功能全教程
  2. (转)Windows 批处理(bat)语法大全
  3. QT界面窗口的显示和隐藏,关闭
  4. Micropython——使用PS2手柄实现远程遥控
  5. 2021年微信视频号生态趋势调查报告|友望数据发布
  6. 数据分析EXCEL常用统计函数
  7. Echart添加水印
  8. SpringMVC 工作原理了解吗?
  9. laravel connector.php,如何获得laravel DB连接到PHP连接?
  10. 51nod-1534 棋子游戏