笔记 - 机器学习 基础与线性回归

原文引用https://www.dazhuanlan.com/2019/08/26/5d62fe3eea881/


定义 :

Octave for Microsoft Windows

  • 主要用于数值分析的软件,在初学机器学习很好用
  • 下载地址 : Octave 官方网站

  • 下载地址

  • 下载 installer 后不断 next 就能安装完成了

P.S.下载任何版本都可以,但不要下载 Octave 4.0.0,此版本有重大的 bug

Supervised learing ( 监督式学习 )

  • 定义 : 机器去学习事先标记过的训练范例 ( 输入和预期输出 ) 后,去预测这个函数对任何可能出现的输入的输出
  • 函数的输出可以分为两类 :

    • 回归分析 ( Regression ) : 输出连续的值,例如 : 房价
    • 分类 ( Classification ) : 输出一个分类的标签,例如 : 有或没有

Unsupervised learing ( 非监督式学习 )

  • 定义 : 没有给定事先标记过的训练范例,自动对输入的数据进行分类或分群
  • 常用于分群,有两类应用 :

    • 聚类 ( Clustering ) : 将数据集中的样本划分为若干个通常是不相交的子集,例如 : 分类成不同类的新闻
    • 非聚类 ( Non-clustering ) : 例如 : 鸡尾酒会算法,从带有噪音的数据中找到有效数据,可用于语音辨识

线性回归算法 ( Linear Regression )

  • hθ(x) = θ₀ + θ₁x₁ : 线性回归算式
  • m : 数据量
  • x⁽ⁱ⁾ : i 代表第 i 笔数据

代价函数 ( Cost Function )

  • 算出代价函数
1
2
3
4
5
6
7
8
9
10
11
function J = costFunctionJ(X, y, theta)

m = length(y);
J = 0

predictions = X * theta;
sqrErrors = (predictions - y).^2;

J = 1 / (2 * m) * sum(sqrErrors);

end
  • 在 Octave 上的代价函数函数

  • 找出代价函数的最小值,来找出 θ₀、θ₁

使用梯度下降 ( Gradient descent ) 将函数 J 最小化

  1. 初始化 θ₀、θ₁ ( θ₀=0, θ₁=0 也可以是其他值)
  2. 不断改变 θ₀、θ₁ 直到找到最小值,或许是局部最小值

  • 梯度下降公式,不断运算直到收敛,θ₀、θ₁ 必须同时更新
  • α 后的公式其实就是导数 ( 一点上的切线斜率 )
  • α 是 learning rate

  • 正确的算法

  • 错误的算法,没有同步更新
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)

m = length(y);
J_history = zeros(num_iters, 1);

for iter = 1:num_iters

delta = 1 / m * (X' * X * theta - X' * y);
theta = theta - alpha .* delta;

J_history(iter) = computeCost(X, y, theta);

end

end
  • 在 Octave 上的梯度下降函数

Learning Rate α

  • α 是 learning rate,控制以多大幅度更新 θ₀、θ₁
  • 决定 α 最好的方式是随着绝对值的导数更新,绝对值的导数越大,α 越大
  • α 可以从 0.001 开始 ( 每次 3 倍 )
  • α 太小 : 收敛会很缓慢
  • α 太大 : 可能造成代价函数无法下降,甚至无法收敛

结合梯度下降与代价函数

  • 将代价函数带入梯度下降公式
  • 所有样本带入梯度下降公式不断寻找 θ₀、θ₁,在机器学习里称作批量梯度下降 ( batch gradient descent )

多特征线性回归 ( Linear Regression with multiple variables)

  • hθ(x) = θ₀x₀ + θ₁x₁ + θ₂x₂ + ... + θₙxₙ : 多特征线性回归算式,x₀ = 1
  • n : 特征量

使用梯度下降解多特征线性回归

  • 相较于一元线性回归,只是多出最后的 xⱼ

  • 拆开后

特征缩放 ( Feature Scaling ) 与均值归一化 ( Mean Normalization )

  • 目的 : 加快梯度下降,因为特征值范围相差过大会导致梯度下降缓慢

  • sᵢ : 特征缩放,通常使用数值范围
  • μᵢ : 均值归一化,通常使用数值的平均
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function [X_norm, mu, sigma] = featureNormalize(X)

X_norm = X;
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));

mu = mean(X);
sigma = std(X);

for i = 1:size(X, 2)

X_mu = X(:, i) - mu(i);
X_norm(:, i) = X_mu ./ sigma(i);

end

end
  • 在 Octave 上的特征缩放与均值归一化函数

多项式回归 ( Polynomial Regression )

  • 我们可以结合多种有关的特征,产生一个新的特征,例如 : 房子长、宽结合成房子面积
  • 假如线性的 ( 直线 ) 函数无法很好的符合数据,我们也可以使用二次、三次或平方根函数 ( 或其他任何的形式 )

正规方程 ( Normal Equation )

X = 各特征值
y = 各结果

  • 算式 : (XᵀX)⁻¹Xᵀy
  • Octave : pinv(X'*X)*X'*y
1
2
3
4
5
6
7
function [theta] = normalEqn(X, y)

theta = zeros(size(X, 2), 1);

theta = pinv(X' * X) * X' * y

end
  • 在 Octave 上的正规方程函数

在 Octave 里我们通常用 pinv 而不是 inv,因为使用 pinv 就算 XᵀX 为不可逆,还是会给予 θ 的值

  • XᵀX 不可逆的原因 :

    • 多余且无关的特征值
    • 特征值过多 ( m<=n ),删除一些或正规化

梯度下降 vs 正规方程

  • 梯度下降

    • 优点 :

      • 特征量大时,可以正常运行
      • O(kn²)
    • 缺点 :

      • 需要选择 α
      • 需要不断迭代
  • 正规方程

    • 优点 :

      • 不需要选择 α
      • 不用迭代
    • 缺点 :

      • 需运算 (XᵀX)⁻¹,所以当特征量大时,会耗费很多运算时间 ( n > 10000 )
      • O(n³)

猜你喜欢

转载自www.cnblogs.com/petewell/p/11410461.html