Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作
%测试数据 'ex1data1.txt', 第一列为 population of City in 10,000s, 第二列为 Profit in $10,000s
1 6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705
%绘制实际数据图像——人口和利润的关系图
fprintf('Plotting Data ...\n')
data = load('ex1data1.txt');
X = data(:, ); y = data(:, );
m = length(y); % number of training examples % Plot Data
% Note: You have to complete the code in plotData.m
plotData(X, y); fprintf('Program paused. Press enter to continue.\n');
pause;
%plotData()函数实现
function plotData(x, y) figure; % open a new figure window
plot(x, y, 'rx', 'MarkerSize', ); %Set the size of Points('MarkerSize', )
ylabel('profit in $10,1000s');
xlabel('population of City in 10,000s'); end
%% =================== Part : Gradient descent
fprintf('Running Gradient Descent ...\n') X = [ones(m, ), data(:,)]; % Add a column of ones to x theta = zeros(, ); % initialize fitting parameters % Some gradient descent settings
iterations = ; %迭代次数
alpha = 0.01; %learning rate % compute and display initial cost
computeCost(X, y, theta) %y是真实的值
% Compute Cost for linear regression
% cost Function函数实现___利用矩阵操作进行!!
function J = computeCost(X, y, theta) % Initialize some useful values
m = length(y); % number of training examples
J = ; % Instructions: Compute the cost of a particular choice of theta
% You should set J to the cost. % X = [ ones(m, ), data(:, ) ], theta = [ th1; th2]
predictions = X * theta; %矩阵操作--预测函数
sqrError = (predictions - y).^;
J = sum(sqrError) / (*m); end
%运行梯度下降算法
% run gradient descent theta = gradientDescent(X, y, theta, alpha, iterations); % print theta to screen
fprintf('Theta found by gradient descent: ');
fprintf('%f %f \n', theta(), theta());
1 %梯度下降算法实现 gradientDescent(X, y, theta, alpha, iterations)
%X-training example,y-实际数值,alpha-learning rate
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
% theta = GRADIENTDESENT(X, y, theta, alpha, num_iters) updates theta by
% taking num_iters gradient steps with learning rate alpha % Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, ); for iter = :num_iters
predictions = X * theta; %预测值h(xi)--利用了矩阵运算
sqrError = (predictions - y); %预测值 - 实际值 % Simultaneously update(同时更新thetaj) thetaj for all j.
% alpha - learning rate, '.*'---是内积(矩阵对应元素相乘)
theta1 = theta() - alpha * (/m) * sum(sqrError .* X(:,));
theta2 = theta() - alpha * (/m) * sum(sqrError .* X(:,));
theta() = theta1;
theta() = theta2; % Save the cost J in every iteration
J_history(iter) = computeCost(X, y, theta); %disp(J_history); %增加输出语句,方便调试 end end
1 %绘制拟合曲线
% Plot the linear fit
hold on; % keep previous plot visible
plot(X(:,), X*theta, '-')
legend('Training data', 'Linear regression') %添加图例
hold off % don't overlay any more plots on this figure
1 % Predict values for population sizes of 35,000 and 70,000
2 %利用求出的拟合参数--预测新值,利用矩阵运算
predict1 = [, 3.5] *theta;
fprintf('For population = 35,000, we predict a profit of %f\n',...
predict1*); predict2 = [, ] * theta;
fprintf('For population = 70,000, we predict a profit of %f\n',...
predict2*); fprintf('Program paused. Press enter to continue.\n');
pause;
1 %计算不同 theta参数下, J(θ)值的变化, 绘制图像
2 %% ============= Part 4: Visualizing J(theta_0, theta_1) ============= fprintf('Visualizing J(theta_0, theta_1) ...\n') % Grid over which we will calculate J
%linspace(x, y, n)--在(x,y)区间内均匀生成n个数
theta0_vals = linspace(-, , );
theta1_vals = linspace(-, , ); % initialize J_vals to a matrix of 's
J_vals = zeros(length(theta0_vals), length(theta1_vals)); % Fill out J_vals
for i = :length(theta0_vals)
for j = :length(theta1_vals)
t = [theta0_vals(i); theta1_vals(j)];
J_vals(i,j) = computeCost(X, y, t);
end
end % Because of the way meshgrids work in the surf command, we need to
% transpose J_vals before calling surf, or else the axes will be flipped J_vals = J_vals';
% Surface plot
figure; %surf(X,Y,Z)--creates the surface plot from corresponding(对应值) value in X, Y,Z (default: color is proportional(成正比) to surface height.) surf(theta0_vals, theta1_vals, J_vals)
xlabel('\theta_0'); ylabel('\theta_1');
% Contour plot----轮廓图的绘制
figure; % Plot J_vals as contours spaced logarithmically between 0.01 and contour(theta0_vals, theta1_vals, J_vals, logspace(-, , ))
xlabel('\theta_0'); ylabel('\theta_1');
hold on;
plot(theta(), theta(), 'rx', 'MarkerSize', , 'LineWidth', );
绘图效果如上。
Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作的更多相关文章
- Ng第二课:单变量线性回归(Linear Regression with One Variable)
二.单变量线性回归(Linear Regression with One Variable) 2.1 模型表示 2.2 代价函数 2.3 代价函数的直观理解 2.4 梯度下降 2.5 梯度下 ...
- 斯坦福第二课:单变量线性回归(Linear Regression with One Variable)
二.单变量线性回归(Linear Regression with One Variable) 2.1 模型表示 2.2 代价函数 2.3 代价函数的直观理解 I 2.4 代价函数的直观理解 I ...
- 机器学习 (一) 单变量线性回归 Linear Regression with One Variable
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang的个人笔 ...
- Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable
原文:http://blog.csdn.net/abcjennifer/article/details/7700772 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
- Stanford机器学习---第一讲. Linear Regression with one variable
原文:http://blog.csdn.net/abcjennifer/article/details/7691571 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
- Machine Learning 学习笔记2 - linear regression with one variable(单变量线性回归)
一.Model representation(模型表示) 1.1 训练集 由训练样例(training example)组成的集合就是训练集(training set), 如下图所示, 其中(x,y) ...
- 【cs229-Lecture2】Linear Regression with One Variable (Week 1)(含测试数据和源码)
从Ⅱ到Ⅳ都在讲的是线性回归,其中第Ⅱ章讲得是简单线性回归(simple linear regression, SLR)(单变量),第Ⅲ章讲的是线代基础,第Ⅳ章讲的是多元回归(大于一个自变量). 本文的 ...
- MachineLearning ---- lesson 2 Linear Regression with One Variable
Linear Regression with One Variable model Representation 以上篇博文中的房价预测为例,从图中依次来看,m表示训练集的大小,此处即房价样本数量:x ...
- [Machine Learning] 单变量线性回归(Linear Regression with One Variable) - 线性回归-代价函数-梯度下降法-学习率
单变量线性回归(Linear Regression with One Variable) 什么是线性回归?线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方 ...
随机推荐
- 【C语言入门教程】4.7 指针的地址分配 - mallocl(), free()
指针变量可指向任何类型的变量,在处理过程中,指针变量指向的变量通过传递变量的地址来实现,指针变量的取值是内存的地址,这个地址应当是安全的,不可以是随意的.否则,写入内存单元的值将使得已存放的数据或程序 ...
- jQuery中添加自定义或函数方法
<script type="text/javascript"> (function () { $.fn.parHy = function (val) { alert(v ...
- lvs部署-DR模式
DR模式 角色 IP地址 备注 LVS负载均衡器 192.168.119.132 VIP:192.168.119.150 ipvsadm http_Real server 192.168.119 ...
- Effective Java 读书笔记之六 方法
一.检查参数的有效性 1.考虑参数有哪些限制,把限制写到文档中,在方法的开头处通过显式地检查来实施这些限制. 二.必要时进行保护性拷贝 1.如果类具有从客户端得到或者返回的可变组件,类就必须考虑保护性 ...
- HDU 5014 Number Sequence(位运算)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014 解题报告:西安网赛的题,当时想到一半,只想到从大的开始匹配,做异或运算得到对应的b[i],但是少 ...
- C++ 零碎知识点
C++的一些知识点比较零碎,下面清单的形式做一些记录与归纳,以供参考. 1.赋值操作符重载(深复制): (1)由于目标对象可能引用了以前的一些数据,所以应该先delete这些数据: (2)注意到对象可 ...
- MATLAB命令大全
一.常用对象操作:除了一般windows窗口的常用功能键外.1.!dir 可以查看当前工作目录的文件. !dir& 可以在dos状态下查看.2.who 可以查看当前工作空间变量名, whos ...
- 剑指Offer 找出字符串中第一个只出现一次的字符
题目描述 找出字符串中第一个只出现一次的字符 如果无此字符 请输出'.' 输入描述: 输入一串字符,由小写字母组成 输出描述: 输出一个字符 输入例子: asdfasdfo 输出例子: o 思路:数组 ...
- spring 部分配置内容备忘
1.spring定时器简单配置: <bean name="taskJob" class="com.netcloud.mail.util.TaskJob"& ...
- php中发送email
一.使用PHP内置的mail()函数 看了一下手册,就直接开始写代码了,如下 <?php $to = "test@163.com"; //收件人 $subject = &qu ...