data = load('D:/ex1data1.txt'); % 加载数据
X = data(:, 1); % 该数据只有有两列,第一列是一个城市的人口
y = data(:, 2); % 第二列是那个城市的食品运输车的利润
plot(X,y,"rx",'MarkerSize',10); % 绘制图像
xlabel('Population of City in 10,000s'); % 设置横纵坐标标签
ylabel('Profit in $10,000s');
此处使用的是batch gradient descent algorithm
% 代价函数部分
m = length(y);
X = [ones(m, 1), data(:,1)]; % 把theta_0也当做一个特征,使X_0取值为1,方便矩阵运算
theta = zeros(2, 1); % 初始化
iterations = 1500;
alpha = 0.01;
J = sum((X * theta - y).^2) / (2*m);% 其中.^2是对矩阵中的每个元素求平方,sum()求和
% 梯度下降部分
J_history = zeros(iterations , 1);
for iter = 1:iterations
%注意!θ要同步更新!
theta_1 = theta(1) - alpha * (1/m) * sum(X * theta -y);
theta_2 = theta(2) - alpha * (1/m) * sum((X * theta -y) .* X(:,2));
theta(1) = theta_1;
theta(2) = theta_2;
J_history(iter) = computeCost(X, y, theta);
end
plot函数用来绘制二维图像
plot(X,Y)
plot(X,Y,LineSpec)
plot(X1,Y1,…,Xn,Yn)
plot(X1,Y1,LineSpec1,…,Xn,Yn,LineSpecn)
plot(Y)
plot(Y,LineSpec)
plot(___,Name,Value)
plot(ax,___)
h = plot(___)
线性 | 说明 | 颜色 | 说明 | 标识符 | 说明 |
---|---|---|---|---|---|
- | 实线 | r | 红色 | . | 实心点 |
– | 虚线 | g | 绿色 | + | 十字号 |
: | 虚点线 | b | 蓝色 | * | 星号 |
-. | 点画线 | k | 黑色 | x | 叉字符 |
w | 白色 | o | 空心圆 | ||
y | 黄色 | s | 方块 | ||
c | 青色 | p | 五角星 | ||
m | 品红 | h | 六角星 | ||
d | 菱形 | ||||
^ | 朝上三角 | ||||
v | 朝下三角 | ||||
< | 朝左三角 | ||||
> | 朝右三角 |
名称 | 说明 |
---|---|
LineWidth | 设置线的宽度 |
MarkerSize | 设置标记点的大小 |
MarkerFaceColor | 设置标记点的填充颜色 |
MarkerEdgeColor | 设置标记点的边缘颜色 |
函数 | 说明 |
---|---|
xlabel(’ ') | 标注x轴名称 |
ylabel(’ ') | 标注y轴名称 |
title(’ ') | 标注图形标题 |
legend(’ ',‘ ’) | 标注线\点标注 |
grid on | 增加图形网格 |
grid off | 取消图形网格 |
s=size(A); 返回一个行向量s,s的第一个元素是矩阵的行数,第二个元素是矩阵的列数
size(X,1); 返回矩阵X的行数;
size(X,2); 返回矩阵X的列数;
sqrt(9); 开平方
nthroot(x,n); x开n次方
hold on:已在当前坐标轴中画了一幅图,再画另一幅图时,原来的图还在,与新图共存
hold off:在轴上绘制的是新图,原来的图看不到了
linspace(-10, 10, 100); 生成将区间[-10,10]等分100份的1100的矩阵
logspace(-2, 3, 20); 生成将区间 [ 1 0 − 2 , 1 0 3 ] [10^{-2},10^3] [10−2,103]等分20份的120矩阵
1)M = mean(A)
如果A是一个向量,mean(A)返回A中元素的平均值。
如果A是一个矩阵,mean(A)将其中的各列视为向量,就把矩阵中的每列看成一个向量,返回一个包含每一列所有元素的平均值的行向量。
2)M = mean(A,dim)
返回A中沿着标量dim指定的维数上的元素的平均值。
mean(A,2)就是包含每一行的平均值的列向量。
std(x,flag,dim)
flag为0是除以n-1(默认),flag为1是除以n。
dim为1是按照列分,dim为2是按照行分。
用于计算数组中满足指定条件的元素个数。
n = numel(A); 返回数组A中元素个数。
n = numel(A, index1, index2, … indexn); 其中indexi可以是切片运算、算术表达式、逻辑表达式等。
eg:numel(A, 1:2, 2:4); 相当于numel(A(1:2, 2:4));