UFLDL 教程学习笔记(二)
课程链接:http://ufldl.stanford.edu/tutorial/supervised/LogisticRegression/
这一节主要讲的是梯度的概念,在实验部分,比较之前的线性回归的梯度与通过定义来计算的梯度,统计二者之间的误差。
线性回归得到的是一个连续值,有时我们想得到0或者1这样的预测值,这就要用到logistic regression。因为要得到的是概率值,
之前的表示函数显然已经不合适了,这时需要用到新的函数来表示:
我们的目标就是对theta做优化,当x属于1时,概率值为1的概率越大越好,反之越小越好。
目标函数当然也得用新的啦(关于这个函数,可参考台大的机器学习基石:http://beader.me/mlnotebook/section3/logistic-regression.html):
作业部分就是训练识别手写0和1,需要注意的仍然是要分清各个变量的维数。跑了下训练准确率和
测试准确率都是100%
参考:http://blog.csdn.net/lingerlanlan/article/details/38390955
代码我加了点注释:
第一段代码改自ex1a_linreg.m,主要就是为了得到训练数据和测试数据,以及它们的标签。
%
%This exercise uses a data from the UCI repository:
% Bache, K. & Lichman, M. (2013). UCI Machine Learning Repository
% http://archive.ics.uci.edu/ml
% Irvine, CA: University of California, School of Information and Computer Science.
%
%Data created by:
% Harrison, D. and Rubinfeld, D.L.
% ''Hedonic prices and the demand for clean air''
% J. Environ. Economics & Management, vol.5, 81-102, 1978.
%
addpath ../common
addpath ../common/minFunc_2012/minFunc
addpath ../common/minFunc_2012/minFunc/compiled % Load housing data from file.
data = load('housing.data');
data=data'; % put examples in columns % Include a row of 1s as an additional intercept feature.
data = [ ones(1,size(data,2)); data ]; % Shuffle examples.
data = data(:, randperm(size(data,2)));%返回data的一列数据 % Split into train and test sets取得训练数据和测试数据,并取得相应的标签
% The last row of 'data' is the median home price.
train.X = data(1:end-1,1:400);
train.y = data(end,1:400); test.X = data(1:end-1,401:end);
test.y = data(end,401:end); m=size(train.X,2);
n=size(train.X,1); % Initialize the coefficient vector theta to random values.
theta = rand(n,1);%产生n行1列的在0到1之间的数字 % Run the minFunc optimizer with linear_regression.m as the objective.
%
% TODO: Implement the linear regression objective and gradient computations
% in linear_regression.m
%
tic;
% options = struct('MaxIter', 200);
% theta = minFunc(@linear_regression, theta, options, train.X, train.y);
% fprintf('Optimization took %f seconds.\n', toc); grad_check(@linear_regression,theta,200,train.X,train.y)
第二段代码是grad_check.m函数
function average_error = grad_check(fun, theta0, num_checks, varargin) delta=1e-3;
sum_error=0; fprintf(' Iter i err');
fprintf(' g_est g f\n') for i=1:num_checks
T = theta0;
j = randsample(numel(T),1);%从1~numel(T)中随机返回一个数
T0=T; T0(j) = T0(j)-delta;
T1=T; T1(j) = T1(j)+delta; [f,g] = fun(T, varargin{:});%T为目标函数,varargin为目标函数梯度
f0 = fun(T0, varargin{:});
f1 = fun(T1, varargin{:}); g_est = (f1-f0) / (2*delta);
error = abs(g(j) - g_est); fprintf('% 5d % 6d % 15g % 15f % 15f % 15f\n', ...
i,j,error,g(j),g_est,f); sum_error = sum_error + error;
end average=sum_error/num_checks;
UFLDL 教程学习笔记(二)的更多相关文章
- UFLDL 教程学习笔记(二)反向传导算法
UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...
- UFLDL 教程学习笔记(四)主成分分析
UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...
- UFLDL 教程学习笔记(三)自编码与稀疏性
UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...
- UFLDL 教程学习笔记(一)神经网络
UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...
- UFLDL 教程学习笔记(三)
教程地址:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/ logstic regression是二分类的问题,如果想要 ...
- UFLDL 教程学习笔记(四)
课程地址:http://ufldl.stanford.edu/tutorial/supervised/FeatureExtractionUsingConvolution/ 在之前的练习中,图片比较小, ...
- UFLDL 教程学习笔记(六)主成分分析
教程:http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/ 以及这篇博文,写的很清楚:http://blog. ...
- UFLDL 教程学习笔记(一)
ufdl的新教程,从基础学起.第一节讲的是线性回归.主要目的是熟悉目标函数,计算梯度和优化. 按着教程写完代码后,总是编译出错,一查是mex的原因,实在不想整了. 这位博主用的是向量,比较简洁:htt ...
- jfinal框架教程-学习笔记(二)
上一节介绍了jfinal框架的简单搭建,这节通过一个小例子了解jfinal的结构和特点 先上图 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table crea ...
随机推荐
- Apache Commons IO之FileUtils的常用方法
Apache Commons IO 在学习io流的时候研究(翻译)了一下这个,只有FileUtils的某些方法,并不全面,还请谅解 org.apache.commons.io 这个包下定义了基于 st ...
- 【纪中集训2019.3.11】Cubelia
题目: 描述 给出长度为\(n\)的数组\(a\)和\(q\)个询问\(l,r\). 求区间\([l,r]\)的所有子区间的前缀和的最大值之和: 范围: $n \le 2 \times 10^5 , ...
- BTC钱包对接流程
BTC钱包对接流程: 部署钱包节点 分析钱包的API 通过JSON-RPC访问钱包API 部署测试 1.部署钱包节点 虚拟币交易平台对接所有的虚拟币之前,都要在自己的服务器上部署一个钱包节点,首先要找 ...
- C++析构函数的自动调用(用于父类指针指向子类对象,内存泄漏问题)
class A {public:A() { printf("A \n"); }~A() { printf(" ~A \n"); } // 这里不管写不写virt ...
- shopt
本文出自 “Mr_Computer” 博客,请务必保留此出处 Bash Shell有个extglob选项,开启之后Shell可以另外识别出5个模式匹配操作符,能使文件匹配更加方便. 开启方法很简单,使 ...
- Python3 笨方法 练习41(面向对象)详解及运行结果
#无尽模式训练你,检验所掌握的面向对象的单词和短语. import random from urllib.request import urlopen import sys WORD_URL = &q ...
- python的map函数的使用方法详解以及使用案例(处理每个元素的自增、自减、平方等)
1.用我们之前学过的求一下平方(只有一个列表) #求平方 num=[1,5,6,2,7,8] a=[] for n in num: a.append(n**2) print (a) C:\python ...
- Hadoop基础-HDFS的读取与写入过程
Hadoop基础-HDFS的读取与写入过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了了解客户端及与之交互的HDFS,NameNode和DataNode之间的数据流是什么样 ...
- 基于索引的MySQL优化
今天查看MySQL慢查询日志,查看一个四表关联的SQL操作,耗时1006s.这次也是基于基于子查询的思路,对上表进行优化.使时间复杂度降到n^2级别.但优化之后时间反而是原来的三倍多. 原SQL语句: ...
- 批量打回未报bug修复
半天写完了代码,从此开始了三天的bug修复... 问题背景:从合同系统那边获取数据. 1.开发完后,利用mock模拟合同数据,获取(mock中的合同)数据成功,但是在解析合同数据时出错,原因,mock ...