机器学习笔记
机器学习笔记
线性回归
0x01 什么是机器学习
从数据中寻找规律, 简历关系, 根据建立的关系去解决问题.
应用场景:
- 数据挖掘
- 计算机视觉
- 自然语言处理
- 证券分析
- 医学诊断
- 机器人
- DNA 测序
- …
获取数据, 自动求解数据关系, 在新数据上做预测.
分类:
- 监督学习 (Supervised Learning)
- 线性回归
- 逻辑回归
- 决策树
- 神经网络
- 卷积神经网络
- 循环神经网络
- 无监督学习 (Unsupervised Learning)
- 聚类算法
- 半监督学习 (Semi-supervised Learning)
- 强化学习 (Reinforce Learning)
0x02 线性回归
定义
回归分析:
根据数据, 确定两种或两种以上变量间相互依赖的定量关系.
\[y = f(x_1, x_2, ..., x_n)\]回归:
变量数:
- 一元回归: $y = f(x)$
- 多元回归: $y = f(x_1, x_2, … x_n)$
函数关系:
- 线性回归: 回归分析中, 变量与因变量存在线性关系: $y = ax + b$
- 非线性回归: $y = ax^2 + bx + c$
回归问题求解
1, 确定 P, A 间的定量关系
\[\begin{align} P = f(A) \\ y = ax + b \\ \end{align}\]2, 寻找合理的 a, b
假设 x 为变量, y 为对应的结果. y' 为模型输出结果.
目标: y' 尽可能接近 y
梯度下降法
寻找极小值的一种方法. 通过向函数上当前点对应梯度 (或者近似梯队) 的反方向的规定步长距离点进行迭代所所, 直到在极小点收敛.
\[\begin{align} J = f(p) \\ P_{i+1} = p_i - a \frac{\theta}{\theta p_i}f(p_i) \\ \end{align}\]Scikit-learn (SKLearn)
Python 中专门针对机器学习应用而发展起来的一款开源框架 (算法库), 可以实现数据预处理, 分类, 回归, 降维, 模型选择等常用的机器学习算法.
1
2
pip install scikit-learn \
-i https://pypi.tuna.tsinghua.edu.cn/simple
调用 Sklearn 求解线性回归问题
Regression (n. 衰退)
公式: $y = ax + b$
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from sklearn.linear_model import LinearRegression
## 寻找 a, b
lr_model = LinearRegression()
lr_model.fit(x, y)
# 展示 a, b
a = lr_model.coef_
b = lr_model.intercept_
# 预测
predictions = lr_model.predict(x_new)
评估模型表现
y 与 y' 的均方误差 (MSE) (越小越好 ):
R 方值 ($R^2$) (越接近1 越好):
\[R^2 = 1 - \frac{\sum_{i=1}^{m}(y'_i - y_i)^2}{\sum_{i=1}^{m}(y_i - y''_i)^2)} = 1 - \frac{MSE}{方差}\]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from sklearn.metrics import mean_squared_error, r2_score
MSE = mean_squared_error(y, y_predict)
R2 = r2_score(y, y_predict)
## 画图对比 y 和 y'
from matplotlib import pyplot as plt
plt.scatter(y, y1)
## 画散点图
import matplotlib.pyplot as plt
plt.scatter(x, y)
## 多图
fig1 = plt.subplot(211)
plt.scatter(x1, y1)
fig2 = plt.subplot(212)
plt.scatter(x2, y2)
Appendix
This post is licensed under CC BY 4.0 by the author.