R代码:
my.data <- mtcars[,c(1,3)] # 仅包含两列mpg和disp
lm(mpg~disp,data=my.data) # R代码用于拟合回归线
R输出:
Call: lm(formula = mpg ~ disp, data = my.data)Coefficients: (Intercept) disp 29.59985 -0.04122
将R数据集写入磁盘文件
write.table(my.data,'~/Downloads/mtcars',sep=",",row.name=F,col.names=F)
Octave代码:
cd ~/Downloadsdata=load('mtcars') # 使用R数据集拟合模型x=data(:,2)y=data(:,1) cd ~/Dropbox/ML/mlclass-ex1-004/mlclass-ex1 %无任何错误xn=featureNormalize(x) # 使用均值和标准差进行特征归一化x1=[ones(length(x),1),xn]theta=zeros(size(x1,2),1)g=gradientDescent(x1,y,theta,alpha=.1,10000)
g的输出为:
g =20.0906-5.0277
如果你查看截距和disp的系数,你会发现R的输出和Octave的输出并不接近。
有谁知道这种差异从何而来?哪个是正确的?
回答:
你在Octave代码中对特征进行了归一化。在R中做同样的处理会得到相似的结果。
R> mtcars$normalized_disp <- as.numeric(scale(mtcars$disp))R> lm(mpg ~ normalized_disp, data = mtcars)Call:lm(formula = mpg ~ normalized_disp, data = mtcars)Coefficients: (Intercept) normalized_disp 20.091 -5.108