我使用下面的函数为我的优化器生成一组给定的猜测lambda.
运行时,我经常会收到以下警告消息:
警告:Matrix的工作精度非常高.在NSS_betas at 9 In DElambda at 19 In Individual_Lambdas at 36
我希望能够从解决方案集中排除任何形成单个矩阵的beta,但我不知道如何测试它?
我一直在尝试使用rcond(),但我不知道在奇异和非奇异之间切断的位置?
当然,如果Matlab正在生成警告消息,它已经知道矩阵是否是单数,所以如果我能找到该变量的存储位置,我可以使用它吗?
function betas=NSS_betas(lambda,data)
mats=data.mats2';
lambda=lambda;
yM=data.y2';
nObs=size(yM,1);
G= [ones(nObs,1) (1-exp(-mats./lambda(1)))./(mats./lambda(1)) ((1-exp(-mats./lambda(1)))./(mats./lambda(1))-exp(-mats./lambda(1))) ((1-exp(-mats./lambda(2)))./(mats./lambda(2))-exp(-mats./lambda(2)))];
betas=G\yM;
r=rcond(G);
end
Run Code Online (Sandbox Code Playgroud)
感谢您的建议:
在将lambda值设置为相等以便设置单个矩阵之后,我测试了以下所有三个示例
if (~isinf(G))
r=rank(G);
r2=rcond(G);
r3=min(svd(G));
end
Run Code Online (Sandbox Code Playgroud)
r = 3,r2 = 2.602085213965190e-16; r3 = 1.075949299504113e-15;
所以在这个测试中,rank()和rcond()工作假设我采用下面给出的基准值.
然而,当我有两个接近但不完全相等的值时会发生什么?
我怎样才能决定什么距离太近?
我在Spyder中运行下面的代码.我在py文件中输入了它,只需点击运行按钮即可.
当我尝试运行它时,我收到错误:
ValueError:需要多于1个值才能解压缩
如图所示,你打算在运行程序之前给出argv变量的输入,但我不知道如何做到这一点是spyder?
http://learnpythonthehardway.org/book/ex13.html
from sys import argv
script, first, second, third = argv
print "The script is called:", script
print "The first variable is:", first
print "The second variable is:", second
print "Your third variable is:", third
Run Code Online (Sandbox Code Playgroud) 我想将Matlab与EC2一起使用,它基本上是一个令人尴尬的并行问题,所以我不一定需要并行工具箱.
在这里阅读博客:
http://aws.typepad.com/aws/2008/11/parallel-comput.html
白皮书的链接实际上会将您带到一个网页,其中表示该服务仅在美国和加拿大(我是英国)提供,但您可以注册您的兴趣.
此外,似乎许可证可能存在问题?如果我必须为每个CPU购买一个新的许可证,它对我来说是一个非启动器.
我的程序并没有像lsqmin那样使用任何大的MATLAB函数,所以理论上它应该很容易转换为Octave(我认为).
如果由于上述任何原因而无法使用Matlab和EC2,那么有人可以告诉我如何在EC2中使用Octave吗?
function [output]=DElambda(de,data,OF)
P1=zeros(de.d,de.nP);
Pu=zeros(de.d,de.nP);
for i=1:de.d
P1(i,:)=de.min(i,1)+(de.max(i,1)-de.min(i,1))*rand(de.nP,1);
end
P1(:,1:de.d)=diag(de.max);
P1(:,de.d+1:2*de.d)=diag(de.min);
for i=1:de.nP
betas(:,i)=NSS_betas(P1(:,i),data);
end
Params=vertcat(betas,P1);
Fbv=NaN(de.nG,1);
Fbest=realmax;
F=zeros(de.nP,1);
P=zeros(de.nP,1);
for i=1:de.nP
F(i)=OF(Params(:,i)',data);
P(i)=pen(P1(:,i),de,F(i));
F(i)=F(i)+P(i);
end
[Fbest indice] =min(F);
xbest=Params(:,indice);
Col=1:de.nP;
for g=1:de.nG
P0=P1;
rowS=randperm(de.nP)';
colS=randperm(4)';
RS=circshift(rowS,colS(1));
R1=circshift(rowS,colS(2));
R2=circshift(rowS,colS(3));
R3=circshift(rowS,colS(4));
%mutate
Pm=P0(:,R1)+de.F*(P0(:,R2)-P0(:,R3));
%extra mutation
if de.R>0
Pm=Pm+de.r*randn(de.d,de.nP);
end
%crossover
PmElements=rand(de.d,de.nP)<de.CR;
%mPv(MI)=mP(Mi);
if de.oneElementfromPm
Row=unidrnd(de.d,1,de.nP);
ExtraPmElements=sparse(Row,Col,1,de.d,de.nP);
PmElements=PmElements|ExtraPmElements;
end
P0_Elements=~PmElements;
Pu(:,RS)=P0(:,RS).*P0_Elements+PmElements.*Pm;
%%%need to add penalty!!!!!!!!!!!!
%select vector to enter next generation
for i=1:de.nP
betasPu(:,i)=NSS_betas(Pu(:,i),data);
end
ParamsPu=vertcat(betasPu,Pu); …
Run Code Online (Sandbox Code Playgroud) 根据这个链接:
我可以用以下的方式支持我的表扬diary
:
但是我还想备份我现有的命令历史记录,我假设命令历史记录存储在某个文本文件中是否正确?如果是这样我可以复制一下吗?
我正在使用RStudio,我希望能够在特定的行停止代码执行.
这些函数在第一个脚本文件中定义,并从第二个脚本文件调用.
我使用第一个文件到第二个文件 source("C:/R/script1.R")
我使用从头到尾的运行:我从第二个脚本开始运行,该脚本具有函数调用,并在第一个脚本中突出显示了函数定义所在的行.
然后我browser()
用来查看变量.然而,这并不理想,因为涉及一些大的矩阵.有没有办法让这些变量出现在RStudio的工作区中?
此外,当我从一行到另一行重新使用run时,它只运行到被调用的第一个脚本文件的末尾,它不会返回到调用函数并完成第二个文件的运行.
我怎样才能在RStudio中实现这些目标?
好的,这是一个简单的例子,下面的函数加法器在一个脚本中定义
adder<-function(a,b) {
browser()
return(a+b)
}
Run Code Online (Sandbox Code Playgroud)
我打电话来自第二个剧本
x=adder(3,4)
Run Code Online (Sandbox Code Playgroud)
在第二个脚本中调用adder时,在第一个脚本中启动browser().从这里我可以使用get("a")来获取a的值,但是a和b的值不会出现在RStudio的工作区中?
在这里的例子中它并不重要,但是当你有几个大矩阵时它确实如此.
根据维基百科,特征值分解应该是这样的:
http://en.wikipedia.org/wiki/Square_root_of_a_matrix
请参阅对角化计算方法部分:
Sp如果矩阵A被分解使得它具有特征向量V和特征值D,则A = VDV'.
A=[1 2; 3 4];
[V,D]=eig(A);
RepA=V*D*V';
Run Code Online (Sandbox Code Playgroud)
但是在Matlab中,A和RepA不相等?
为什么是这样?
巴兹
要复制此错误,您必须首先安装包 MARSS。我还包括用户指南。
https://cran.r-project.org/web/packages/MARSS/vignettes/UserGuide.pdf
可以使用第 35 页上的示例调用
dat = t(harborSealWA)
dat = dat[2:nrow(dat),]
debugonce(MARSSkem)
kemfit = MARSS(dat)
Run Code Online (Sandbox Code Playgroud)
在 RStudio 中为 MARSSkem 触发 debugmode 时,您会发现无法设置断点!屏幕顶部还有一条调试消息说:“调试位置是近似的,因为源代码不可用”。我想这就是我不能设置断点的原因!
问题是我试图定位的错误(在所示的简单示例中不存在)是在第 55 次迭代中发现的,并且每次迭代都包含多个 for 循环,每个循环有 100 个循环!手动一步一步根本不实用!
Q1.) 有没有办法在 R studio 中为这个函数设置断点?
Q2.) 如果不是,我找到这个问题的最佳选择是什么?(理想情况下,我不想弄乱包源代码,但如果它是唯一的选择,我会这样做)
谢谢
巴兹
我从这里下载文件“ pi_million_digits.txt”:
https://github.com/ehmatthes/pcc/blob/master/chapter_10/pi_million_digits.txt
然后,我使用以下代码打开并阅读它:
filename = 'pi_million_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
pi_string = ''
for line in lines:
pi_string += line.strip()
print(pi_string[:52] + "...")
print(len(pi_string))
Run Code Online (Sandbox Code Playgroud)
但是,产生的输出是正确的,除了它之前带有相同的奇怪符号:“3.141 ....”
是什么导致这些奇怪的符号?我正在剥线,所以我希望这些符号会被删除。
我最初有字符串格式的日期。我想从这些日期中提取月份作为数字。
df = pd.DataFrame({'Date':['2011/11/2', '2011/12/20', '2011/8/16']})
Run Code Online (Sandbox Code Playgroud)
我将它们转换为熊猫日期时间对象。
df['Date'] = pd.to_datetime(df['Date'])
Run Code Online (Sandbox Code Playgroud)
然后我想提取所有月份。
当我尝试:
df.loc[0]["Date"].month
Run Code Online (Sandbox Code Playgroud)
这可以返回正确的 11 值。
但是当我尝试调用多个月时它不起作用?
df.loc[1:2]["Date"].month
AttributeError: 'Series' object has no attribute 'month'
Run Code Online (Sandbox Code Playgroud) 运行下面的单元格19和23中的代码以导入和预处理数据.
https://github.com/ageron/handson-ml/blob/master/09_up_and_running_with_tensorflow.ipynb
然后运行第59-64行以解决线性最小二乘问题,同时保存用于张量板的训练数据.
然后我使用Anaconda提示符进入保存日志文件的目录:
然后我使用Anaconda提示运行:tensorboard --logdir =\tf_logs
它在http:// NW1:6006给出了消息Starting TensorBoard b'54'
但是当我尝试将该地址粘贴到浏览器中时它不起作用?
我尝试过各种绝对路径名称等组合,但似乎没什么用.我也尝试将主机指定为127.0.0.1
tensorboard --logdir =\tf_logs --host = 127.0.0.1
但似乎没有任何作用!网页完全空白.
我正在运行Windows 8.1
Internet Explorer 11
Anaconda 3
Python3.5
Tensorflow 1.1
今天一切都安装得很新,所以应该是最新的
matlab ×4
python ×3
python-3.x ×2
r ×2
rstudio ×2
amazon-ec2 ×1
cloud ×1
datetime ×1
matrix ×1
octave ×1
pandas ×1
spyder ×1
tensorboard ×1
tensorflow ×1
timestamp ×1
utf-8 ×1