吴恩达机器学习编程作业python版:第一次作业
程序员文章站
2022-07-13 08:52:11
...
我正在努力用python实现吴恩达的机器学习编程作业。由于时间关系,我大概会只实现最重要的部分,不会实现全部内容。如果有错误,希望可以及时纠正我,谢谢大家。
第一次作业:单变量线性回归
首先,导入要用到的库:numpy,matplotlib。
import numpy as np
import matplotlib.pyplot as plt
接下来,导入作业里的数据文件:ex1data1.txt。导入文件之后,做相应处理,分为向量x和y。
file='/Users/christine/Desktop/吴恩达作业/ex1data1.txt';
digits=np.loadtxt(file,delimiter=',')
x=digits[:,0];
y=digits[:,1];
获取x向量的行数,也就是数据的组数。
m=x.shape[0];
接下来给x向量的前面添加一列全为1的列,这是因为我们最终求出来的用于拟合的直线有两个参数,类似y=k*x+b的形式,所以可以看作y=k*x1+b*x2,其中x2=1。
temp=np.ones((m),dtype='float');
x=np.vstack((temp,x));
x=x.T;
定义以下参数:
theta:二维向量,其中的两个分量表示直线的两个参数(即k和b),不过在吴恩达的教程里,是用theta表示的,那我也定义成theta好了。
alpha:学习率,在作业本中吴恩达已经给我们选好了,是0.01。
iterations:迭代次数,这个也给我们设定好了。
h:和x维度相同的向量,表示用当前参数求出的y的估计值。
注意一点的是,theta不要初始化为int类型数组,否则将无法得到正确答案。
theta=np.array([0.0,0.0]);
alpha=0.01;
iterations=1500;
h=np.zeros(m);
接下来是迭代的过程。在我这里出现了一个问题,就是我每次输出损失函数的值的时候,都大约是在4.8左右,但是吴恩达的作业里写,最终会得到一个32.07的值,我目前还不太清楚我的错误的地方。但是我的程序也可以拟合出看起来正确的图像,我也暂时不追究了,希望看到这里的读者能帮帮我TAT
for i in range(1,iterations):
h=x.dot(theta);
for k in range(0,2):
sum=0;
for j in range(0,m):
sum+=(h[j]-y[j])*x[j,k];
theta[k]=theta[k]-alpha*sum/m;
J=0;
for j in range(0,m):
J=J+(h[j]-y[j])*(h[j]-y[j]);
J=J/(2*m);
print(J);
然后寻找两个点,求出这两个点在拟合出的直线上的函数值。
x0=5;y0=theta[0]+x0*theta[1];
x1=24;y1=theta[0]+x1*theta[1];
最后画出函数图像,大功告成。由于时间原因,关于J的函数图像我就先不画了。
plt.xlabel('Population of City in 10000s');
plt.ylabel('Profit in $10000s');
plt.plot((x0,x1),(y0,y1));
plt.plot(digits[:,0],y,"ob");
推荐阅读
-
【吴恩达深度学习编程作业问题汇总】4.3目标检测——车辆识别
-
Coursera吴恩达机器学习课程 第2周作业代码
-
吴恩达 机器学习课程 coursera 第一次编程作业(Linear Regression Multi) python实现
-
吴恩达机器学习编程作业python版:第一次作业
-
吴恩达 机器学习课程 coursera 第二次编程作业(Logistic Regression Regularized) python实现
-
吴恩达老师机器学习第一次作业:梯度下降【python实现】
-
吴恩达 机器学习课程 coursera 第四次编程作业(Neural Network Back Propagation) python实现
-
吴恩达 机器学习课程 coursera 第三次编程作业(Neural Network) python实现
-
机器学习——吴恩达 ——编程作业ex1——python
-
吴恩达机器学习课后作业ex1