【Machine Learning 作业】第八周ex7&第九周ex8

ex7

Unsupervised Learning

findClosestCentroids.m

这里又用上了repmat大法。毕竟初识数据结构之后,总想让时间复杂度最低,因此在想各种方式去减少。问题是matlab一个大问题就是不开源,因此各个函数的底层是未知的。比如自己编一个代码在C上跑和matlab用函数跑,往往是matlab更慢。但matlab就胜于自己的矩阵运算以及高度集成化,简单还易上手。走偏了,走偏了。。。

for i=1:size(X,1)
  dis=repmat(X(i,:),K,1);
  dissquare=0;
  for j=1:size(X,2)
  dissquare=dissquare+(centroids(:,j)-dis(:,j)).^2;
  end
  [~,idx(i)] = min(dissquare,[],1);
end

computeCentroids.m

也是想了好多次写出来的代码,也还算简单(但并不知道复杂度如何。)

for i=1:K
  x_k=find(idx==i);
  centroids(i,:)=mean(X(x_k,:));
end

pca.m

这个计算sigma和调用函数就是20分?i 了 i 了。

Sigma=1/m*X'*X;
[U,S,V]=svd(Sigma);

projectData.m

U_reduce = U(:,1:K);
Z=X*U_reduce;

ex8

estimateGuassian.m

这个计算很简单。

mu=(1/m*sum(X))';
sigma2=1/m*sum((X-mu').^2);

selectThreshold.m

在寻找最佳阈值的时候试了好多次,总是出错,出错的主要原因是想要尽量减少计算,所以在计算pre_neg的时候会采用pre_neg=size(pval,1)-pre_pos 的方法。但就是这样的想法,导致在tp和fn的时候计算出错(之前没有引入temp这个变量,所以更改了原数组)。用了两个下午的时间,才把这个搞出来。
另外,大家对于TP,TN,FP,FN的记忆有没有什么好的方法?我总是搞混。。。

    [m,~]=find(pval<epsilon);
    temp=zeros(size(pval));
    temp(m)=1;
    pre_pos=sum(temp==1);
    pre_neg=size(pval,1)-pre_pos;
    tp=sum((temp==1)&(yval==1));
    fn=sum((temp==0)&(yval==1));
    fp=pre_pos-tp;
    tn=pre_neg-fn;
    prec=tp/pre_pos;
    rec=tp/(tp+fn);
    F1=2*prec*rec/(prec+rec);

cofiCostFunc.m

最后一个练习被分成了四个部分。但难度不大,可以很快完成

p=X*Theta';
p(find(R==0))=0;
J=1/2*sum(sum((p-Y).^2))+1/2*lambda*sum(sum(Theta.^2))+1/2*lambda*sum(sum(X.^2));
X_grad=(p-Y)*Theta+lambda*X;
Theta_grad=(p-Y)'*X+lambda*Theta;

总结

整个MachineLearning学完了,练习也做完了,拿到了证书!!
在这里插入图片描述

(练习过程中好多时候会卡壳,这个时候就十分感谢度娘和CSDN广大的博客主了。)
但这只是第一步,接下来准备学习李宏毅的深度学习的课程,再学习数据结构,多多加强这方面的知识。我这个小白道阻且长啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值