赞
踩
“借问酒家何处有?牧童遥指杏花村。”
本文采用编译器:jupyter
线性模型试图学得一个通过属性的线性组合来进 预测的函数,即
线性模型形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想。许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得。此外,由于 ω 直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性。
例如,我们要判断一个西瓜是好吃的还是难吃的,现在我们拿到一个西瓜,可以直接看到它的颜色、根蒂形状,用手指敲击能听出敲声是什么样的。这里所说的“颜色”、“根蒂形状”、“敲声”就是“特征”
若在西瓜问题中学得:
则意味着可通过综合考虑色泽、根蒂和敲声来判断瓜好不好,其中根蒂最要紧,而敲声比色泽更重要。
其中,学习到线性方程的过程如图:
学习的目标是使得预测值与真实值的误差最小,这样我们的预测结果就会越准确,即
这是一个典型的最小二乘法问题。根据一系列数学推导,可以计算出a和b的值
数学推导如下,其中牵扯到一些线性代数的知识,可以略过此部分
求极值问题,即令目标函数对a,b求导等于0
首先令J对b的偏导等于0,则有
之后令J对a的偏导等于0 ,则有
进一步化简得:
即完成a,b的推导
接下来就进入激动人心的编程时刻!
1. 准备数据阶段:
- import numpy as np
- import matplotlib.pyplot as plt
-
- x = np.array([1., 2., 3., 4., 5.])
- y = np.array([1., 3., 2., 3., 5.])
-
- plt.scatter(x, y)
- plt.axis([0, 6, 0, 6])
- plt.show()
2. 接下来计算a和b的值
- x_mean = np.mean(x)
- y_mean = np.mean(y)
-
- # 分子
- num = 0.0
-
- # 分母
- d = 0.0
-
- for x_i, y_i in zip(x, y):
- num += (x_i - x_mean) * (y_i - y_mean)
- d += (x_i - x_mean) ** 2
-
- a = num / d
- b = y_mean - a * x_mean
-
- a
- # Out[7]:
- # 0.80000000000000004
-
- b
- # Out[8]:
- # 0.39999999999999947
-
- # 预测线
- y_hat = a * x + b
- plt.scatter(x, y)
- plt.plot(x, y_hat, color='r')
- plt.axis([0, 6, 0, 6])
- plt.show()
3. 对某个点进行预测
- # 预测某个点
- x_predict = 6
- y_predict = a * x_predict + b
-
- y_predict
- # Out[11]:
- # 5.2000000000000002
代码在文末rua~
from playML.SimpleLinearRegression impor
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。