赞
踩
1、单变量线性回归预测模型
数据操作
data(:,1)返回数据第一列
length (a)
返回对象a的长度。
空对象的长度为0,标量为1,矢量元素的数量。 对于矩阵或N维对象,长度是沿最大维度的元素数量(等于max(size(a)))
zero
系统函数
在开始和结束之间返回具有n个线性间隔元素的行向量。
如果元素的数量大于1,那么端点的开始和结束总是包含在范围内。 如果start大于end,则元素按降序存储。 如果未指定点数,则使用值100。
当起始和结束都是标量时,linspace函数返回一个行向量。 如果其中一个或两个输入是向量,则linspace将它们转换为列向量并返回一个矩阵,其中每行是开始(row_n),结束(row_n)之间的独立序列。
为了与MATLAB兼容,请求只有一个值(n = 1)时返回第二个参数(结束)
返回具有n个元素的行向量,对数地从10 ^ a到10 ^ b间隔开。
如果n未指定,则默认为50。
如果b等于pi,则这些点在10 ^ a和pi之间,而不是10 ^ a和10 ^ pi,以便与相应的MATLAB函数兼容。
同样为了与MATLAB兼容,当请求单个值时,返回范围的右侧(10 ^ b)
可选返回值h是包含轮廓线的hggroup的图形句柄。
绘制三维表面网格。
表面网格使用阴影矩形绘制。矩形[x,y]的顶点通常是meshgrid的输出。在x-y平面中的2-D矩形区域上。 z确定每个顶点平面上方的高度。如果只给出一个z矩阵,则它绘制在网格x = 1:列(z),y = 1:行(z)上。因此,z的列对应于不同的x值,而z的行对应于不同的y值。
通过对z值进行线性缩放以适合当前颜色图的范围来计算曲面的颜色。使用caxis和/或更改颜色表来控制外观。
可选地,可以通过提供颜色矩阵c来独立于z指定表面的颜色。
任何属性/值对都直接传递给底层表面对象。
如果第一个参数hax是一个轴手柄,那么绘制到这个轴上,而不是由gca返回的当前轴。
可选的返回值h是创建的曲面对象的图形句柄。
注意:可以使用阴影命令或使用设置来控制曲面对象属性来控制曲面的确切外观。
如果使用两个或多个标量整数参数或整数值向量调用,则返回具有给定维度的数组。
为绘图创建一个新的数字窗口
自定义函数
computeCost(x,y,theta)代价函数的约束条件,计算代价函数的值
gradientDescent(X, y, theta, alpha, iterations)梯度下降的约束条件,计算theta和梯度下降过程中代价函数J
1、导入数据
data = load('ex1data1.txt');
2、变量赋值
X = data(:, 1); y = data(:, 2);
m = length(y);
3、画散点图
plotData(X, y);
定义plotData(x,y)函数
figure;%打开新的数据
plot(x,y,'rx','MarkerSize',10);%散点图定义
ylabel('Profit in $10,000s');%x轴坐标轴
xlabel('Population of City in 10,000s');%y轴坐标轴
4、梯度下降
X = [ones(m, 1), data(:,1)]; % Add a column of ones to x,矩阵变换,对X变量添加X0项,数值为1
theta = zeros(2, 1); % initialize fitting parameters, θ初始赋值,赋值初始值为0
iterations = 1500;
alpha = 0.01;
J = computeCost(X, y, theta);%定义代价函数computeCost(x,y,theta)
函数定义如下(定义了J函数的约束条件)
m = length(y);
J = 0;
temp = sum((X*theta - y).^2);
J = temp / (2*m);
end
theta = gradientDescent(X, y, theta, alpha, iterations);%梯度下降计算theta
函数定义如下 ,梯度下降
function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
m = length(y)
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
thetaTemp = theta;
for i = 1: size(X,2)
theta(i) = thetaTemp(i)-alpha/m*sum((X*thetaTemp-y).*X(:,i));
end
J_history(iter) = computeCostMulti(X, y, theta);
end
end
hold on; % keep previous plot visible,增加预测回归线
plot(X(:,2), X*theta, '-')
5、预测
predict1 = [1, 3.5] *theta;%定义预测值
fprintf('For population = 35,000, we predict a profit of %f\n',...predict1*10000);%输出预测值
6、画梯度下降过程中theta的下降曲线
定义画图的横坐标和纵坐标的范围
% Grid over which we will calculate J
theta0_vals = linspace(-10, 10, 100);% 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);
2、梯度下降计算多元线性回归
自定义归一化函数[X mu sigma] = featureNormalize(X);
自定义代价函数comupteCostMulti(x,y,theta)
自定义梯度下降函数[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters);
1、导入数据,变量命名
data = load('ex1data2.txt');
X = data(:, 1:2);
y = data(:, 3);
m = length(y);
2、输出前10行数据
fprintf(' x = [%.0f %.0f], y = %.0f \n', [X(1:10,:) y(1:10,:)]');
3、数据归一化
[X mu sigma] = featureNormalize(X);
4、增加x0,初始值为1
X = [ones(m, 1) X];
5、梯度下降赋值初始化,以及梯度下降
alpha = 0.01;
num_iters = 400;
% Init Theta and Run Gradient Descent
theta = zeros(3, 1);
[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters);
梯度下降函数
function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
m = length(y);
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
thetaTemp = theta;
for i = 1: size(X,2)
theta(i) = thetaTemp(i)-alpha/m*sum((X*thetaTemp-y).*X(:,i));
end
J_history(iter) = computeCostMulti(X, y, theta);
end
end
在梯度下降过程中调用了代价函数comupteCostMulti(x,y,theta)函数,函数如下
function J = computeCostMulti(X, y, theta)
m = length(y);
J = 0;
temp = sum((X*theta - y).^2);
J = temp / (2*m);
end
6、输出迭代过程中代价函数变化
figure;
plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);
xlabel('Number of iterations');
ylabel('Cost J');
7、预测变量面积是1650平方英尺的房子,房子有三个卧室的价格
先进行归一化处理,再添加常数1,最后与theta乘积计算预测变量
X1=[1650,3];3、使用正规方程方法计算多元回归
返回x的Moore-Penrose伪逆
自定义normalEqn函数
function [theta] = normalEqn(X, y)
theta = zeros(size(X, 2), 1);
theta=pinv(X'*X)*X'*y
end
1、导入数据,命名变量,X想增加常数项X1=1
data = csvread('ex1data2.txt');
X = data(:, 1:2);
y = data(:, 3);
m = length(y);
% Add intercept term to X
X = [ones(m, 1) X];
2、计算theta
theta = normalEqn(X, y);
3、预测结果
X4=[1 1650 3]
price2=X4*theta
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。