#01 Linear Regression Excise

最近一直在看deep learning相关的论文.

虽然从06年到12年的重要论文都扫了一遍, 真的自己干起来还真不知道怎么入手.

总之先从基本开始吧.顺带整理成博客.

另外除了06年开山的两篇论文, 02年还有一篇"自然语言的概率模型"这十分重要的论文,

在搞定了目前基本的deep learning方法后我会实现这些东西, 然后重复12年ng小组的工作.


不过...

想一口就搞定没那么容易, 所以还是慢慢来. 好在大部分都很简单. 教程采用Ng的wiki, 这次是这个

http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex2/ex2.html


提一句, ng全部都用的matlab, 但我不怎么喜欢, 我也不确定matlab能不能用mpi.

因此我会用d语言完成.


首先是最简单的Linear Regression. 用gradient descent来拟合. 很简单, 我们迅速完成它


import std.stdio, std.math, std.conv, std.random, std.string;

class fit{
	float a,b;
	float alpha = 0.07;
	float m;

	float h(float x){
		return a*x+b;
	}

	void update(float x, float y){
		auto y1 = h(x);
		a -= alpha*(y1-y)*x/m;
		b -= alpha*(y1-y)/m;
	}

	this(float m){
		a = uniform(-1,1);
		b = uniform(-1,1);
		this.m = m;
	}
}

int main(){
	float[] x,y;
	foreach(l;File("ex2x.dat").byLine){
		x ~= to!float(strip(cast(string)l));
	}
	foreach(l;File("ex2y.dat").byLine){
		y ~= to!float(strip(cast(string)l));
	}
	auto f = new fit(x.length);
	foreach(k;0..1500){
		foreach(i,v;x){
			f.update(v,y[i]);
		}
		float j=0;
		foreach(i,v;x){
			j += (f.h(v)-y[i])^^2;
		}
		writeln(f.a,"\t", f.b, "\t", j);
	}
	return 0;
}

最后接近收敛时的数据

0.0636027	0.750624	0.0987597
0.0636027	0.750624	0.0987597
0.0636026	0.750624	0.0987597
0.0636026	0.750625	0.0987597
0.0636026	0.750625	0.0987597


用GNUplot画出来




顺带提一句, 自己画图时记得set xrange, 否则会偶尔崩溃.. gnuplot也没那么靠谱, 不过比mac自带的画图方便


补一张J方图


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值