Machine Learning Introduction

机器学习

介绍

在本练习中,您将实现线性回归并看到它的工作原理
在数据上。在开始进行此编程练习之前,我们强烈建议您观看视频讲座并完成有关的复习问题。

要开始练习,您需要下载入门
代码并将其内容解压缩到您希望完成的目录
行使。如果需要,请使用Octave / MATLAB中的cd命令更改为
在开始本练习之前,请先使用此目录。
您也可以在课程网站的“环境设置说明”中找到有关安装Octave / MATLAB的说明。

[?] warmUpExercise.m-Octave / MATLAB中的简单示例函数
[?] plotData.m-显示数据集的函数
[?] computeCost.m-计算线性回归成本的函数
[?] gradientDescent.m-运行梯度下降的函数
[†] computeCostMulti.m-多个变量的成本函数
[†] gradientDescentMulti.m-多个变量的梯度下降
[†] featureNormalize.m-标准化特征的函数
[†] normalEqn.m-计算法线方程的函数

在整个练习中,您将使用脚本ex1.m和ex1 multi.m。
这些脚本为问题设置数据集并调用函数
你会写的。您不需要修改它们中的任何一个。你只是
需要遵循以下说明修改其他文件中的功能
这项作业。
对于此编程练习,只需要完成第一个
练习的一部分,以一个变量实现线性回归。的
练习的第二部分是可选的,涵盖了线性回归
多个变量。
在哪里获得帮助
本课程中的练习使用Octave1或MATLAB,这是一种非常适合于数值计算的高级编程语言。如果你没有
已安装Octave或MATLAB,请参阅中的安装说明
课程网站的“环境设置说明”。
在Octave / MATLAB命令行中,键入help,然后输入函数名称,将显示内置函数的文档。例如,帮助
绘图将显示用于绘图的帮助信息。有关的更多文档
八度功能可以在八度文档页面中找到。 MAT?LAB文档可在MATLAB文档页面上找到。
我们也强烈建议您使用在线讨论与其他学生讨论练习。但是,不要看任何编写的源代码
或与他人共享您的源代码。

1个简单的Octave / MATLAB功能
ex1.m的第一部分为您提供Octave / MATLAB语法和
作业提交过程。相关文件将
找到八度/ MATLAB函数的轮廓。修改它以返回5 x
通过填写以下代码5个身份矩阵:
A =眼睛(5);
1Octave是MATLAB的免费替代品。您可以自由进行编程练习
使用Octave或MATLAB。

完成后,运行ex1.m(假设您位于正确的目录中,在Octave / MATLAB提示符下键入“ ex1”),您应该看到
输出类似于以下内容:
回答=
对角矩阵
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
现在ex1.m将暂停,直到您按任意键,然后运行代码
在下一部分作业中。如果您想退出,请输入ctrl-c
在运行过程中停止该程序。
1.1提交解决方案
完成一部分练习后,您可以提交解决方案
通过在Octave / MATLAB命令行中输入Submit进行评分。提交脚本将提示您输入登录电子邮件和提交令牌
并询问您要提交的文件。您可以获取提交
网页中用于分配的令牌。
现在,您应该提交解决方案。
您可以多次提交解决方案,我们将采取
仅考虑最高分。

2具有一个变量的线性回归
在本练习的这一部分中,您将使用
变量以预测餐车的利润。假设您是某公司的首席执行官
餐厅专营权,并正在考虑不同城市开设新餐厅
出口。该连锁店在各个城市已经有卡车,并且您有关于
城市的利润和人口。

您想使用此数据来帮助您选择要扩展的城市
到下一个。
第一列是城市人口
训练数据分散点图

ex1.m

%% Machine Learning Online Class - Exercise 1: Linear Regression

%  Instructions
%  ------------
% 
%  This file contains code that helps you get started on the
%  linear exercise. You will need to complete the following functions 
%  in this exericse:
%
%     warmUpExercise.m
%     plotData.m
%     gradientDescent.m
%     computeCost.m
%     gradientDescentMulti.m
%     computeCostMulti.m
%     featureNormalize.m
%     normalEqn.m
%
%  For this exercise, you will not need to change any code in this file,
%  or any other files other than those mentioned above.
%
% x refers to the population size in 10,000s
% y refers to the profit in $10,000s
%

%% Initialization
clear ; close all; clc

%% ==================== Part 1: Basic Function ====================
% Complete warmUpExercise.m 
fprintf('Running warmUpExercise ... \n');
fprintf('5x5 Identity Matrix: \n');
warmUpExercise()

fprintf('Program paused. Press enter to continue.\n');
pause;


%% ======================= Part 2: Plotting =======================
fprintf('Plotting Data ...\n')
data = load('ex1data1.txt');
X = data(:, 1); y = data(:, 2);
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;

%% =================== Part 3: Gradient descent ===================
fprintf('Running Gradient Descent ...\n')

X = [ones(m, 1), data(:,1)]; % Add a column of ones to x
theta = zeros(2, 1); % initialize fitting parameters

% Some gradient descent settings
iterations = 1500;
alpha = 0.01;

% compute and display initial cost
computeCost(X, y, theta)

% 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(1), theta(2));

% Plot the linear fit
hold on; % keep previous plot visible
plot(X(:,2), X*theta, '-')
legend('Training data', 'Linear regression')
hold off % don't overlay any more plots on this figure

% Predict values for population sizes of 35,000 and 70,000
predict1 = [1, 3.5] *theta;
fprintf('For population = 35,000, we predict a profit of %f\n',...
    predict1*10000);
predict2 = [1, 7] * theta;
fprintf('For population = 70,000, we predict a profit of %f\n',...
    predict2*10000);

fprintf('Program paused. Press enter to continue.\n');
pause;

%% ============= Part 4: Visualizing J(theta_0, theta_1) =============
fprintf('Visualizing J(theta_0, theta_1) ...\n')

% Grid over which we will calculate J
theta0_vals = linspace(-10, 10, 100);
theta1_vals = linspace(-1, 4, 100);

% initialize J_vals to a matrix of 0's
J_vals = zeros(length(theta0_vals), length(theta1_vals));

% Fill out J_vals
for i = 1:length(theta0_vals)
    for j = 1: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(theta0_vals, theta1_vals, J_vals)
xlabel('\theta_0'); ylabel('\theta_1');

% Contour plot
figure;
% Plot J_vals as 15 contours spaced logarithmically between 0.01 and 100
contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 3, 20))
xlabel('\theta_0'); ylabel('\theta_1');
hold on;
plot(theta(1), theta(2), 'rx', 'MarkerSize', 10, 'LineWidth', 2);

ex1_multi.m

%% Machine Learning Online Class
% Exercise 1: Linear regression with multiple variables
%
% Instructions
% ------------
%
% This file contains code that helps you get started on the
% linear regression exercise.
%
% You will need to complete the following functions in this
% exericse:
%
% warmUpExercise.m
% plotData.m
% gradientDescent.m
% computeCost.m
% gradientDescentMulti.m
% computeCostMulti.m
% featureNormalize.m
% normalEqn.m
%
% For this part of the exercise, you will need to change some
% parts of the code below for various experiments (e.g., changing
% learning rates).
%

%% Initialization

%% ================ Part 1: Feature Normalization ================

%% Clear and Close Figures
clear ; close all; clc

fprintf(‘Loading data …\n’);

%% Load Data
data = load(‘ex1data2.txt’);
X = data(:, 1:2);
y = data(:, 3);
m = length(y);

% Print out some data points
fprintf(‘First 10 examples from the dataset: \n’);
fprintf(’ x = [%.0f %.0f], y = %.0f \n’, [X(1:10,:) y(1:10,:)]’);

fprintf(‘Program paused. Press enter to continue.\n’);
pause;

% Scale features and set them to zero mean
fprintf(‘Normalizing Features …\n’);

[X mu sigma] = featureNormalize(X); % 均值0,标准差1

% Add intercept term to X
X = [ones(m, 1) X];

%% ================ Part 2: Gradient Descent ================

% ====================== YOUR CODE HERE ======================
% Instructions: We have provided you with the following starter
% code that runs gradient descent with a particular
% learning rate (alpha).
%
% Your task is to first make sure that your functions -
% computeCost and gradientDescent already work with
% this starter code and support multiple variables.
%
% After that, try running gradient descent with
% different values of alpha and see which one gives
% you the best result.
%
% Finally, you should complete the code at the end
% to predict the price of a 1650 sq-ft, 3 br house.
%
% Hint: By using the ‘hold on’ command, you can plot multiple
% graphs on the same figure.
%
% Hint: At prediction, make sure you do the same feature normalization.
%

fprintf(‘Running gradient descent …\n’);

% Choose some alpha value
alpha = 0.01;
num_iters = 8500;

% Init Theta and Run Gradient Descent
theta = zeros(3, 1);
[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters);

% Plot the convergence graph
figure;
plot(1:numel(J_history), J_history, ‘-b’, ‘LineWidth’, 2);
xlabel(‘Number of iterations’);
ylabel(‘Cost J’);

% Display gradient descent’s result
fprintf(‘Theta computed from gradient descent: \n’);
fprintf(’ %f \n’, theta);
fprintf(’\n’);

% Estimate the price of a 1650 sq-ft, 3 br house
% ====================== YOUR CODE HERE ======================
% Recall that the first column of X is all-ones. Thus, it does
% not need to be normalized.
price = [1 (([1650 3]-mu) ./ sigma)] * theta ;
% ============================================================

fprintf(['Predicted price of a 1650 sq-ft, 3 br house ’ …
‘(using gradient descent):\n $%f\n’], price);

fprintf(‘Program paused. Press enter to continue.\n’);
pause;

%% ================ Part 3: Normal Equations ================

fprintf(‘Solving with normal equations…\n’);

% ====================== YOUR CODE HERE ======================
% Instructions: The following code computes the closed form
% solution for linear regression using the normal
% equations. You should complete the code in
% normalEqn.m
%
% After doing so, you should complete this code
% to predict the price of a 1650 sq-ft, 3 br house.
%

%% Load Data
data = csvread(‘ex1data2.txt’);
X = data(:, 1:2);
y = data(:, 3);
m = length(y);

% Add intercept term to X
X = [ones(m, 1) X];

% Calculate the parameters from the normal equation
theta = normalEqn(X, y);

% Display normal equation’s result
fprintf(‘Theta computed from the normal equations: \n’);
fprintf(’ %f \n’, theta);
fprintf(’\n’);

% Estimate the price of a 1650 sq-ft, 3 br house
% ====================== YOUR CODE HERE ======================
price = [1 1650 3] * theta ;

% ============================================================

fprintf(['Predicted price of a 1650 sq-ft, 3 br house ’ …
‘(using normal equations):\n $%f\n’], price);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值