机器学习1:线性回归作业

1.代码实现–单变量

1.绘制图像
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'); 

机器学习1:线性回归作业_第1张图片

2.代价函数 Cost Function 梯度下降 Gradient Descent

此处使用的是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

机器学习1:线性回归作业_第2张图片

2.Matlab相关知识

1.plot函数

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 取消图形网格
2.size函数

s=size(A); 返回一个行向量s,s的第一个元素是矩阵的行数,第二个元素是矩阵的列数
size(X,1); 返回矩阵X的行数;
size(X,2); 返回矩阵X的列数;

3.开根号

sqrt(9); 开平方
nthroot(x,n); x开n次方

4.hold on、hold off

hold on:已在当前坐标轴中画了一幅图,再画另一幅图时,原来的图还在,与新图共存
hold off:在轴上绘制的是新图,原来的图看不到了

5.linspace函数、logspace函数

linspace(-10, 10, 100); 生成将区间[-10,10]等分100份的1100的矩阵
logspace(-2, 3, 20); 生成将区间 [ 1 0 − 2 , 1 0 3 ] [10^{-2},10^3] [102,103]等分20份的1
20矩阵

6.mean函数

1)M = mean(A)
如果A是一个向量,mean(A)返回A中元素的平均值。
如果A是一个矩阵,mean(A)将其中的各列视为向量,就把矩阵中的每列看成一个向量,返回一个包含每一列所有元素的平均值的行向量。
2)M = mean(A,dim)
返回A中沿着标量dim指定的维数上的元素的平均值。
mean(A,2)就是包含每一行的平均值的列向量。

7.std函数

std(x,flag,dim)
flag为0是除以n-1(默认),flag为1是除以n。
dim为1是按照列分,dim为2是按照行分。

8.numel函数

用于计算数组中满足指定条件的元素个数。
n = numel(A); 返回数组A中元素个数。
n = numel(A, index1, index2, … indexn); 其中indexi可以是切片运算、算术表达式、逻辑表达式等。
eg:numel(A, 1:2, 2:4); 相当于numel(A(1:2, 2:4));

你可能感兴趣的:(机器学习)