单变量线性回归

在机器学习和模式识别等领域中,一般需要将样本分成独立的三部分:

  • 训练集(train set)
    用来估计模型

  • 验证集(validation set )
    用来调超参数

  • 测试集(test set)
    用来测试模型准确度
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 有监督机器学习:我们要教会计算机做某些事情
    有监督机器学习就是:我们给算法一个数据集,其中包含了正确答案,算法的目的就是给出更多的正确答案

  • 无监督机器学习:让计算机自己去做某些事情
    无监督机器学习就是:我们给算法一个数据集,但是不给他正确答案,而让计算机自己去学习

线性回归

在这里插入图片描述
对于一元线性回归(单变量线性回归)来说,简单机器学习流程图1中的学习算法为就是:y = ax + b
我们换一种写法: hθ(x) = θ0 + θ1*x1
θ0, θ1就是参数,x1是特征

练习1 – 利用Sklearn做线性回归的预测:

"""
使用sklearn实现线性回归
"""

import numpy as np
from sklearn.linear_model import LinearRegression

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

lin_reg = LinearRegression()
# fit方法就是训练模型的方法
lin_reg.fit(X, y)
# intercept 是截距θ0 coef是参数θ1
print(lin_reg.intercept_, lin_reg.coef_)

# 预测
X_new = np.array([[0], [2]])
print(lin_reg.predict(X_new))

结果:

[3.73999028] [[3.24824501]]
[[ 3.73999028]
 [10.23648029]]

线性回归实际上要做的事情就是: 选择合适的参数(θ0, θ1),使得hθ(x)方程,很好的拟合训练集

损失(代价)函数 – 均方误差(MSE mean squre error)

其实就是:真实值-预测值 f(x(i)) – y(i)
在这里插入图片描述

梯度下降算法

在这里插入图片描述
在这里插入图片描述

如果α太小的话,梯度下降会很慢
如果α太大的话,梯度下降越过最小值,不仅不会收敛,而且有可能发散
即使学习率α是固定不变的,梯度下降也会熟练到一个最低点
在这里插入图片描述
线性回归的梯度下降
在这里插入图片描述

  • “Batch” Gradient Descent 批梯度下降
    批梯度下降:指的是每下降一步,使用所有的训练集来计算梯度值
  • “Stochastic” Gradient Descent 随机梯度下降
    随机梯度下降:指的是每下降一步,使用一条训练集来计算梯度值
  • “Mini-Batch” Gradient Descent “Mini-Batch”梯度下降
    “Mini-Batch”梯度下降:指的是每下降一步,使用一部分的训练集来计算梯度值

练习 – 利用批梯度下降做线性回归的预测

"""
线性回归实现梯度下降的批处理(batch_gradient_descent )
"""
import numpy as np

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]
# print(X_b)

learning_rate = 0.1
# 通常在做机器学习的时候,一般不会等到他收敛,因为太浪费时间,所以会设置一个收敛次数
n_iterations = 1000
m = 100

# 1.初始化theta, w0...wn
theta = np.random.randn(2, 1)
count = 0

# 4. 不会设置阈值,之间设置超参数,迭代次数,迭代次数到了,我们就认为收敛了
for iteration in range(n_iterations):
    count += 1
    # 2. 接着求梯度gradient
    gradients = 1/m * X_b.T.dot(X_b.dot(theta)-y)
    # 3. 应用公式调整theta值, theta_t + 1 = theta_t - grad * learning_rate
    theta = theta - learning_rate * gradients

print(count)
print(theta)

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值