机器学习笔记 (1)-线性回归模型

来源:互联网 发布:黑客帝国矩阵革命 编辑:程序博客网 时间:2024/06/06 00:13

参考资料

  • 《机器学习》-周志华
  • 《寒小阳机器学习讲义》-寒小阳
  • 《统计学习方法》-李航

摘要

机器学习包含监督学习、非监督学习、以及强化学习三大部分。监督学习又分为分类和回归两大类。线性回归模型就属于监督学习里的回归模型

正文

1. 定义

线性回归模型
通过属性的线性组合进行预测的函数,即
f(x)=w1.x1+w2.x2+w3.x3+...+wn.xn+b

向量形式为:f(x)=wTx+b
其中 w=(w1,w2,w3,...,wn)

x0=1,w0=b,则
f(x)=wTx
其中 w=(w0,w1,w2,w3,...,wn)

2.线性模型的图示


3.损失函数

3.1损失函数定义

作为目标函数进行优化,使其函数值最小化。在线性模型中,损失函数为:
J(w0,w1,w2,...,wn)=12mmi=1{fw(xi)yi}2

3.2 损失函数的图像

损失函数为一个凸函数

3.2最小化损失函数

我们模型的优化目标为最小化损失函数。要最小化损失函数,需要沿下降速度最快的方向走,使目标函数最小化。

4.梯度下降算法(GD)

  1. 目标函数下降最快的方向为梯度的负方向。因此梯度下降算法为沿梯度的负方向逐步的使目标函数值最小化的过程。
    对应的数学表达式为:
    wi+1=wiαdJ(w)d(w)
    其中J(w)=12mmi=1{fw(xi)yi}2
    dJ(w)d(w)=1mmi=1{(fw(xi)yi)xi}

二维平面的梯度下降算法示意图

三维平面的梯度下降算法示意图

2.梯度下降算法的伪代码描述:
repeat until convergence{
wi+1=wi+αdJ(w)d(w)
}

代码讲解(核心代码)

完整代码下载

# 数据加载data = np.loadtxt('linear_regression_data1.txt', delimiter=',')X = np.c_[np.ones(data.shape[0]),data[:,0]]y = np.c_[data[:,1]]# 对数据绘制散点图plt.scatter(X[:,1], y, s=30, c='r', marker='x', linewidths=1)plt.xlim(4,24)plt.xlabel('Population of City in 10,000s')plt.ylabel('Profit in $10,000s');# 计算损失函数def computeCost(X, y, theta=[[0],[0]]):    m = y.size    J = 0    h = X.dot(theta)    J = 1.0/(2*m)*(np.sum(np.square(h-y)))    return J# 梯度下降def gradientDescent(X, y, theta=[[0],[0]], alpha=0.01, num_iters=1500):    m = y.size    J_history = np.zeros(num_iters)    for iter in np.arange(num_iters):        h = X.dot(theta)        theta = theta - alpha*(1.0/m)*(X.T.dot(h-y))        J_history[iter] = computeCost(X, y, theta)    return(theta, J_history)# 得到模型的参数和损失theta , Cost_J = gradientDescent(X, y)  

总结

线性回归-模型简单,可解释性高,在一定程度上可以防止过拟合,用途广泛,可作为各个系统的基线模型。

线性模型形式简单、易于建模。但是却蕴含着机器学习中一些重要的基本思想。许多功能更为强大的非线性模型可以在线性模型的基础上通过引入层级结构或高维映射而得。此外,由于w直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性。

本章代码下载 https://github.com/yanwosky4/MLNotebookProject/tree/master/note1-LinearModel/code
邮箱: yanwosky4@gmail.com
github地址: https://github.com/yanwosky4 ,欢迎Star

原创粉丝点击