ipynb文件见:https://github.com/824024445/Machine-learning-notes/blob/master/4训练模型.ipynb
《Sklearn与TensorFlow机器学习实用指南》学习笔记
本章内容
> 第一步
将以一个简单的线性回归模型为例,讨论两种不同的训练方法来得到模型的最优解
- 1.直接在封闭方程上求根
- 2.迭代,梯度下降(GD)的方法
> 第二步
研究更复杂的模型:多项式回归,可以拟合非线性数据集。由于参数多,多以容易出现过拟合,所以本章还会介绍如何判断是否过拟合,并介绍几种正则化方法减少过拟合。
> 第三步
介绍两种常用的分类模型:Logistic回归和Softmax回归
一、线性回归模型为例
> 写在前面,不管是以封闭方程求解,还是通过梯度下降求解。都只是求解的方式而已。不全部封闭方程求解只是为了节省资源加快速度。
LinearRegression预测器使用封闭求解。SCDRegressor预测器使用梯度下降求解。
1.1 在封闭方程上求根
1.1.1 自己实现
import numpy as np
import matplotlib.pyplot as plt
X = 2*np.random.rand(100, 1) # rand是生成平均分布的浮点数
y = 4 + 3*X + np.random.randn(100, 1) # randn是生成正态分布的浮点数
plt.scatter(X, y)
plt.show()
> f(x) = w1x1 + w2x2 + w3x3 + … + wdxd + b
向量w* = (w1, w2, w3, … , wd, b)
线性模型就是求均方差最小的那条线的w*
省略西瓜书上的推导过程,结果为:w* = (XTX)-1XTy
通过Numpy 的线性代数模块(np.linalg
)中的inv()
函数来计算矩阵的逆,以及dot()
方法来计算矩阵的乘法。
X_b = np.c_[np.ones((100, 1)), X]
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
theta_best
array([[4.50080561],
[2.66101173]])
求得的参数,第一个是截距的,第二个是参数w。 取决于X的组成,如果1在第一列,那么截距就是第一个参数,如果1在最后一列,那么截距就是最后一个。
进行预测
X_new = np.array([[0], [2]])
# X_new_b = np.c_[X_new, np.ones((2, 1))]
X_new_b = np.c_[np.ones((2, 1)), X_new]
y_predict = X_new_b.dot(theta_best)
y_predict
array([[4.50080561],
[9.82282906]])
画出图形
plt.plot(X_new, y_predict, "r-")
plt.plot(X, y, "b.")
plt.axis([0,2,0,15])
plt.